unittest框架

1、unittest框架默认用ACSII码顺序加载测试用例,数字与字母的顺序为:0~9,A~Z,a~z

(1)对于类来说,class TestAxx 会优先于class TestBxx被执行

(2)对于方法来说,test_aaa()方法会有优先于test_bbb()被执行,例如按照test0,test1,test10,test11....test20,test21执行

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_bbb(self):
        print("test bbb") 
   
    def tearDown(self):
        pass

if __name__ == '__main__':
    unittest.main()


执行结果

==============
test TestAdd:
test bbb
.test TestBdd:
test aaa
.test TestBdd:
test ccc
. 
-------------------------

  

(3)如果不想让test—bbb()先执行,需要通过TestSuite类的addTest()方法按照一定的顺序来加载

run.py

....

if __name__ == '__main__':
    #构造测试集
    suite = unittest.TestSuite()
    suite.addTest(TestBdd("test_ccc"))
    suite.addTest(TestAdd("test_bbb"))
    suite.addTest(TestBdd("test_aaa"))
    #执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)


执行顺序:
===============
test TestBdd:
test ccc
.test TestAdd:
test bbb
.test TestBdd:
test aaa
.
--------------------

  

2、@paramunittest框架接受参数时需使用setParameters方法,而且只能这样命名,括号后面的参数分别接受传入的参数名称。前面定义的是字典,那参数就跟前面字典的key保持一致

注意:使用@paramunittest时候,setParameters的参数顺序要与传进@paramunittest的参数顺序一致

3、unittest.defaultTestLoader()类:通过该类下的discover方法可自动根据test_dir路径下查找测试用例文件(test*.py),并将查找的测试用例组装到测试套件,用run()方法执行:discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

4、unittest.TextTestRunner跟HTMLTestRunner.HTMLTestRunner都是调用父类(TestRunner )来执行用例,不过生成的报告格式不一致

5、global用于修饰变量,将变量定义为全局变量

6、readline读取返回的是string,读取即可;readlines返回的是list列表,需要转换为str读取,同时换行的位置会被转换为\n

7、unittest有几个重要概念:

(1)test case:一个测试用例就是一个完整的测试流程,包括环境准备(set  up),执行(run),测试环境还原(tear down)

(2)test suite:一个功能可能需要多个用例,将多个用例集合在一起执行,可以通过addTest将test case加载到test suite中

(3)test runner:unittest用来执行用例,将结果保存在TextTestResult

Unittest整个流程为写好testcase,将多个testcase用addtest集成到test suite中,用test runner执行test suite,将结果保存在texttestresult中

(4)unittest函数执行入口 unittest.main()

8、想要跳过某个case,用unittest的skip方法装饰器,并传递此方法名为实参作为参数传递@unittest.skip(方法名)

9、unittest框架在使用discover时候,需要将测试用例修改为以test开头,否则无法加载

 

posted on 2020-02-19 14:52  ChanXM  阅读(176)  评论(0)    收藏  举报

导航