Selenium 2自动化测试实战30(unittest补充)

瘦欲@ 提交于 2019-12-03 04:42:30

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文件。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!