unittest测试框架的使用流程
最近为了分享自动化框架,帮助功能测试理解,整理了一下 unittest 单元测试框架
Unittest单元测试框架的构成TestCase 编写用例
TestSuit 组织用例
TestRunner 执行用例
TestFixture 处理用例,SetUp -预处理,用例开始,TearTon清理数据,用例结尾
这是我们封装的计算函数 math_method.py 包含加法结果,乘法结果
class MathMethod: def __init__(self, a, b): self.a = a self.b = b def add(self): # 加法 return self.a + self.b def multi(self): # 乘法 return self.a self.b
需要验证 加法和乘法用例,我们用到了unittest,怎么使用unittest呢?
1.如何定义测试用例
1.导包import unittest
2.定义测试类新建测试类必须继承unittest.TestCase
3.定义测试方法测试方法名称命名必须以test开头
4.一个用例就是一个函数不能传参 ,只有self关键字
2.如何执行测试用例
方式一使用pycharm在代码上点击鼠标右键,选择使用UnitTest运行
方式二调用unittest.main()来运行
我们新键一个名为test_01.py 的文件,来编写MathMethod() 的测试用例
class TestMathMethod(unittest.TestCase): #继承了unittest里面的 def test_add_to_positive(self): res = MathMethod(1, 1).add() print("1+1的结果是", res) self.assertEqual(2, res) def test_add_to_zero(self): res = MathMethod(0, 0).add() print("0+0的结果是", res) self.assertEqual(0, res) def test_add_to_negative(self): res = MathMethod(-1, -2).add() print("-1+(-2)的结果是", res) self.assertEqual(-3, res) # 执行 if __name__ == '__main__': unittest.main()
经过执行运行结果,我们跑了3条用例,可我们发现执行顺序不是按照我们定义的用例来执行的,这是为什么呢?
用例执行顺序按照ASCII顺序从小到大执行,a-z
TestFixure测试夹具
TestFixure有两种使用方式,一种是书写成普通方法的steup(),teardon(),这种在执行时,会每执行类中的一个测试方法,分别在执行前setup(),执行后teardon()。
另一种时书写成类的方法,使用@classmethod,setUpClass()和tearDonClass(),这这种在执行时,会先执行setupClass(),执行完类中所有的测试用例后,执行tearDonClass()中的方法。
class TestMathMethod(unittest.TestCase): #继承了unittest里面的 def setUp(self): # step 执行每一条测试用例之前会执行setUp里面 print("我要开始执行用例了") def tearDon(self): #重写 #tearDon每一条用例执行完毕后执行 print("我已执行完毕用例了") #如果说 你有操作必须在执行用例之前 准备好 那就放到setUp #如果说你有操作必须在执行用例之后要清除那就放到tearDon def test_add_to_positive(self): res = MathMethod(1, 1).add() print("1+1的结果是", res) # 加一个断言判断期望值与实际值的比对结构 一致就算通过 不一致就算失败 self.assertEqual(2, res) def test_add_to_zero(self): res = MathMethod(0, 0).add() print("0+0的结果是", res) self.assertEqual(1, res, "出错了") #用例执行失败了才会提示 def test_add_to_negative(self): res = MathMethod(-1, -2).add() print("-1+(-2)的结果是", res) self.assertEqual(-3, res)编写完测试用例,就到了加载用例,我们来了解一下unittest加载测试用例的方式 unittest加载测试用例的方式
测试用例数不多时可采用以下方式加载
1、一个一个添加
suite = unittest.TestSuite() suite.addTest(测试类名('方法名')) # 举例 测试类名TestMathMethod,方法名test_add_to_negative # suite.addTest(TestMathMethod('test_add_to_negative'))
2、通过测试类来加载(loadTestsFromTestCase)
suite = unittest.TestSuite() loader = unittest.TestLoader() #用例加载器 suite.addTest(loader.loadTestsFromTestCase(测试类名)) # 举例我们需要引入类名,加载类名下的用例 # from test_01 import TestMathMethod #具体到类名 # suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))
3、通过模块加载(loadTestsFromModule)
suite = unittest.TestSuite() loader = unittest.TestLoader()#用例加载器 suite.addTest(loader.loadTestsFromModule(测试模块名)) # 举例我们需要引入模块名,加载模块下的用例 # from class_unittest import test_01 #具体到类名 # suite.addTest(loader.loadTestsFromModule(class01))
测试用例数较多时,采用defaultTestLoader.discover()方式
discover = unittest.defaultTestLoader.discover(start_dir,pattern='test.py', _level_dir=None) # 1、因为unittest中规定,测试用例必须test开头,所以discover中的pattern格式才是test.py # 2、start_dir是存放测试用例的目录了解unittest.TextTestRunner()
test runner顾名思义就是用来执行测试用例的,并且可以生成相应的测试报告。测试报告有两种展示形式,一种是text文本,一种是html格式。
suite = addTest(test_class)
runner = unittest.TextTestRunner(stream=file, verbosity=2)
runner.run(suite)
file写入的文件
verbosity0、1、2,随数字增加,写入的信息更加详细
Python中上下文管理器的理解与使用
上下文管理器就是一个包装任意代码块的对象。
上下文管理器保证进入上下文管理器时,每次代码执行的一致性。
当退出上下文管理器时,相关的资源会被正确的回收。
将测试结果存放至test.txt文件,用上下问管理器,可以节约资源
#执行 上下文管理器---原始的 ith open("test.txt", '+', encoding='UTF-8') as file: runner = unittest.TextTestRunner(stream=file, verbosity=2) # 0、1、2 verbosity=2最详细的 runner.run(suite) #print(file.closed) #file.closed判断是否关闭文件 True 关闭进阶——用HTMLTestRunner输出漂亮的HTML报告
我们能够输出txt格式的文本执行报告了,文本报告太过简陋,是不是想要更加高大上的HTML报告?但unittest自己可没有带HTML报告,我们只能求助于外部的库了。
HTMLTestRunner是一个第三方的unittest HTML报告库,我们下载HTMLTestRunner.py,并放到当前目录下,或者你的’C:Python27Lib’下,就可以导入运行了。
from tools.HTMLTestRunnerCN import HTMLTestReportCN # 导入 # 上下文管理器,,为了节省资源 ith open('test_report.html', 'b') as file_path: runner = HTMLTestReportCN(stream=file_path, title="小糊糊—API自动化测试报告", description='小糊糊—API模块用例', tester='小糊糊', verbosity=2) runner.run(suite)
创建class02.py文件来执行用例
#从模块里面去找 from class_unittest import class01 #具体到模块 #会把所有以test开头得所有测试用例加到容器里 loader = unittest.TestLoader() # 创建一个加载器 suite.addTest(loader.loadTestsFromModule(class01)) #执行 ith open('test_report.html', 'b') as file_path: runner = HTMLTestReportCN(stream=file_path, title="小糊糊—API自动化测试报告", description='小糊糊—API模块用例', tester='小糊糊', verbosity=2) runner.run(suite)
执行结果,输出测试报告
空调维修
- 温岭冰箱全国统一服务热线-全国统一人工【7X2
- 荆州速热热水器维修(荆州热水器维修)
- 昆山热水器故障码5ER-昆山热水器故障码26
- 温岭洗衣机24小时服务电话—(7X24小时)登记报
- 统帅热水器售后维修服务电话—— (7X24小时)登
- 阳江中央空调统一电话热线-阳江空调官方售后电
- 乌鲁木齐阳春燃气灶厂家服务热线
- 珠海许昌集成灶售后服务电话-全国统一人工【
- 乌鲁木齐中央空调维修服务专线-乌鲁木齐中央空
- 新沂热水器故障电话码维修-新沂热水器常见故障
- 诸城壁挂炉24小时服务热线电话
- 靖江空调24小时服务电话-——售后维修中心电话
- 空调室外滴水管维修(空调室外排水管维修)
- 九江壁挂炉400全国服务电话-(7X24小时)登记报修
- 热水器故障码f.22怎么解决-热水器f0故障解决方法
- 营口热水器售后维修服务电话—— 全国统一人工