本文学习笔记整理自【Python开发】接口测试教程
一. unittest
0. unittest扫盲
unittest 是python里面的单元测试框架, 方便组件测试用例, 执行用例并生成测试报告
print(help(unittest))可查看帮助文档(需要import unittest)
1. unittest简介
1. 测试类, 继承单元测试unittest.TestCase这个类
2. 测试方法(用例)必须以"test"开头
3. 测试类就算多个用例的一个集合, 相当于是测试用例的一个模块
2. 前置与后置(非必须)
1. 前置条件: setUp(self) , 比如所有的用例都是基于登录后操作, 这个登录就算用例的前置
2. 后置条件:tearDown(self), 后置条件就是每次执行案例后要做的操作, 比如清理垃圾数据等
3. setUpClass, 只执行一次前置, 上面必须加@classmethod
4. tearDownClass, 只执行一次前置, 上面必须加@classmethod
1 import unittest 2 3 4 class TestCase(unittest.TestCase): 5 @classmethod 6 def setUpClass(cls): 7 print("setUpClass初始化操作: 用例开始前只执行一次") 8 9 @classmethod 10 def tearDownClass(cls): 11 print("tearDownClass收尾操作: 用例结束时只执行一次") 12 13 def setUp(self): 14 print("setUp每次用例开始前都会执行") 15 16 def tearDown(self): 17 print("tearDown每次用例结束时都会执行") 18 19 def test_01(self): 20 print("正在执行用例01") 21 22 def test_02(self): 23 print("正在执行用例02") 24 25 26 if __name__ == '__main__': 27 unittest.main()
3. 用例执行顺序
用例执行顺序根据ASCII码排序(不用管执行顺序, 用例要相互独立)
二. 批量执行
0. 目录结构:
1. discover : 加载指定目录下的所有用例, 并用runner批量执行
1 import os 2 import unittest 3 4 5 def all_case(case="testcase"): 6 # 加载指定目录下的所有用例 7 # 待执行用例的目录 8 case_dir = os.getcwd() + "\" + case 9 # case_dir指找testcase的目录 10 # pattern指通配具体testcase的方法 11 discover = unittest.defaultTestLoader.discover(case_dir, pattern="test*.py") 12 return discover 13 14 15 if __name__ == '__main__': 16 # 返回实例 17 runner = unittest.TextTestRunner() 18 runner.run(all_case())
三. 测试报告
注: tungwaiyip原始版(一般也是网络流传版)基于Python2, 适应Python需要改一些内容. 请自行Google.
以下内容使用oldani的版本(基于tungwaiyip的版本)
1. 安装:
pip install html-testRunner
2. 执行案例并生成报告
# coding:utf-8 import os import unittest import HtmlTestRunner def all_case(case="testcase"): case_dir = os.getcwd() + "\" + case discover = unittest.defaultTestLoader.discover(case_dir, pattern="test*.py") return discover if __name__ == '__main__': html_report_dir = os.getcwd() + "\report" runner = HtmlTestRunner.HTMLTestRunner(output=html_report_dir, combine_reports=True, report_name="TestCaseReport", add_timestamp=False, report_title="测试报告", descriptions="html测试报告") runner.run(all_case())
注: 虽然HtmlTestRunner源码里面的runner.py已经encoding='UTF-8', 但执行后仍然是乱码, 需要修改HtmlTestRunner源码下的result.py文件generate_file方法里的写入:
with open(path_file, 'w') as report_file: ---> with open(path_file, 'w',encoding="utf-8") as report_file:
3. 以上操作后的结果: