• (四十一)Unittest单元测试框架之关于unittest还需要知道的-执行用例的顺序


    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

    关于unittest单元测试框架,还有一些问题值得进一步探讨。也许你已经在看认识unittest过程中产生了一些疑问,也许你会在接下来的文章中找到答案。

    执行用例的顺序

    用例的执行顺序涉及多个层级:在多个测试目录的情况下,先执行那个目录?在多个测试文件的情况下,先执行那个文件?在多个测试类的情况下,先执行那个测试类?在多个测试方法(用例)的情况下,先执行那个测试方法?

    import unittest
    
    class TestBdd(unittest.TestCase):
        def setUp(self):
            print('test TestBdd :')
    
        def test_ccc(self):
            print('test ddd')
    
        def test_aaa(self):
            print('test ccc')
    
        def tearDown(self):
            pass
    
    class TestAdd(unittest.TestCase):
        def setUp(self):
            print('test TestAdd :')
    
        def test_ccc(self):
            print('test bbb')
    
        def test_aaa(self):
            print('test aaa')
    
        def tearDown(self):
            pass
    
    #执行测试类的测试方法
    if __name__ == '__main__':
        unittest.main()

    运行结果:

    无论执行多少次,顺序都是一样的,通过上面的结果,相信你已经找到了unittest执行测试用例的规律。

    unittest框架默认根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0~9A~Za~z。所以,TestAdd类会优先于TestBdd类被执行,test_aaa()方法会优先于test_ccc()被执行,因而它并没有按照用例从上到下的顺序执行。

    对于测试目录于测试文件来说,unittest框架同样时按照这个规则来加载测试用例的。 那么可不可以让test_ccc()先执行?答案是肯定的,只是不能使用默认的main()方法了,而是要通过TestSuite类的addTest()方法按照一定的顺序来加载。

    import unittest
    
    class TestBdd(unittest.TestCase):
        def setUp(self):
            print('test TestBdd :')
    
        def test_ddd(self):
            print('test ddd')
    
        def test_ccc(self):
            print('test ccc')
    
        def tearDown(self):
            pass
    
    class TestAdd(unittest.TestCase):
        def setUp(self):
            print('test TestAdd :')
    
        def test_bbb(self):
            print('test bbb')
    
        def test_aaa(self):
            print('test aaa')
    
        def tearDown(self):
            pass
    
    #执行测试类的测试方法
    if __name__ == '__main__':
        #构造测试集
        suite = unittest.TestSuite()
        suite.addTest(TestBdd("test_ddd"))
        suite.addTest(TestBdd("test_ccc"))
        suite.addTest(TestAdd("test_bbb"))
        suite.addTest(TestAdd("test_aaa"))
    
        runner = unittest.TextTestRunner()
        runner.run(suite)

    运行结果:

    现在的执行顺序就是addTest()方法所加载的顺序。discover()的加载测试用例的规则于main()方法相同。所以,我们只能通过测试用例的命名提高被执行的优先级。例如,将希望先被执行的测试用例命名为“test_a”,希望最后执行的测试用例命名为“test_z

    执行多级目录的用例

    我们要控制Web用例的数量,但是当测试用例达到一定量级时,就要考虑划分目录比如规划如下测试目录

  • 相关阅读:
    不同数据类型在不同编译器下字节大小
    gbk/utf8/gb2312 编码中汉字字母数字所占字节数
    剑指Offer-12 矩阵中的路径
    螺旋矩阵(数组)问题(网易考点)
    C++ 多继承导致的指针偏移问题
    面试题--链表实现插入排序
    C++ 二叉树的深度优先遍历(前中后序)以及广度优先遍历
    (转)软连接和硬链接作用以及区别
    TCP/IP网络五层结构理解以及数据传输流程的理解图示
    常考知识点:进程与线程,多进程与多线程
  • 原文地址:https://www.cnblogs.com/lirongyang/p/11505093.html
Copyright © 2020-2023  润新知