当前位置: 首页 > 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…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...