龙空技术网

unittest的使用

爽朗的sssssssss 47

前言:

此时朋友们对“python unittest原理”大体比较讲究,同学们都想要剖析一些“python unittest原理”的相关知识。那么小编同时在网摘上收集了一些对于“python unittest原理””的相关文章,希望看官们能喜欢,我们快快来了解一下吧!

1、unittest框架介绍

python自带的单元测试框架,常用在单元测试

在自动化测试中提供用例组织与执行

提供丰富的断言防范-验证函数等功能

unitest提供了test cases、test suites、test fixtures、test runner相关的组件

编写规范:

测试模块首先import unittest

测试类必须继承unittest.TestCase

测试方法必须以“test_”开头

2.setup与teardown

setUp用来为测试准备环境, tearDown用来清理环境。

如果想要在所有case执行之前准备一 次环境,并在所有case执行结束之后再清 理环境,我们可以用setUpClass0)与 tearDownClass(); 比如:数据库连接及销毁(测试方法的命名:以test开头)

基于测试方法级别的setUp,tearDown执行每个测试方法的时候都会执行一次setUp 和tearDown基于类级别的setUpClass,tearDownClass执行这个类里面的所有测试方法只有一次执行setup,tearDown

#coding=utf-8import unittestimport requestclass TestCase01(unittest.TestCase):    def setUp(self):        print("case开始执行")        def tearDown(self):        print("case结束执行")        @classmethod    def (cls):        print("case类开始执行")            @classmethod    def tearDownClass(cls):        pass            def test_01(self):        print("执行case01")            def test_02(self):        print("执行case02")if __name__ == "__main__":    unittest.main()
3.unittest中断言
self.assertDictEqual(data1,data,msg="这两个字典不相等")elf.assertFalse(flag,msg="不等于False")self.assertEqual(flag,flag1,msg="两个str不相等")self.assertTure(flag,msg="不等于True")self.assertIn(ex1 ,ex2) # ex2是否包含ex1 注意:所谓的包含不能跳字符

4.unittest执行测试用例

case按照case名字递增,test_排序进行执行

TextTestRunner(以文本的形式运行测试用例)

编写unittest测试用例的原则

unittest会自动识别以test开头的函数是测试代码,test一定要是小写

执行测试用例的顺序

测试用例执行顺序是以test后面的字母顺序执行的。例如test a,test b,test_c

1、方法1:unittest.main()

2、方法2:suite = unittest.TestSuite() ;suite.addTest(TestCase01('test_06'))

if __name__ == "__main__":    #unittest.main() #执行方法1    suite = unittest.TestSuite() #执行方法2:加入容器中执行    suite.addTest(TestCase01('test_06'))    suite.addTest(TestCase01('test_04'))    suite.addTest(TestCase01('test_02'))    suite.addTest(TestCase01('test_05'))    suite.addTest(TestCase01('test_01'))    suite.addTest(TestCase01('test_07'))    runner = unittest.TextTestRunner()    runner.run(suite)
if __name__ == "__main__":    #unittest.main()    suite = unittest.TestSuite()      tests = [TestCase01('test_07'),TestCase01('test_02'),TestCase01('test_03'),             TestCase01('test_05'),TestCase01('test_01')]    suite.addTests(tests)    runner = unittest.TextTestRunner()    runner.run(suite)

3、方法3:可以同时测试多个类

#coding=utf-8import sys#sys.path.append("E:/www/ImoocInterface/")#当前工程目录import unittestfrom UnittestCase.test_case01 import TestCase01from UnittestCase.test_case02 import TestCase02from UnittestCase.test_case03 import TestCase03case_01 = unittest.TestLoader().loadTestsFromTestCase(TestCase01)case_02 = unittest.TestLoader().loadTestsFromTestCase(TestCase02)case_03 = unittest.TestLoader().loadTestsFromTestCase(TestCase03)suote = unittest.TestSuite([case_01,case_02,case_03])unittest.TextTestRunner().run(suote)

4、方法4:匹配某个目录下所有以test开头的py文件,执行这些文件下的所有测试用例

test_dir = "./test_case"

discover = unittestdefaultTestLoader.discover(test_dir, pattern="test*.py")

discover可以一次调用多个脚本

test_dir 被测试脚本的路径

pattern 脚本名称匹配规则

#coding=utf-8import sysimport osimport unittestcase_path = os.getcwd()+"/UnittestCase/"#拿到当前目录的绝对路径print(case_path)discover = unittest.defaultTestLoader.discover(case_path)unittest.TextTestRunner().run(discover)#print(discover)
5.unittest中条件控制跳过case

对于一些未完成的或者不满足测试条件的测试函数和测试类,可以跳过执行,使用 @unittest.skip

@unittest.skip("这个case不像执行")def test_03(self):    print("执行case03")    flag = True    self.assertFalse(flag,msg="不等于True")@unittest.skipIf(host !=";,"这个case不执行")def test_05(self):    print("执行case05")    flag = "111"    flag1 = "2222"    self.assertEqual(flag,flag1,msg="两个str不相等")
6.unittest接口测试实战生产测试报告
if __name__ == "__main__":    suite = unittest.TestSuite()    suite.addTest(ImoocCase('test_banner'))    suite.addTest(ImoocCase('beta4'))    file_path = base_path+'/Report/report.html'    with open(file_path,'wb') as f:        runner = HTMLTestRunner.HTMLTestRunner(stream=f,                                               title="this is test",description="Mushishi test")        runner.run(suite)    f.close()    #unittest.main()

标签: #python unittest原理