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

生成测试报告,在Unittest框架中就是简单

测试套件(Test Suite)是测试用例、测试套件或两者的集合,用于组装一组要运行的测试(多个测试用例集合在一起)。

(1)创建一个测试套件:

import unittest
suite = unittest.TestSuite()

(2)将测试用例,加载到测试套件中。

1、通过模块或测试用例类加载

import testcases # 测试用例的模块
import unittest
suite = unittest.TestSuite() # 创建测试套件
loader = unittest.TestLoader() # 用来加载TestCase到TestSuite中的
suite.addTest(loader.loadTestsFromModule(testcases)# 模块加载
suite.addTest(loader.loadTestsFromTestCase(testcases.类名)) # 用例类加载

添加单条测试用例

suite.addTest(类名("用例方法名"))

指定测试用例的所在的目录路径

进行加载()

discover(start_dir,pattern = "test*.py”,top_level_dir = None):start_dir:待测试的模块名或测试用例目录;pattern= "test*.py”:测试用例文件名的匹配原则;top_level_dir = None:测试模块的顶层目录,默认None。


import unittest
suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"用例文件所在的目录的绝对路径"))

2、Test Runner

Test Runner:用于协调测试的执行并(通过图形界面、文本界面、返回特殊值)向用户提供结果。

(1)测试结果

.:用例通过

E:表示代码出错了

F:表示不通过

(2)使用启动器,执行测试套件。

runner = unittest.TextTestRunner() # 测试运行程序--->用来执行测试用例的
runner.run(suite)

3、生成测试报告

(1)text类型报告:

with open(“test_report.txt","w") as f:runner = unittest.TextTestRunner(f)runner.run(suite)3

(2)html类型报告:

from HTMLTestRunnerNew import HTMLTestRunner
runner = HTMLTestRunner(stream=open("test_report.html", "wb"),  # 打开一个报告文件,将句柄传给streamtester="xxx",                    # 报告种显示的测试人员description="测试报告描述,        # 报告种显示描述信息title="测试报告标题")                 # 报告的标题
# 方法2
with open('test_report.html','wb') as file:runner = HTMLTestRunner(stream=file,tester = 'xxxx', # 报告种显示的测试人员title='测试报告标题', # 报告的标题description='测试报告描述' )  # 报告种显示描述信息runner.run(suite)

完整代码为:


import time
import os
import unittest
from com.contants import CASE_DIR # 测试用例模块路径
from com.contants import REPORT_DIR # 测试报告路径
from com.myconf import conf # 读取配置文件(测试报告配置信息)
from library.HTMLTestRunnerNew import HTMLTestRunner # 生成测试报告
from com.sendemail import send_email
# 1.创建测试套件
suite = unittest.TestSuite()
# 2. 加载TestCase到TestSuite中
# 创建对象加载
loader = unittest.TestLoader()
# # (1)通过模块加载
# suite.addTest(loader.loadTestsFromModule(test_case))
# # (2)通过测试用例类加载
# suite.addTest(loader.loadTestsFromTestCae(test_case.类名))
#
# # (3)添加单条测试用例,不需要loader对象方法
# #  注意:通过用例类去创建测试用例对象时,需传入用例的方法名(字符串类型)
# suite.addTest(类名("用例方法名"))
# (4)指定测试用例的所在的目录路径,进行加载()
suite.addTest(loader.discover(CASE_DIR))
# 测试运行程序--->用来执行测试用例的
# 方法1
# runner = unittest.TextTestRunner()
# 方法2:将HTMLTestRunner文件放在scripts
report_name =  time.strftime('%Y-%m-%d %H_%M') + conf.get('report','reportname')
report_path = os.path.join(REPORT_DIR,report_name)
with open(report_path,'wb') as file:runner = HTMLTestRunner(stream=file, # 文件名tester = conf.get('report','tester'), # 报告种显示的测试人员title= time.strftime('%Y-%m-%d %H_%M_%S') + conf.get('report','title'), # 报告的标题description=conf.get('report','description') )  # 报告种显示描述信息runner.run(suite)
# 发送测试报告
send_email(report_path,report_name)

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末领取】


      【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图+全套资料】


一、Python编程入门到精通


二、接口自动化项目实战  

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具


八、JMeter性能测试 

九、总结(文末尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!   

相关文章:

生成测试报告,在Unittest框架中就是简单

测试套件(Test Suite)是测试用例、测试套件或两者的集合,用于组装一组要运行的测试(多个测试用例集合在一起)。 (1)创建一个测试套件: import unittest suite unittest.TestSuite…...

生成式人工智能的潜在有害影响与未来之路(一)

这是本文的第1版,反映了截至2023年5月15日,Generative AI的已记载的和预期的危害。由于Generative AI的发展、使用和危害的快速变化,我们承认这是一篇内在的动态论文,未来会发生变化。 在本文中,我们使用一种标准格式…...

lightdb23.3 表名与包名不能重复

LightDB 表名与包名不能重复 从 LightDB 23.3 版本开始表名和包名不能重复,与 oracle 一致。原先已已支持包名和schema名不能重复。 背景 在之前版本在同一schema 下可以创建相同名字的表和包。这会导致在存储过程中使用%type指定变量类型时,如果存在…...

Oracle 开发篇+Java通过HiKariCP访问Oracle数据库

标签:HikariCP、数据库连接池、JDBC连接池、释义:HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。 ★ Java代码 import java.sql.Connection; impor…...

进销存管理系统(小杨国贸)springboot采购仓库财务java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 进销存管理系统(小杨国贸)spri…...

指针初阶(2)

文章目录 5. 指针和数组6. 二级指针7. 指针数组 附: 5. 指针和数组 指针变量:指针变量就是指针变量,不是数组,指针变量的大小是4/8个字节,专门是用来存放地址的。 数组:数组就是数组,不是指针&a…...

基于Gradio的GPT聊天程序

网上很多别人写的,要用账号也不放心。就自己写了一个基于gradio的聊天界面,部署后可以本地运行。 特点: 可以用openai的,也可以用api2d,其他api可以自己测试一下。使用了langchain的库 可以更改模型,会的…...

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm(2023)

1、包管理工具npm (1)包管理工具npm: Node Package Manager,也就是Node包管理器;但是目前已经不仅仅是Node包管理器了,在前端项目中我们也在使用它来管理依赖的包;比如vue、vue-router、vuex、…...

Terraform 系列-批量创建资源时如何根据某个字段判断是否创建

系列文章 Terraform 系列文章Grafana 系列文章 概述 前文 Grafana 系列 - Grafana Terraform Provider 基础 介绍了使用 Grafana Terraform Provider 创建 Datasource. 这几天碰到这么一个现实需求: 使用 Terraform 批量创建日志数据源时, 有的数据源类型是 El…...

Android侧滑栏(一)可缩放可一起移动的侧滑栏

在实际的各类App开发中,经常会需要做一个左侧的侧滑栏,类似于QQ这种。 今天这篇文章总结下自己在开发中遇到的这类可以跟随移动且可以缩放的侧滑栏。 一、实现原理 使用 HorizontalScrollView 实现一个水平方向的可滑动的View,左布局为侧滑…...

简单程度与自负是否相关?探索STM32的学习价值

事实上,无论STM32是否简单并不重要,更重要的是我们能通过学习STM32获得什么。通过STM32,我们可以学习到许多知识:如果我们制作一个键盘或鼠标,我们可以学习USB协议。如果我们制作一个联网设备,我们需要学习…...

第二章:CSS基础进阶-part3:弹性例子布局

文章目录 Flex盒模型二、常见属性2.1 flex属性2.2 justify-content2.3 flex-wrap2.4 flex-flow2.5 align-items2.6 父容器-align-content Flex盒模型 1、普通盒模型 2、弹性盒布局 使用弹性盒布局能让容器的宽度跟随浏览器窗口的变化而变换 二、常见属性 2.1 flex属性 2.2 …...

函数与方法有区别?

有区别,当然是有区别。 不管是java、rust还是go,他们都是不一样的。 先看定义: 函数(Function) 是一段独立的代码块,用于执行特定的任务。函数可以被多次调用,并且可以接受参数和返回结果。在G…...

VMware vCenter忘记密码操作,和Linus原理一致

mount -o remount,rw / passwd root ## 修改 root 密码要选择对应账户## 输入新密码,再输入一次新密码 umount / ## 卸载根文件系统 reboot -f ## 重新引导 vCenter...

Bert详细学习及代码实现详解

BERT概述 BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为decoder是不能获要预测的信息的。在大型语料库(Wikipedia BookCorpus)上训练一个大型模型(12 层到 …...

Vue [Day7] 综合案例

核心概念回顾 state:提供数据 getters:提供与state相关的计算属性 mutations:提供方法,用于修改state actions:存放异步操作 modules:存模块 功能分析 https://www.npmjs.com/package/json-server#ge…...

基于R做宏基因组的进化树ClusterTree分析

写在前面 同上一篇的PCoA分析,这个也是基于公司结果基础上的再次分析,重新挑选样本,在公司结果提供的csv结果表上进行删减,本地重新分析作图 步骤 表格预处理 在公司给的ClusterTree的原始表格数据里选取要保留的样本&#xf…...

栈和队列修炼指南(基本操作+OJ练习)

栈和队列修炼指南 1. 栈 1. 1 概念及结构 栈:是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶,另一端为栈底。 栈中的数据元素遵守后进先出原则(LIFO)原则 压栈:栈的…...

伪类和伪元素有何区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 伪类(Pseudo-class)⭐ 伪元素(Pseudo-element)⭐ 区别总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前…...

自动测试框架airtest应用一:将XX读书书籍保存为PDF

一、Airtest的简介 Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要…...

VoltAgent开源项目实战:从硬件选型到部署的电压监控智能代理

1. 项目概述:一个面向电压监测的智能代理最近在折腾一些嵌入式设备和老旧服务器的电源监控,发现市面上的通用监控方案要么太重,要么太贵,要么就是数据不够直观。直到我遇到了一个叫VoltAgent的开源项目,它的核心仓库是…...

从零构建轻量级AI智能体:微架构设计与运维自动化实践

1. 项目概述:一个轻量级智能体的诞生最近在开源社区里,一个名为pHaeusler/micro-agent的项目引起了我的注意。乍一看这个标题,它像是一个技术栈的简单组合,但深入探究后,我发现它远不止于此。这其实是一个关于如何用极…...

机器学习中随机性的核心作用与实现方法

1. 随机性在机器学习中的核心价值我第一次意识到随机性的重要性是在调试神经网络时。当模型在相同数据集上反复训练却得到截然不同的结果时,这种看似"不稳定"的现象反而揭示了机器学习的一个本质特征——好的随机性设计不是bug,而是feature。在…...

打卡信奥刷题(3166)用C++实现信奥题 P7865 「EVOI-RD1」无人机航拍

P7865 「EVOI-RD1」无人机航拍 题目背景 T 市举行活动需要拍摄高空俯瞰图,找来了一个无人机机队负责拍摄工作。 一E孤行 是队伍的队长,他根据广场的规模来安排无人机的位置。 题目描述 有一个广场,可以看做是一个 nmn \times mnm 的矩形&…...

现在不学C++26合约架构,半年后将无法维护下一代嵌入式/金融核心系统?4步构建可审计、可降级、可形式化验证的合约架构

更多请点击: https://intelliparadigm.com 第一章:C26合约编程的演进逻辑与系统级必要性 C26 将正式引入标准化的合约(Contracts)机制,其设计并非孤立语法糖,而是对系统级软件可靠性、可验证性与编译期优化…...

NHSE:3步掌握《动物森友会》存档编辑,打造你的完美岛屿

NHSE:3步掌握《动物森友会》存档编辑,打造你的完美岛屿 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否厌倦了在《集合啦!动物森友会》中花费数周时间收集…...

三步打造你的微信智能助手:零基础实现自动化消息处理

三步打造你的微信智能助手:零基础实现自动化消息处理 【免费下载链接】wxauto Windows版本微信客户端(非网页版)自动化,可实现简单的发送、接收微信消息,简单微信机器人 项目地址: https://gitcode.com/gh_mirrors/w…...

如何用Python免费获取Google Scholar学术数据?scholarly库让学术研究效率飙升!

如何用Python免费获取Google Scholar学术数据?scholarly库让学术研究效率飙升! 【免费下载链接】scholarly Retrieve author and publication information from Google Scholar in a friendly, Pythonic way without having to worry about CAPTCHAs! …...

VSCode多智能体任务分配落地实践(2026 Beta已验证):从本地开发到CI/CD流水线的全链路智能调度闭环

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026多智能体任务分配的演进与核心定位 VSCode 2026正式将多智能体协同开发(Multi-Agent Collaborative Development, MACD)纳入原生架构,其任务分配引擎不再…...

AI Agent Harness Engineering 的能耗问题:追求高效绿色的智能计算

AI Agent Harness Engineering 的能耗问题:追求高效绿色的智能计算 关键词 AI Agent能效优化;Agent Harness功耗模型;绿色智能计算;能效感知调度;边缘端Agent协同;功耗约束强化学习;碳足迹追踪 摘要 随着多模态自主AI Agent从实验室原型向大规模生产应用(如智能家居…...