ISEE小语
本次分享一款开源的工具XTestRunner,可输出惊艳的测试报告,是基于unittest框架现代风格测试报告。
简介
特点:
简洁、美观具有现代风格的测试报告。
支持HTML、XML两种格式。
支持单元、Web UI、API各种类型的测试。
集成邮件/钉钉/企微/飞书 发送消息。
支持用例错误/失败重跑。
支持标签黑、白名单。
针对Selenium运行失败/错误自动截图。
支持多语言:en、zh-CN(注:仅HTML格式)。
报告效果:
基本使用
安装:
pip install XTestRunner
如果您想跟上最新版本,可以使用github存储库url安装:
pip install -U git+https://github.com/SeldomQA/XTestRunner.git@master
Demo:
我们举个简单的例子,基于unittest测试
import unittest
from XTestRunner import HTMLTestRunner
class TestDemo(unittest.TestCase):
"""测试用例说明"""
def test_success(self):
"""执行成功"""
self.assertEqual(2 + 3, 5)
def test_skip(self):
"""跳过用例"""
pass
def test_fail(self):
"""失败用例"""
self.assertEqual(5, 6)
def test_error(self):
"""错误用例"""
self.assertEqual(a, 6)
if __name__ == '__main__':
suit = unittest.TestSuite()
suit.addTests([
TestDemo("test_success"),
TestDemo("test_skip"),
TestDemo("test_fail"),
TestDemo("test_error")
])
with(open('./result.html', 'wb')) as fp:
runner = HTMLTestRunner(
stream=fp,
title='<project name>test report',
description='describe: ... ',
language='en',
rerun=3
)
runner.run(suit)
HTMLTestRunner类说明:
stream: 指定报告的路径。
title: 报告的标题。
description: 报告的描述, 支持str、list两种类型。
language: 支持中文zh-CN, 默认en。
rerun: 重跑次数。
run()方法说明:
testlist: 运行的测试套件。
运行测试:
python test_demo.py
结果:
可以看到在当前文件夹下会生成一个result.html报告文件
源码地址:
https://github.com/SeldomQA/XTestRunner
官方地址:
https://pypi.org/project/XTestRunner/
实战
前期分享过一个关于项目输出测试报告的实例,我们继续使用前期的小项目服务,Unittest测试方式就是这次分享的内容。
Python项目自动化及输出报告完整实例(附源码)
ISEE小栈,公众号:ISEE小栈Python项目自动化及输出报告完整实例(附源码)
如需要测试服务实例,请前往下载
本次测试的实例,采用了数据驱动ddt,使用起来更加方便。
环境:
Pycharm
Python 3.9.16
安装:
XTestRunner==1.8.0
requests==2.32.3
PyYAML==6.0.1
ddt==1.7.2
如果没有,通过pip install 安装即可
测试数据准备:
首先,在data目录下创建words.yaml文件,格式如下:
words:
- 清晨
- 花开
- 月光
- 星辰
- 秋水
- 眉间
- 流年
- 心语
- 芳华
- 静谧
- 锦绣
- 岁月
实际放了50个词汇数据
测试用例:
参数化后生成测试用例,完整代码:
# -*- coding: utf-8 -*-
import json
import unittest
import requests
import yaml
from ddt import ddt, data
class TestWordAdd(unittest.TestCase):
def setUpClass(cls) -> None:
print("============开始测试==========")
def tearDownClass(cls) -> None:
print("============测试完成!==========")
def test_addition(self, word):
"""测试添加词汇"""
headers = {"Content-Type": "application/json"}
req_data = {"word": word, "status": 1}
resp_result = requests.post(url='http://127.0.0.1:5000/add', json=req_data, headers=headers)
result_code = 200
result = json.loads(resp_result.text).get('result')
expe_result = 0
self.assertEqual(result_code, resp_result.status_code, f"请求失败,词汇: {word}")
self.assertEqual(result, expe_result, f"请求失败,词汇: {word}")
注意:里面使用数据驱动,只有一行代码,非常的简洁和方便
@data(*yaml.safe_load(open('../data/words.yaml', 'r', encoding='utf-8'))['words'])
生成测试报告:
生成测试报告,它可以生成美观的 HTML 测试报告,显示测试结果的详细信息,包括测试通过、失败、错误等情况。
在main.py主执行文件中
# -*- coding: utf-8 -*-
# 创建测试套件
import unittest
from XTestRunner import HTMLTestRunner
from testcases.test_word_add_02 import TestWordAdd
suit = unittest.TestSuite()
suit.addTests(unittest.TestLoader().loadTestsFromTestCase(TestWordAdd))
# 运行测试并生成报告
with open('./reports/result.html', 'wb') as fp:
runner = HTMLTestRunner(
stream=fp,
tester="ISEE小栈",
title='词海测试报告',
description='本次添加词汇测试',
language='en',
rerun=3
)
runner.run(suit)
运行测试
在电脑上启动,直接切换到venv下,输入:
python main.py
出现以上日志信息说明自动化测试执行成功!
接下来……
打开在浏览器中打开输出的result.html报告
总结
使用场景:
单元测试:验证单个模块或函数的正确性,确保其在各种输入条件下都能返回预期的结果。
回归测试:在代码修改后,运行一组测试用例,确保新代码没有引入新的错误。
集成测试:测试多个模块或组件的集成,验证它们能够正确地协同工作。
持续集成:在 CI/CD 流水线中,自动运行测试用例,确保每次代码提交后软件的稳定性。
小栈把本次自动化测试代码实例整体梳理了,有兴趣可下载。
相遇即是缘
朋友点个“赞”和“在看”,谢谢支持~!
后台回复“xtestrunner”即可获取!
文章就分享到这儿,喜欢就点个赞吧!