当前位置: 首页 > 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测试报告

相关文章:

【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生成测试报告,常用的方法包…...

【Java基础】2、Java基础语法

f2/fnf2:选中点中的文件名 ​​​​​​​ 1.注释 为什么要有注释? 给别人和以后的自己可以看懂的解释 注释含义 注释是在程序指定位置的说明性信息;简单理解,就是对代码的一种解释 注释分类 单行注释 //注释信息 多行注释…...

MATLAB基础应用精讲-【数模应用】本量利分析(Cost-Volume-Profit Analysis)

目录 前言 几个高频面试题目 本量利分析与量本利分析的区别 算法原理 发展历程 几个相关概念 什么是CVP分析 基本假设 注意事项 本量利分析的作用 基本原理 多种产品量本利分析 盈亏平衡分析 目标利润分析 敏感性分析 边际分析 本量利分析基本模型 应用场景 …...

实习冲刺Day7

算法题 合并两个有序链表 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {for (int i 0; i<n; i) {nums1[m i] nums2[i];//直接将num2的数据插入到num1的尾部}sort(nums1.begin(), nums1.end());//排…...

《Python游戏编程入门》注-第4章1

《Python游戏编程入门》的第4章是“用户输入&#xff1a;Bomb Cathcer游戏”&#xff0c;通过轮询键盘和鼠标设备状态实现Bomb Cathcer游戏。 1 Bomb Cathcer游戏介绍 “4.1 认识Bomb Cathcer游戏”内容介绍了Bomb Cathcer游戏的玩法&#xff0c;即通过鼠标来控制红色“挡板”…...

一些硬件知识【2024/10/29】

千兆以太网有8条信号线&#xff0c;百兆以太网有4条线&#xff1a; 网络变压器构造图&#xff1a; 百兆以太网拓扑&#xff1a; BOB Smith电路&#xff1a; 【以太网接口电 路设计】https://www.bilibili.com/video/BV1i3411u7bv?vd_source3cc3c07b09206097d0d8b0aefdf07958&a…...

利用弱监督学习在全切片病理图像中检测和分型基底细胞癌|文献速递-基于生成模型的数据增强与疾病监测应用

Title 题目 Detection and subtyping of basal cell carcinoma in whole-slide histopathology using weakly-supervised learning 利用弱监督学习在全切片病理图像中检测和分型基底细胞癌 01 文献速递介绍 基底细胞癌 (BCC) 的发病率正在给病理诊断带来压力。BCC 的发病率…...

leetcode刷题笔记——15.三数之和

一、问题描述 给定一个整数数组 nums&#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]]&#xff0c;使得&#xff1a; i ! j、i ! k 且 j ! k nums[i] nums[j] nums[k] 0 需要返回所有和为 0 的三元组&#xff0c;且这些三元组不能重复。 输入输出 输入: 整…...

NLTK无法下载?

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 nltk无法下载怎么办&#xff1f;什么是NLTK&#xff1f;为什么要用NLTK&#xff1f;如何下载&#xff1f; nltk无法下载怎么办&#xff1f; 什么是NLTK&#xff1f; NLTK是学习自然…...

采用非递归快排实现找出数组中的前k个高频元素(python)

前k个高频元素 题目描述解题思路代码实现 题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 解题思路 &#xff08;1&#xff09;先对给定的列表进行…...

Java题集练习4

Java题集练习4 1 异常有什么用&#xff1f; 用来找到代码中产生的错误 防止运行出错2 异常在java中以什么形式存在&#xff1f; 异常在java中以类的形式存在&#xff0c;分为运行时异常和编译期异常&#xff0c;他们都在类Exception中3 异常是否可以自定义&#xff1f;如何自…...

sql进阶篇

1.更新记录 AC&#xff1a; update examination_info set tag replace(tag, "PYTHON", "Python") where tag "PYTHON";2.删除记录 AC&#xff1a; DELETE FROM exam_record WHERE timestampdiff(minute, start_time, submit_time) < 5AND…...

代码工艺:SQL 优化的细节

1. 巧用 limit 当出现深分页的时候&#xff0c;例如&#xff1a; select id, name, status, detail from product limit 100000, 30; 那么MySQL的执行方式为&#xff1a;一共需要查100030条数据&#xff0c;然后丢弃前面的100000条&#xff0c;只返回后面的30条数据&#xf…...

天池蚂蚁AFAC大模型挑战赛-冠军方案(含代码)

天池-蚂蚁AFAC大模型挑战赛-冠军方案 前言 ❝ 作者     彭欣怡 华东师大; 马千里 虾皮; 戎妍 港科广 说在前面     在当今信息技术迅猛发展的背景下&#xff0c;大模型技术已经成为推动人工智能领域进步的重要力量。     前段时间备受瞩目的AFAC赛题聚焦于金融对话…...

[QUIC] Packets 和 Frames 概述

Packets 和 Frames 概述 受保护的数据包 (Protected Packets) 基于不同的包类型, QUIC 使用不同等级的保护机制. Version Negotoation 包不受保护. Retry 包使用 AEAD 进行保护。 Initial 包使用 AEAD 进行保护, 但是使用的 Key 是由一个网络可见的值计算出来的。 因此 Ini…...

QT编辑框带行号

很可惜&#xff0c;qt的几个编辑框并没有相关功能。所以我们要自己实现一个。 先讲讲原理&#xff1a; QPlainTextEdit继承自QAbstractScrollArea&#xff0c;编辑发生在其viewport&#xff08;&#xff09;的边距内。我们可以通过将视口的左边缘设置一个空白区域&#xff0c;…...

Kafka认证时Successfully logged in真的认证成功了?

背景 某个应用需要配置 Kafka 集群信息&#xff0c;且需要在验证集群是否可达。基本实现思路是创建一个生产者对象&#xff0c;然后发送一条测试数据&#xff0c;调用 Producer 的 send 方法发送消息后&#xff0c;再调用 get() 方法&#xff0c;即同步发送消息&#xff0c;测…...

软考信息系统管理师,系统集成项目管理工程师,考哪一个合适?

根据2024年的考试安排&#xff0c;高级项目管理师和系统集成工程师考试改为每年一次。 2024年上半年考高级项目管理师&#xff0c;下半年考系统集成项目管理工程师。 根据这个调整&#xff0c;建议先报名5月份的高级项目管理师考试。如果通过了&#xff0c;大家都高兴&#x…...

AI学习指南自然语言处理篇-位置编码(Positional Encoding)

AI学习指南自然语言处理篇-位置编码&#xff08;Positional Encoding&#xff09; 目录 引言位置编码的作用位置编码的原理绝对位置编码相对位置编码位置编码在Transformer中的应用位置编码的意义总结 引言 在自然语言处理中&#xff0c;文本数据通常以序列的形式存在。然而…...

macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程

想要把dmg格式转成iso格式&#xff0c;然后能在虚拟机上用&#xff0c;最起码新版的macOS镜像是不能用UltraISO&#xff0c;dmg2iso这种软件了&#xff0c;你直接转放到VMware里绝对读不出来&#xff0c;办法就是&#xff0c;在Mac系统中转换为cdr&#xff0c;然后再转成iso&am…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...