unittest补充
1.用例执行的顺序
#test.py #coding:utf-8 from Demo1 import Count import unittest class TestBdd(unittest.TestCase): def setUp(self): print "test TestBdd:" def test_ccc(self): print "test ccc" def test_aaa(self): print "test aaa" def tearDown(self): pass class TestAdd(unittest.TestCase): def setUp(self): print "test TestAdd:" def test_add(self): print "test bbb" def tearDown(self): pass if __name__=="__main__": unittest.main()
运行后的结果如下图所示:
无论执行多少次,结果都是一样的,通过上面的结果,规律如下:
unittest框架默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0~9,A~Z,a-z。所以,TestAdd类会优先于TestBdd类被执行,test_aaa()方法会优先于test_ccc()被执行,因而它并没有按照用例从上到下的顺序执行。
对于测试目录和测试文件来说,unittest框架同样是按照这个规则来加载测试用例的。
那么可不可以让test_ccc()先执行?答案是肯定的,只是不能使用默认的main()方法了,而是需要通过TestSuite类的addTest()方法按照一定的顺序来加载。
#test.py #coding:utf-8 import unittest class TestBdd(unittest.TestCase): def setUp(self): print "test TestBdd:" def test_ccc(self): print "test ccc" def test_aaa(self): print "test aaa" def tearDown(self): pass class TestAdd(unittest.TestCase): def setUp(self): print "test TestAdd:" def test_add(self): print "test bbb" def tearDown(self): pass if __name__=="__main__": suite=unittest.TestSuite() suite.addTest(TestBdd("test_ccc")) suite.addTest(TestAdd("test_add")) suite.addTest(TestBdd("test_aaa")) runner=unittest.TextTestRunner() runner.run(suite)
执行结果如下所示:
现在的执行顺序就是addTest()方法所加载的顺序。Discover()的加载测试用例的规则与main()方法相同。所以,我们只能通过测试用例的名称来提高被执行的优先级。例如:将希望先被执行的测试用例命名为“test_a”,希望最后执行的测试用例命名为“test_z”。
2.执行多级目录的用例
要控制web用例的数量,但是当测试用例达到一定量级时,就要考虑划分目录,比如目录如下测试目录:
test_project/test_case/
--test_bbb/
------test_ccc/
---------test_c.py
------test_b.py
--test_ddd/
---------test_d.py
test_a.py
对于这个目录,如果将discover()方法中的start_dir参数定位为“./test_case/”目录,那么只能加载test_a.py文件中的测试用例。怎样让unittest框架查找到test_case/的子目录中的测试文件呢?方法很简单,在每个目录下放一个__init__.py文件。