系统学习Python——单元测试unittest:用例执行次序(python unittest执行顺序)

网友投稿 947 2022-08-30


系统学习Python——单元测试unittest:用例执行次序(python unittest执行顺序)

在《单元测试unittest:执行测试用例》​中,我们发现​​testclass.py​​​文件的运行结果中4个测试用例执行的顺序为​​test_first​​​、​​test_second​​​、​​test_fourth​​​、​​test_third​​​。该顺序和测试用例的摆放顺序并不相同,因为测试用例执行的顺序依照的是方法和函数名的ASCII值排序。​​testclass.py​​​文件中包含两个类,分别是​​MyTestClassOne​​​和​​MyTestClassTwo​​​,前11个字符​​test_​​​相同,从第12个字符开始不同,​​O​​​排在​​T前面​​​,因此​​MyTestClassOne​​​类先执行。​​MyTestClassOne​​​类中有两个测试用例,用例名分别是​​test_first​​​和​​test_second​​​,按ASCII值来排序的话​​test_first​​​比​​test_second​​​先执行,同理​​test_fourth​​​比​​test_third​​先执行。

如果想让测试用例按照某种顺序来执行,我们可以将用例按顺序添加到集合或者调整测试用例名称:

将用例按顺序添加到集合

import unittestfrom learning_unittest import testclassif __name__ == '__main__': suite = unittest.TestSuite() suite.addTest(testclass.MyTestClassOne('test_first')) suite.addTest(testclass.MyTestClassOne('test_second')) suite.addTest(testclass.MyTestClassTwo('test_third')) suite.addTest(testclass.MyTestClassTwo('test_fourth')) unittest.TextTestRunner()`.run(suite)

我们按照​​test_first​​​、​​test_second​​​、​​test_third​​​、​​test_fourth​​的顺序把测试用例组装成测试集合,然后再执行这个测试集合,运行结果如下。

setUpClasssetUptest_firsttearDownsetUptest_secondtearDowntearDownClasssetUpClasssetUptest_thirdtearDownsetUptest_fourthtearDowntearDownClass....----------------------------------------------------------------------Ran 4 tests in 0.001sOK

测试用例执行的顺序和我们组合测试集合的顺序是一致的。但是当测试用例非常多的时候,我们不可能人工去判断每条用例名的ASCII值,况且一条条地将测试用例加到测试集合中也是不小的工作量。因此,应对该问题我们有更合适的解决方案——调整测试用例名称。

调整测试用例名称

既然测试用例默认的执行顺序依照的是ASCII值的排序,那么我们构造合适的类名和方法名就可以了。我们在​​testclass.py​​文件的基础上调整类名或者方法名,在用例名中间加上数字:

# testclass.pyimport unittestclass MyTestClassOne(unittest.TestCase): @classmethod def setUpClass(cls): print('setUpClass') def setUp(self): print('setUp') def test_001(self): print('test_first') self.assertEqual(0, 0) def test_002(self): print('test_second') self.assertEqual(0, 0) def tearDown(self): print('tearDown') @classmethod def tearDownClass(cls): print('tearDownClass')class MyTestClassTwo(unittest.TestCase): @classmethod def setUpClass(cls): print('setUpClass') def setUp(self): print('setUp') def test_003(self): print('test_third') self.assertEqual(0, 0) def test_004(self): print('test_fourth') self.assertEqual(0, 0) def tearDown(self): print('tearDown') @classmethod def tearDownClass(cls): print('tearDownClass')if __name__ == '__main__': unittest.main

执行结果如下:

============================= test session starts =============================collecting ... collected 4 itemstestclass.py::MyTestClassOne::test_001 setUpClasssetUptest_firsttearDowntestclass.py::MyTestClassOne::test_002 setUptest_secondtearDowntearDownClasstestclass.py::MyTestClassTwo::test_003 setUpClasssetUptest_thirdtearDowntestclass.py::MyTestClassTwo::test_004 ]setUptest_fourthtearDowntearDownClass============================== 4 passed in 0.04s ==============================Process finished with exit code 0

同样,我们在一个目录下新建的测试用例文件也是按照文件名的ASCII值的排序来编排和执行的,我们也可以通过在文件名中添加数字来指定测试用例的执行顺序。在实际项目中,部分测试用例可能存在前后的依赖关系,这时候我们就会期望它们按照顺序执行。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:# yyds干货盘点 # 手把手教你安装Anaconda和启动jupyter(常见问题解决方法分享)
下一篇:mybatis sum(参数) 列名作为参数的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~