在说unittest之前,先说几个概念:
TestCase 也就是测试用例
TestSuite 多个测试用例集合在一起,就是TestSuite
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息
1.单元测试:
开发自己测自己写的代码;
2.导入模块unittest:
import unittest #导入unittest模块
from BeautifulReport import BeautifulReport #导入BeautifulReport 报告模板模块
3.运行一个简单的unittest:
主要是体会一下unittest的写法
1 import unittest #单元测试模块
2
3 class TestCalc(unittest.TestCase):
4 def test1(self): #函数名要以test开头,否则不会被执行
5 self.assertEqual(1,1)
6
7 def test2(self):
8 self.assertEqual(1,2)
9
10 unittest.main() #会运行当前python文件里面的所有测试用例
4.unittest单元测试的基本流程:
用例集/测试套件:存放测试用例的
①.先把所有的测试用例都放到用例集
②.运行这些测试用例
③.产生报告
suite方式组织测试用例1:
1 import unittest #单元测试模块
2 from BeautifulReport import BeautifulReport as bf #导入BeautifulReport模块,这个模块也是生成报告的模块,但是比HTMLTestRunner模板好看
3
4 class TestCalc(unittest.TestCase):
5 def setUp(self): #每个用例运行之前运行的
6 print('setup是啥时候运行的')
7
8 def tearDown(self): #每个用例运行之后运行的
9 print('teardown是啥时候运行的')
10
11 @classmethod
12 def setUpClass(cls): #在所有用例执行之前运行的
13 print('我是setUpclass,我位于所有用例的开始')
14
15 @classmethod
16 def tearDownClass(cls): #在所有用例都执行完之后运行的
17 print('我是tearDownClass,我位于多有用例运行的结束')
18
19 def testcc(self): #函数名要以test开头,否则不会被执行
20 '''这是第一个测试用例''' #用例描述,在函数下,用三个单引号里面写用例描述
21 self.assertEqual(1,1)
22 print('第一个用例')
23
24 def testaa(self):
25 '''这个是第二个测试用例'''
26 self.assertEqual(1,1)
27 print('第二个用例')
28
29 def testdd(self):
30 '''用例描述3'''
31 print('第三个用例')
32
33 def testbb(self):
34 '''用例描述4'''
35 print('第四个用例')
36
37 suite = unittest.TestSuite() #定义一个测试集合
38 suite.addTest(unittest.makeSuite(TestCalc)) #把写的用例加进来(将TestCalc类)加进来
39 run = bf(suite) #实例化BeautifulReport模块
40 run.report(filename='test',description='这个描述参数是必填的')
使用discover方式组织测试用例:
使用场景:
运行指定目录下的全部测试用例
1 import unittest
2 from BeautifulReport import BeautifulReport #导入BeautifulReport
3
4 if __name__ == '__main__':
5 suite_tests = unittest.defaultTestLoader.discover(".",pattern="*tests.py",top_level_dir=None) #"."表示当前目录,"*tests.py"匹配当前目录下所有tests.py结尾的用例
6 BeautifulReport(suite_tests).report(filename='百度测试报告', description='搜索测试', log_path='.') #log_path='.'把report放到当前目录下
运行指定测试类中的case,suite方式组织测试用例:
使用场景:
假如有测试类AB,类中各有测试方法1,2,3
假如想仅运行测试类A中方法1,测试类B中的方法3,可以使用这种方式组织测试用例
主要是为了在case量很大时,很方便的调试
1 import unittest
2 import os
3 from BeautifulReport import BeautifulReport as bf
4 from case.subway.test_subway import Subway
5
6 #仅运行指定的case Subway是类名,test_subway_001是类中的测试方法名
7 caseList=[Subway("test_subway_001")]
8 #使用suite组织测试用例
9 suite = unittest.TestSuite()
10 suite.addTests(caseList)
11 #运行并生成测试报告
12 run = bf(suite)
13 run.report(filename="test", description="测试报告")
目录结构:
一个文件夹下有若干测试类,每个测试类正可能又会有若干个测试用例
代码结构:
谢谢二位大神: