python接口自动化测试报告插件使用
做接口自动化业务时,可以有选择性的来实现测试报告
第一种:HTMLTestRunnerNew
第二种:unittestreport
Tips: 第二种是大佬木森开发的可以借鉴一下,相关链接:unittestreport
一、生成HTMLTestRunnerNew测试报告
- HTMLTestRunnerNew百度网盘: HTMLTestRunnerNew.py
提取码: 0000
下载后存放到第三方库或者D:\data\python3.8.7目录下都行 - 随意写个unittest用例,如下
import unittest
import requests
from lesson import toothclass BoothList(unittest.TestCase):def test_1_booth_list(self):"""列出流程接口:return:"""try:response = requests.post(url=tooth.url, json=tooth.data, headers=tooth.headers).json()self.assertEqual(200, response["code"], msg="test_a_booth_list的断言报错了")print(response)return responseexcept Exception as e:raise edef test_2_booth_lists(self):"""流程号详情:return:"""try:response = requests.post(url=tooth.url, json=tooth.data, headers=tooth.headers).json()self.assertEqual(200, response["code"], msg="test_a_booth_list的断言报错了")print(response)return responseexcept Exception as e:raise e
- run执行入口
import unittest
from datetime import datetime
import HTMLTestRunnerNew
from lesson.tooth import test_report_path
from cases.booth_list import BoothListcurrent_time = datetime.strftime(datetime.now(), '%Y-%m-%d_%H-%M-%S_' + 'report')suite = unittest.TestSuite()load = unittest.TestLoader()
suite.addTest(load.loadTestsFromTestCase(BoothList))with open(test_report_path + '{}.html'.format(current_time), "wb") as file:runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2,title="测试报告",description="业务测试",tester="qy")runner.run(suite)
-
简单写一下测试数据
-
执行结果(有时候会丢失样式,没关系)
Tips: 代码方法都差不多, 暂不讲解
二、生成unittestreport测试报告
很重要:目录和文件名,
测试目录随意写无所谓
测试用例py文件必须以test开头,要不然找不到
安装插件(pycahrm设置内安装也可以)
pip3 install unittestreport
- runs执行入口如下
import unittest
import unittestreport
import time
from lesson.tooth import test_report_pathcurrent_time = str(time.strftime("%Y-%m-%d_%H_%M_%S_", time.localtime()) + 'report')
suite = unittest.defaultTestLoader.discover(R"D:\email_t\cases")
with open(test_report_path + '{}.html'.format(current_time), "wb") as file:runner = unittestreport.TestRunner(suite,tester='qy',filename='{}.html'.format(current_time),report_dir=r"D:\email_t\report_test",title='接口自动化回归测试',desc='qy的进场项目',templates=1)runner.run()
-
测试报告样式有三种类型, 第一种,templates=1
-
第二种,templates=2 , 感觉第二种比较详细,可借用
-
第三种,templates=3 , 感觉第三种测试报告样式也不错
三、失败重运行
运行时加上参数,即可实现用例失败重运行
count:用来指定用例失败重运行的次数
interval:指定每次重运行的时间间隔
- 其他不动,只需要添加2个参数
- 查看报告,可以详细查看失败用例,历史构建结果,详情信息,挺完善的
四、用例执行顺序
-
准备数据,准备了2个类,5个接口
-
调试run执行入口
- 引入TestRunner
- 整理收集测试用例集(把类名和测试方法写入)
run完整代码
import time
from lesson.tooth import test_report_path
from unittestreport import TestRunner
from cases.test_booth_list import *run_case = [{"cls": BoothList,"run_case": {"test_a_booth_list": BoothList.test_booth_list,"test_b_booth_list": BoothList.test_booth_lists}}, {"cls": BoothList2,"run_case": {"test_a_booth_list": BoothList2.test_booth_lis,"test_b_booth_list": BoothList2.test_booth_listss,"test_c_booth_list": BoothList2.test_booth_listsss,}}]suite = TestRunner.customize_run_case(run_case)current_time = str(time.strftime("%Y-%m-%d_%H_%M_%S_", time.localtime()) + 'report')
# suite = unittest.defaultTestLoader.discover(R"D:\email_t\cases")
with open(test_report_path + '{}.html'.format(current_time), "wb") as file:runner = TestRunner(suite=suite,tester='qy',filename='{}.html'.format(current_time),report_dir=r"D:\email_t\report_test",title='接口自动化回归测试',desc='qy的进场项目',templates=1)runner.run()
Tips:
一共两个类,5个用例,你想让那个类或类方法在前面执行就放在前面,只要单个类里面不重名就行,真正操作顺序的是cls和run_case的key来控制的
- 执行后查看报告结果,,第一次执行会有json文件,可以看控制台是否执行成功,一切都没问题
- 执行结果查看,测试用例数、用例详情、用例描述、测试方法列可以查看执行顺序,执行结果可以筛选成功或失败等,主要看执行顺序是否按照编排的执行,和上面对下没问题
五、 发送到普通邮箱
host: smtp服务器地址
port:端口
user:邮箱账号
password:smtp服务授权码
to_addrs:收件人邮箱地址(一个收件人传字符串,多个收件人传列表)
注意:目前发送邮件只支持465和25端口
再次查看都没问题
六、推送测试结果到企业微信&钉钉
1. 推送到钉钉
关于把测试结果推送到钉钉群,unittestreport里面进行了封装。执行完用例之后,调用TestRunner对象的dingtalk_notice方法即可url: 钉钉机器人的Webhook地址
key: (非必传:str类型)如果钉钉机器人安全设置了关键字,则需要传入对应的关键字
secret:(非必传:str类型)如果钉钉机器人安全设置了签名,则需要传入对应的密钥
atMobiles: (非必传,list类型)发送通知钉钉中要@人的手机号列表,如:[137xxx,188xxx]
isatall: 是否@所有人,默认为False,设为True则会@所有人
except_info:是否发送未通过用例的详细信息,默认为False,设为True则会发送失败用例的详细信息import unittest
from unittestreport import TestRunner# 收集用例到套件
suite = unittest.defaultTestLoader.discover(CASE_DIR)
runner = TestRunner(suite)
# 执行用例
runner.run()url = "https://oapi.dingtalk.com/robot/send?access_token=6e2a63c2b9d870ee878335b5ce6d5d10bb1218b8e64a4e2b55f96a6d116aaf50"
# 发送钉钉通知
runner.dingtalk_notice(url=url, key='钉钉安全设置的关键字',secret='钉钉安全设置签名的秘钥')# 备注:关于钉钉群机器人的创建大家可以去看钉钉开放平台上的教程,关键字和秘钥,根据创建钉钉机器人时设置的去添加,没有设置就不需要传这个参数。# 上面都一样,就是多加了一个URL和钉钉配置参数,可以自行研究
2. 推送结果到企业微信
chatid: 企业微信群id
access_token:调用企业微信API接口的凭证
corpid:企业ID
corpsecret:应用的凭证密钥
案例代码
import unittest
from tests.test_case import TestClass
from unittestreport import TestRunner
# 加载用例
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestClass)
runner = TestRunner(suite=suite)
# 运行用例
runner.run()# 推送测试结果到企业微信
# 方式一:
runner.weixin_notice(chatid="企业微信群id", access_token="调用企业微信API接口的凭证")
# 方式二:
runner.weixin_notice(chatid="企业微信群id",corpid='企业ID', corpsecret='应用的凭证密钥')# 前面都一样,推送结果的时候加一些参数即可
七、并发用例执行
import unittestreport
# 1、加载测试用例到套件中
suite = unittest.defaultTestLoader.discover(r'C:\project\open_class\Py0507\testcase')
runner = TestRunner(suite=suite)
# 2、设置5个线程去执行用例
runner.run(thread_count=5)# 前面代码都一样,在执行时加了一个参数thread_count即可指定运行用例时开启的线程数量
# 注意点
## 不同的测试类之间,不能有数据依赖,因为多线程并发没办法保证执行的先后顺序
## 多线程全局变量共享的问题
## 多线程是共享全局变量的,如果要以多线程执行用例,还需要考虑全局资源竞争的问题,就是用例在执行的过程中不能修改多个测试类中共用的全局数据(资源)。否则会影响其他的用例执行。
八、使用pytest生成unittestreport的html报告
- 安装插件
pip3 install pytest-testreport
注意点:如果安装了pytest-html这个插件,请先卸载,不然会有冲突
命令行执行
运行测试时加上参数--report 指定报告文件名pytest --report=musen.html其他配置参数
--title=指定报告标题
--tester=指定报告中的测试者
--desc = 指定报告中的项目描述
--template = 指定报告模板样式(1 or 2)同时使用多个参数
pytest --report=musen.html --title=测试报告 --tester=qy --desc=项目描述 --template=2
pytest.main执行
import pytest
pytest.main(['--report=musen.html','--title=测试报告标题','--tester=qy','--desc=报告描述信息','--template=2'])