前面介绍了是用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生成测试报告(第四目)的更多相关文章

  1. 记录python接口自动化测试--简单总结一下学习过程(第十目)

    至此,从excel文件中循环读取接口到把测试结果写进excel,一个简易的接口自动化测试框架就完成了.大概花了1周的时间,利用下班和周末的时间来理顺思路.编写调试代码,当然现在也还有很多不足,例如没有 ...

  2. 记录python接口自动化测试--unittest框架基本应用(第二目)

    在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...

  3. python接口自动化测试(八)-unittest-生成测试报告

    用例的管理问题解决了后,接下来要考虑的就是报告我问题了,这里生成测试报告主要用到 HTMLTestRunner.py 这个模块,下面简单介绍一下如何使用: 一.下载HTMLTestRunner下载: ...

  4. Python+request 测试结果结合unittest生成测试报告《四》

    测试报告示例图:      目录结构介绍: 主要涉及更改的地方: 1.导入 Common.HTMLTestRunner2文件 2.run_test.py文件中新增测试报告相关的代码 具体代码实现: 1 ...

  5. 记录python接口自动化测试--pycharm执行测试用例时需要使用的姿势(解决if __name__ == "__main__":里面的程序不生效的问题)(第三目)

    1.只运行某一条case 把光标移动到某一条case后面,然后右键,选择"Run..."来运行程序 此时,pycharm会只运行光标所在位置的这一条case 2.如果想执行全部ca ...

  6. 记录python接口自动化测试--把测试结果写进excel文件(第九目)

    python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...

  7. 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)

    在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...

  8. 记录python接口自动化测试--requests使用和基本方法封装(第一目)

    之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对"接口"以及"接口测试"有了一个基础了解,最近找了一些用pyt ...

  9. 记录python接口自动化测试--主函数(第六目)

    把操作excel的方法封装好后,就可以用准备好的接口用例来循环遍历了 我的接口测试用例如下 主函数代码: run_handle_excel.py# coding:utf-8 from base.run ...

随机推荐

  1. 项目中的导出(jxl插件)

    第一步,获取要导出的参数,为导出做准备 public ModelAndView downloadInfo(final HttpServletRequest request, final HttpSer ...

  2. C# 程序员最常犯的 10 个错误(转)

    关于C#关于本文常见错误 #1:把引用当做值来用,或者反过来常见错误 #2:误会未初始化变量的默认值常见错误 #3:使用不恰当或未指定的方法比较字符串常见错误 #4:使用迭代式 (而不是声明式)的语句 ...

  3. 搭建基于eclipse的纯的JavaWeb项目

    -----------2016.9.9--------------------- 步骤: 1.搭建一个Java项目 2,字该项目下新建一个文件夹,表示根,名字为webapp(name随意) 3,在we ...

  4. 【BZOJ4372】烁烁的游戏(动态点分治)

    [BZOJ4372]烁烁的游戏(动态点分治) 题面 BZOJ 大意: 每次在一棵书上进行操作 1.将离某个点u的距离不超过d的点的权值加上w 2.询问单点权值 题解 这题和前面那一道震波几乎是一模一样 ...

  5. 递归方法,查询出树该组织及以下组织的组织ID

    -- 查询出该组织下所有组织id的集合 --方法一: public String getAllOrgidsTwo(Integer orgid){ List<Integer> orgids= ...

  6. centos7下搭建 MongoDB -01

    距离上次写的一篇mongoDB搭建已经有一年多的时间了,刚好这次在公司搭建好在centos7下的mongodb搭建,简单的做一个记录吧 mongo 是一个基于分布式文件存储的数据库,数据主要存储在磁盘 ...

  7. Redis进阶实践之十七 Redis协议的规范

    一.介绍            Redis客户端使用称为RESP(Redis的序列化协议)的协议与Redis服务器进行通信. 虽然协议是专门为Redis设计的,但它可以用于其他客户端 - 服务器软件项 ...

  8. Java求最大公约数和最小公倍数

    最大公约数(Greatest Common Divisor(GCD)) 基本概念 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的 ...

  9. IE浏览器右键菜单插件开发(上篇)——自定义一个IE右键菜单项

    要做一个IE右键浏览器插件,得3步走. 第一,在IE右键菜单上添加自定义菜单名称,是通过注册表实现的,如下: string regkey = @"Software\Microsoft\Int ...

  10. angular路由详解一(基础知识)

    本人原来是iOS开发,没想到工作后,离iOS开发原来越远,走上了前端的坑.一路走来,也没有向别人一样遇到一个技术上的师傅,无奈只能一个人苦苦摸索.如今又开始填angular的坑了.闲话不扯了.(本人学 ...