当前位置: 首页 > news >正文

【python实操】python小程序之测试报告

引言

python小程序之测试报告

文章目录

  • 引言
  • 一、测试报告
    • 1.1 概念
      • 1.1.1 使用Pytest和Allure生成测试报告
      • 1.1.2 使用unittest和HTMLTestRunner生成测试报告
      • 1.1.3 总结
    • 1.2 题目
    • 1.3 代码
    • 1.3 代码解释
  • 二、思考

一、测试报告

1.1 概念

python生成测试报告,常用的方法包括使用Pytest结合Allure工具,以及利用unittest框架配合HTMLTestRunner等

1.1.1 使用Pytest和Allure生成测试报告

前提准备

  • 安装Pytest和Allure:pip install pytest allure-pytest
    步骤
  1. 编写测试用例:使用Pytest的断言语句来验证代码的输出是否符合预期
  2. 运行Pytest并生成Allure报告
    • 运行命令:pytest --alluredir=allure-results
    • 该命令将执行所有测试用例,并将结果存储在allure-results目录中
    • 同时,它还会生成一个Allure报告的HTML文件,可以在浏览器中查看

1.1.2 使用unittest和HTMLTestRunner生成测试报告

  1. 使用HTMLTestRunner生成HTML测试报告
    • HTMLTestRunnerunittest模块的一个扩展,可以用来生成网页版的测试报告
    • 首先,需要下载HTMLTestRunner.py文件,并将其保存在Python安装路径下的lib文件夹或项目的子包中
    • 在python代码中通过import HTMLTestRunner导入后即可使用
    • 常用的参数包括stream(配置测试报告要保存的文件路径)、title(测试报告标题)和description(测试报告的描述信息)
  2. 使用BeautifulReport库生成测试报告
    • BeautifulReport是一个用于unittest自动化测试的可视化报告工具,它能将测试结果以美观、易于理解的方式呈现出来
    • 您可以直接在Python代码中使用import BeautifulReport导入这个库,然后使用其提供的功能来生成测试报告
  3. 基本unittest用法
    • unittest是python自带的一个单元测试框架,您可以使用它来组织、执行和生成测试报告
    • 创建一个继承自unittest.TestCase的类,并在其中定义以test开头的方法来代表测试用例
    • 执行测试时,可以使用unittest.main()函数来运行这些测试用例,并生成相应的报告

1.1.3 总结

以上方法均可用于python自动化测试中生成详细的测试报告,帮助更好地理解测试结果并进行缺陷跟踪

1.2 题目

如何生成一个可视化的测试报告

1.3 代码

import unittest
from HTMLTestRunner import HTMLTestRunner# 定义测试用例
class TestStringMethods(unittest.TestCase):def test_upper(self):self.assertEqual('foo'.upper(), 'FOO')def test_isupper(self):self.assertTrue('FOO'.isupper())self.assertFalse('Foo'.isupper())def test_split(self):s = 'hello world'self.assertEqual(s.split(), ['hello', 'world'])# 检查s.split fails when the separator is not a stringwith self.assertRaises(TypeError):s.split(3)# 构建测试套件
def suite():suite = unittest.TestSuite()suite.addTest(TestStringMethods('test_upper'))suite.addTest(TestStringMethods('test_isupper'))suite.addTest(TestStringMethods('test_split'))return suiteif __name__ == '__main__':# 运行测试套件并生成HTML报告with open('TestReport.html', 'wb') as report_file:runner = HTMLTestRunner(stream=report_file,title='Test Report',description='Example test report generated by HTMLTestRunner.')runner.run(suite())

输出结果:
在这里插入图片描述
测试报告:
在这里插入图片描述

1.3 代码解释

代码使用unittest框架和HTMLTestRunner库来定义和运行测试用例,并生成一个HTML格式的测试报告

import unittest
from HTMLTestRunner import HTMLTestRunner
  • 导入unittest模块,它提供了用于编写和运行测试的框架
  • 导入HTMLTestRunner,这是一个第三方库,用于生成HTML格式的测试报告
# 定义测试用例
class TestStringMethods(unittest.TestCase):
  • 定义一个名为TestStringMethods的类,它继承自unittest.TestCase。这个类将包含测试用例
    def test_upper(self):self.assertEqual('foo'.upper(), 'FOO')
  • 定义一个名为test_upper的方法,用于测试字符串的upper()方法。使用assertEqual来断言'foo'.upper()返回的值是否等于'FOO'
    def test_isupper(self):self.assertTrue('FOO'.isupper())self.assertFalse('Foo'.isupper())
  • 定义一个名为test_isupper的方法,用于测试字符串的isupper()方法。第一个断言检查'FOO'.isupper()是否返回True,第二个断言检查'Foo'.isupper()是否返回False
    def test_split(self):s = 'hello world'self.assertEqual(s.split(), ['hello', 'world'])# 检查s.split fails when the separator is not a stringwith self.assertRaises(TypeError):s.split(3)
  • 定义一个名为test_split的方法,用于测试字符串的split()方法。第一个断言检查'hello world'.split()是否返回['hello', 'world']。第二个断言使用assertRaises来检查当split()的参数不是字符串时是否抛出TypeError异常
# 构建测试套件
def suite():suite = unittest.TestSuite()suite.addTest(TestStringMethods('test_upper'))suite.addTest(TestStringMethods('test_isupper'))suite.addTest(TestStringMethods('test_split'))return suite
  • 定义一个名为suite的函数,它创建一个unittest.TestSuite实例,并将之前定义的测试用例添加到这个测试套件中
if __name__ == '__main__':# 运行测试套件并生成HTML报告with open('TestReport.html', 'wb') as report_file:runner = HTMLTestRunner(stream=report_file,title='Test Report',description='Example test report generated by HTMLTestRunner.')runner.run(suite())

二、思考

  • 当这个脚本作为主程序运行时,它将打开一个名为TestReport.html的文件,以二进制写入模式
  • 创建一个HTMLTestRunner实例,并传入文件流、报告标题和描述
  • 使用runner.run(suite())运行测试套件,并将结果写入到之前打开的文件中,从而生成HTML测试报告

http://www.mrgr.cn/news/61495.html

相关文章:

  • 利用AI大模型和Mermaid生成流程图
  • excel前缀和(递增求和)
  • 21天学通C++第八章——指针
  • Microsoft Sql Server 2019 数据类型
  • JVM之垃圾回收器概述(续)的详细解析
  • 【opencv】第8章 图像轮廓与图像分割修复
  • RESCAL张量分解检测YELP数据集
  • JVM垃圾回收算法
  • C++引用类型变量
  • 深入了解 JavaScript 字符串方法:从字符获取到大小写转换
  • 如何使用非官方的根组件
  • c++习题36-奇数单增序列
  • 双指针——对撞指针与左右指针
  • Spring Boot集成Milvus和deeplearning4j实现图搜图功能
  • 提升质量:构建系统性的质量保证策略
  • java-web-day6-下-知识点小结
  • 构建生产级的 RAG 系统
  • GCC及GDB的使用
  • 自适应阻抗案例分析(上)
  • 基于SpringBoot+LayUI+Vue智能停车收费系统
  • 第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八
  • 【工具】Charles对360浏览器抓包抓包
  • Nginx 迁移到 Caddy:一次完整的反向代理配置迁移实践
  • 美国技术论坛汇总
  • 滴滴面试:单表可以存200亿数据吗?单表真的只能存2000W,为什么?
  • PG数据库之视图详解