我正在使用python unittests和selenium,在我的代码中,我有一个测试类和许多测试用例:
class BasicRegression(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome(executable_path=Data.driver)
cls.driver.implicitly_wait(1)
cls.driver.maximize_window()
def testcase1_some_stuff(self):
do_something()
def testcase2_some_stuff(self):
do_something()
def testcase3_some_stuff(self):
do_something()
...
@classmethod
def tearDownClass(cls):
cls.driver.close()
cls.driver.quit()
if __name__ == '__main__':
unittest.main()
测试按字母顺序执行,即testcase1、testcase2和testcase3,直到testcase9。标准问题出现在testcase10等等,它首先执行
我的问题是我如何设定他们的执行顺序
首先,单元测试应该是独立的。所以一定是python-unittest。通过
python-unittest
执行的测试应设计为能够独立运行。纯单元测试提供了一个好处,即当它们失败时,它们通常会描述出到底出了什么问题。尽管如此,我们还是倾向于使用unittest
框架编写功能测试、集成测试和系统测试,这些测试在没有排序的情况下是不可行的,因为Selenium会自动执行浏览上下文。为了实现排序,您至少需要对测试名使用更好的命名约定,例如:test_1
、test_2
、test_3
,等等,这是有效的,因为测试是根据字符串的内置顺序排序的然而,根据您的观察,问题出现在
test_10
等排序顺序似乎中断的地方。例如,在名为test_1
、test_2
和test_10
的3个测试中,unittest似乎在test_2
之前执行test_10
:代码:
控制台输出:
解决方案
在不同的讨论中提出了不同的解决方案,其中一些解决方案如下:
@max在讨论中Unittest tests order建议将
sortTestMethodsUsing
设置为None
,如下所示:@atomocopter在讨论changing order of unit tests in Python中建议将
sortTestMethodsUsing
设置为某个值,如下所示:@ElmarZander在讨论中Unittest tests order建议使用
nose
并将您的测试用例编写为函数(而不是作为某些测试用例派生类的方法)nose
不处理顺序,而是使用文件中定义的函数顺序@Keiji在讨论中提到:
相关问题 更多 >
编程相关推荐