记录python接口自动化测试--利用unittest生成测试报告(第四目)
前面介绍了是用unittest管理测试用例,这次看看如何生成html格式的测试报告
生成html格式的测试报告需要用到 HTMLTestRunner,在网上下载了一个HTMLTestRunner.py,然后放到python安装路径下的lib目录中。
(我用的python3,是下载的虫师写的那个,下载地址-->链接:https://pan.baidu.com/s/101y-X--o6iSd9WTDv5K4XQ 密码:24xh)
1.执行单个.py文件中的测试用例
- # -*-coding:UTF:8-*-
- import unittest
- from interface.demo import RunMain # 从之前封装的文件中,引入RunMain类
- import HTMLTestRunner # 导入HTMLTestRunner模块
- import json
- class TestMethod(unittest.TestCase): # 定义一个类,继承自unittest.TestCase
- def setUp(self):
- self.run = RunMain() # 在初始化方法中实例化一个对象,这样就不需要在每个用例中再进行实例化了
- def test01(self):
- """获取办件申请人信息""" #在用例名下添加接口描述,可以增加测试报告可读性
- url = 'http://localhost:7001/XXX'
- data = {
- 'controlSeq': ''
- }
- r = self.run.run_main(url, 'POST', data) # 调用RunMain类中run_main方法
- print(r)
- re = json.loads(r)
- self.assertEqual(re['status'], '', '测试失败')
- # globals()['userid'] = 22 #定义全局变量
- def test02(self):
- """查询办件进度结果信息接口"""
- # print(userid) #使用case1中的全局变量,执行时需要全部执行,不能只执行后面的,不然会报错
- url = 'http://localhost:7001/XXX'
- data = {
- "controlSeq": ""
- }
- r = self.run.run_main(url, 'GET', data)
- print(r)
- re = json.loads(r)
- self.assertEqual(re["status"], '', '测试失败')
- # @unittest.skip('test03') # 跳过用例test03
- def test03(self):
- """保存办件快递信息接口(审批3.0)"""
- url = 'http://localhost:7001/XXX'
- data = {
- 'controlSeq': '',
- 'seq': '',
- 'type': ''
- }
- r = self.run.run_main(url, 'POST', data)
- print(r)
- # print(type(r)) # 查看返回对象r的类型
- re = json.loads(r)
- # print(type(re))
- self.assertEqual(re['status'], '', '测试失败')
- if __name__ == "__main__":
- # unittest.main()
- # print('__name__==__main__')
- filename = 'E:/CommonService/interface/report/testresult.html' #测试报告的存放路径及文件名
- fp = open(filename, 'wb') # 创测试报告html文件,此时还是个空文件
- suite = unittest.TestSuite() # 调用unittest的TestSuite(),理解为管理case的一个容器(测试套件)
- suite.addTest(TestMethod('test01')) # 向测试套件中添加用例,"TestMethod"是上面定义的类名,"test01"是用例名
- suite.addTest(TestMethod('test02'))
- suite.addTest(TestMethod('test03'))
- # runner = unittest.TextTestRunner() # 执行套件中的用例
- runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='接口测试报告', description='测试结果如下: ')
- # stream = fp 引用文件流
- # title 测试报告标题
- # description 报告说明与描述
- runner.run(suite) # 执行测试
- fp.close() # 关闭文件流,将HTML内容写进测试报告文件
2.使用discover()方法批量加载多个.py文件中的测试用例
工程目录如下:
case是测试用例所在目录,里面包括2个二级目录,存放的都是测试用例;
report存放测试报告的目录;
最外层的run_all_case.py,用它来执行所有用例
(1)直接加载discover中的用例
- run_all_case.py
- import time
- from HTMLTestRunner import HTMLTestRunner
- import unittest
- case_dir = 'E:/CommonService/interface/case' # 定义用例所在路径
- """定义discover方法"""
- discover = unittest.defaultTestLoader.discover(case_dir,
- pattern='test_*.py',
- top_level_dir=None)
- """
- 1.case_dir即测试用例所在目录
- 2.pattern='test_*.py' :表示用例文件名的匹配原则,“*”表示任意多个字符,这里表示匹配所有以test_开头的文件
- 3.top_level_dir=None:测试模块的顶层目录。如果没顶层目录(也就是说测试用例不是放在多级目录
- 中),默认为 None
- """
- if __name__ == "__main__":
- """直接加载discover"""
- now = time.strftime("%Y-%m-%d %H_%M_%S")
- filename = 'E:/CommonService/interface/report/' + now + '_result.html'
- fp = open(filename, 'wb')
- runner = HTMLTestRunner(stream=fp,
- title='UnifiedReporting Test Report',
- description='Implementation Example with: ')
- runner.run(discover)
- fp.close()
(2)通过把discover中的用例加载到测试套件中执行
- run_all_case.py
- import time
- from HTMLTestRunner import HTMLTestRunner
- import unittest
- case_dir = 'E:/CommonService/interface/case' # 定义用例所在路径
- """定义discover方法"""
- discover = unittest.defaultTestLoader.discover(case_dir,
- pattern='test_*.py',
- top_level_dir=None)
- """
- 1.case_dir即测试用例所在目录
- 2.pattern='test_*.py' :表示用例文件名的匹配原则,“*”表示任意多个字符
- 3.top_level_dir=None:测试模块的顶层目录。如果没顶层目录(也就是说测试用例不是放在多级目录
- 中),默认为 None
- """
- if __name__ == '__main__':
- """通过把discover中的用例加载到测试套件中执行"""
- suite = unittest.TestSuite() # 定义一个测试套件
- # discover 方法筛选出来的用例,循环添加到测试套件中
- for test_suite in discover:
- for test_case in test_suite:
- suite.addTests(test_case)
- print(suite) #打印一下可以看到suite中添加了哪些测试用例
- now = time.strftime("%Y-%m-%d %H_%M_%S")
- filename = 'E:/CommonService/interface/report/' + now + '_result.html'
- fp = open(filename, 'wb')
- runner = HTMLTestRunner(stream=fp,
- title='UnifiedReporting Test Report',
- description='Implementation Example with: ')
- runner.run(suite)
(3)把discover加载测试用例的过程封装到一个函数中
- run_all_case.py
- import time
- from HTMLTestRunner import HTMLTestRunner
- import unittest
- def allCase():
- """定义一个函数,封装discover加载测试用例的方法"""
- case_dir = 'E:/CommonService/interface/case' # 定义用例所在路径
- suite = unittest.TestSuite() # 定义一个测试套件
- discover = unittest.defaultTestLoader.discover(case_dir,
- pattern='test_*.py',
- top_level_dir=None)
- # discover 方法筛选出来的用例,循环添加到测试套件中
- for test_suite in discover:
- for test_case in test_suite:
- suite.addTests(test_case)
- return suite
- if __name__ == '__main__':
- allsuite = allCase()
- # runner = unittest.TextTestRunner()
- now = time.strftime("%Y-%m-%d %H_%M_%S")
- filename = 'E:/CommonService/interface/report/' + now + '_result.html'
- fp = open(filename, 'wb')
- runner = HTMLTestRunner(stream=fp,
- title='UnifiedReporting Test Report',
- description='Implementation Example with: ')
- runner.run(allsuite)
测试报告如下:
记录python接口自动化测试--利用unittest生成测试报告(第四目)的更多相关文章
- 记录python接口自动化测试--简单总结一下学习过程(第十目)
至此,从excel文件中循环读取接口到把测试结果写进excel,一个简易的接口自动化测试框架就完成了.大概花了1周的时间,利用下班和周末的时间来理顺思路.编写调试代码,当然现在也还有很多不足,例如没有 ...
- 记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
- python接口自动化测试(八)-unittest-生成测试报告
用例的管理问题解决了后,接下来要考虑的就是报告我问题了,这里生成测试报告主要用到 HTMLTestRunner.py 这个模块,下面简单介绍一下如何使用: 一.下载HTMLTestRunner下载: ...
- Python+request 测试结果结合unittest生成测试报告《四》
测试报告示例图: 目录结构介绍: 主要涉及更改的地方: 1.导入 Common.HTMLTestRunner2文件 2.run_test.py文件中新增测试报告相关的代码 具体代码实现: 1 ...
- 记录python接口自动化测试--pycharm执行测试用例时需要使用的姿势(解决if __name__ == "__main__":里面的程序不生效的问题)(第三目)
1.只运行某一条case 把光标移动到某一条case后面,然后右键,选择"Run..."来运行程序 此时,pycharm会只运行光标所在位置的这一条case 2.如果想执行全部ca ...
- 记录python接口自动化测试--把测试结果写进excel文件(第九目)
python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...
- 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)
在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...
- 记录python接口自动化测试--requests使用和基本方法封装(第一目)
之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对"接口"以及"接口测试"有了一个基础了解,最近找了一些用pyt ...
- 记录python接口自动化测试--主函数(第六目)
把操作excel的方法封装好后,就可以用准备好的接口用例来循环遍历了 我的接口测试用例如下 主函数代码: run_handle_excel.py# coding:utf-8 from base.run ...
随机推荐
- java 堆 栈 常量池
java 堆中保存new 出来的对象(每个对象都包含一个与之对应的class的信息,[class信息存放在方法区]),堆中分配的内存,有虚拟机的自动垃圾回收器管理,栈内存只对其所属线程可见. java ...
- Java 第六章
第六章 for语法:for(表达式①;表达式②;表达式③){ //④循环操作}表达式含义:表达式1:赋值语句, 它用来给循环变量赋初值 例如:int i = 1;表达式2:循环条件,一个关系表达式, ...
- C# 图解教程 第四章 类的基本概念
类的基本概念 类的概述声明类 类成员字段方法 创建变量和类的实例为数据分配内存实例成员访问修饰符 私有访问和公用访问 从类的内部访问成员从类的外部访问成员综合应用 类的基本概念 类的概述 类是一种活动 ...
- Aspose实现Office转PDF (ASP.NET)
0.添加Aspose的DLL 1.可以直接去官网下载,不过默认是带水印的,如需去除水印可以购买 2.当然也可以在国内的一些下载站下载 3.将Aspose.Cells.dll.Aspose.Words. ...
- View的平移、缩放、旋转以及位置、坐标系
原创 2015年05月12日 13:15:29 标签: Android / Scroll / Scale / Translation / Rotation 24733 Android开发中,经常会接触 ...
- 【POI2001】【HDU1814】和平委员会
题面 Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条 ...
- [Luogu4230]连体病原体
题面戳我 sol 很好想+很好写的一道题,然而比赛中我还是没有切掉qaq. LCT 枚举左端点\(i\),向右移动右端点指针\(j\)找到第一个成环的位置.此时\([i,j],[i,j+1]...[i ...
- C#多线程编程(6)--线程安全2 互锁构造Interlocked
在线程安全1中,我介绍了线程同步的意义和一种实现线程同步的方法:volatile.volatile关键字属于原子操作的一种,若对一个关键字使用volatile,很多时候会显得很"浪费&quo ...
- MyBatis相关配置
在MyBatis中,不免会有一些配置要设置,我们先来看一下MyBatis配置XML文件的层次结构,这些层次是不能够颠倒顺序的,下面是层次结构: <?xml version = "1.0 ...
- gulp详细入门
gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试.检查.合并.压缩.格式化.浏览器自 ...