前言:
此时朋友们对“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原理