介绍一款开源的工具XTestRunner,可输出惊艳的测试报告(附实例源码)

文摘   2024-10-24 19:32   广东  

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 unittestfrom XTestRunner import HTMLTestRunner

class TestDemo(unittest.TestCase): """测试用例说明"""
def test_success(self): """执行成功""" self.assertEqual(2 + 3, 5)
@unittest.skip("skip case") 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.0requests==2.32.3PyYAML==6.0.1ddt==1.7.2

如果没有,通过pip install 安装即可


测试数据准备:

首先,在data目录下创建words.yaml文件,格式如下:

words:  - 清晨  - 花开  - 月光  - 星辰  - 秋水  - 眉间  - 流年  - 心语  - 芳华  - 静谧  - 锦绣  - 岁月

实际放了50个词汇数据


测试用例:

参数化后生成测试用例,完整代码:

# -*- coding: utf-8 -*-import jsonimport unittestimport requestsimport yamlfrom ddt import ddt, data

@ddtclass TestWordAdd(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("============开始测试==========")
@classmethod def tearDownClass(cls) -> None: print("============测试完成!==========")
@data(*yaml.safe_load(open('../data/words.yaml', 'r', encoding='utf-8'))['words']) 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”即可获取!

     

文章就分享到这儿,喜欢就点个吧!




推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章