【问题标题】:Aggregate test using python's unit-test is running without test runner使用 python 的单元测试的聚合测试在没有测试运行器的情况下运行
【发布时间】:2012-12-20 23:03:22
【问题描述】:

我在使用 python 中的单元测试运行硒测试的聚合测试套件时遇到问题。

下面的代码在没有调用 testRunner 的情况下从另一个模块执行测试。

当我尝试在调试模式下执行时,控制权在执行类定义行并最终在另一个模块(gmailbutton)中执行测试后不久就被传递给了 pydev_runfiles。

import unittest
from selenium import webdriver
from gmailbutton import gmailButton

class runner():
    def runner1(self):
        suite = unittest.TestSuite()
        suite.addTest(gmailButton)
        return suite

根据文档(http://docs.python.org/2/library/unittest.html),上面的代码只需将测试用例添加到套件中,测试就应该在

unittest.TextTestRunner(verbosity=2).run(suite)

这里没有发生。

gmailButton 的测试代码在这里

import unittest
from selenium import webdriver


class gmailButton(unittest.TestCase):

    global browser

    def test_gmailButton(self):

        browser = webdriver.Firefox()

        try:
            browser.get("http://www.gmail.com")           
            browser.find_element_by_id("Email").send_keys("abcd")
            browser.find_element_by_id("Passwd").send_keys("123445")
            browser.find_element_by_id("signIn").click()

        except Exception as e:
            raise
            print e

        finally:
            browser.close()

更新:

这是我从 eclipse 中执行的确切代码。

import unittest
from selenium import webdriver
from gmailbutton import gmailButton
from pyUnitExercise import exercise1

class runner():
    def runner1(self):
        suite = unittest.TestSuite()
        suite.addTest(gmailButton)
        return suite

if __name__ == "__main__":
    unittest.TextTestRunner(verbosity=2).run(runner.suite)

我对此代码的期望是执行 gmailButton 测试用例,而不是执行刚刚导入且未添加到测试套件中的 exercise1。我不知道它为什么要执行刚刚导入但未添加到测试套件中的测试。

【问题讨论】:

  • 运行时发生了什么?您收到任何错误或消息吗?
  • 我没有收到任何错误。相反,gmailButton 脚本被执行。我试图了解为什么会发生这种情况。
  • 对不起,我没有关注。它在没有你调用unittest.TextTestRunner(verbosity=2).run(suite) 的情况下执行吗?我无法用上面的代码重现问题。
  • 是的。这是正确的。它在不调用 unittest.TextTestRunner(verbosity=2).run(suite) 的情况下执行请注意,gmailbutton.py 是我在另一个模块中导入的不同模块。
  • gmailbutton.py 中还有其他内容吗?也许它在导入时运行?如果是这样,你应该使用if __name__ == "__main__": main()

标签: python unit-testing selenium webdriver


【解决方案1】:

如果您使用的是 PyDev,那么您可能实际上并没有使用 python 的 stdlib unittest。它使用鼻子和/或py.test:

http://pydev.org/manual_adv_pyunit.html

这两个库都通过自省搜索测试;您不需要向测试套件添加显式条目。但是,如果没有运行测试时的输出,很难判断这是否真的发生了。

【讨论】:

    【解决方案2】:

    我使用nose 而不是单元测试,但这是一种似乎对我有用的方法:

    >>> import unittest
    >>> class gmailButton(unittest.TestCase):
        def test_gmailButton(self):
            pass
    
    
    >>> suite = unittest.TestSuite()
    >>> loader = unittest.TestLoader()
    >>> tests = loader.loadTestsFromTestCase(gmailButton)
    >>> suite.addTest(tests)
    >>> unittest.TextTestRunner(verbosity=2).run(suite)
    test_gmailButton (__main__.gmailButton) ... ok
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.047s
    
    OK
    <unittest.runner.TextTestResult run=1 errors=0 failures=0>
    

    【讨论】:

    • 我面临的问题是,gmailButton 测试甚至在达到 unittest.TextTestRunner(verbosity=2).run(suite) 之前就被加载了
    猜你喜欢
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2010-12-06
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多