生成测试报告,在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性能测试 

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向开发人员的 Spring Boot 最佳实践

Spring Boot是一种广泛使用且非常流行的企业级高性能框架。以下是一些最佳实践和一些技巧,您可以使用它们来改进 Spring Boot 应用程序并使其更加高效。这篇文章会有点长,完整读完文章需要一些时间。 正确的包装风格 正确的打包将有助于轻松理解代码和…

STL模板——vector详解

一、vector对象的定义和初始化方式 vector 中的数据类型 T 可以代表任何数据类型,如 int、string、class、vector(构建多维数组) 等,就像一个可以放下任何东西的容器,因此 vector 也常被称作容器。字符串类型 string …

ElasticSearch索引生命周期管理--DELETE

概要 ElasticSearch中的索引生命周期管理,也就是ilm(Manage the index lifecycle),是指定了索引在不同周期下的处理策略。ilm 的对象是索引而不是索引中的数据。ilm 包括四个阶段:hot 、warm、cold和delete。hot、warm和cold表示…

【VUE】项目本地开启https访问模式(vite4)

在实际开发中,有时候需要项目以https形式进行页面访问/调试,下面介绍下非vue-cli创建的vue项目如何开启https 环境 vue: ^3.2.47vite: ^4.1.4 根据官方文档:开发服务器选项 | Vite 官方中文文档 ps:首次操作,不要被类…

Pyspark

2、DataFrame 2.1 介绍 在Spark语义中,DataFrame是一个分布式的行集合,可以想象为一个关系型数据库的表,或者一个带有列名的Excel表格。它和RDD一样,有这样一些特点: Immuatable:一旦RDD、DataFrame被创…

ssm+vue基于java的少儿编程网上报名系统源码和论文PPT

ssmvue基于java的少儿编程网上报名系统源码和论文PPT006 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 摘 要 在国家重视教育影响下,教育部门的密确配合下&#…

沐渥六门氮气柜技术参数详解

氮气柜是用来存储电子元器件、芯片、半导体器件、金属材料、电路板、精密仪器等物品的设备,通过充入氮气降低柜内湿度,达到防潮、防氧化、防静电、防锈和防霉效果。 六门氮气柜参数 1、容积:约1380L;外尺寸:W1200*D700…

一零六八、回顾MySQL关键字排序

一、 关键字书写顺序 select distinct from join on where group by having union (all) order by limit二、 关键字实际执行顺序 from on join where group by having select distinct union (all) order by limit个人理解&…

100G光模块的应用案例分析:电信、云计算和大数据领域

100G光模块是一种高速光模块,由于其高速率和低延迟的特性,在电信、云计算和大数据领域得到了广泛的应用。在本文中,我们将深入探讨100G光模块在这三个领域的应用案例。 一、电信领域 在电信领域,100G光模块被广泛用于构建高速通…

QT- QLineEdite设置自动补全功能,并修改自动补全的样式

#include <QApplication> #include <QLineEdit> #include <QCompleter> #include <QStringListModel> #include <QMainWindow>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建一个字符串列表模型QStringListModel mode…

python流程控制语句学习笔记

if语句的使用 一、if判断语句介绍 if语句是用来进行判断的&#xff0c;其使用格式如下&#xff1a; if 要判断的条件: 条件成立时&#xff0c;要做的事情 demo1: age 30 print("------if判断开始------") if age > 18: print("我已经成年了") print…

HTML 元素中的name 属性

name 属性是 HTML 元素中常用的属性之一。它用于指定表单元素的名称&#xff0c;以便在提交表单时将其值与对应的键关联起来。 每个表单元素&#xff08;例如 <input>、<select> 和 <textarea>&#xff09;都可以具有一个 name 属性&#xff0c;该属性为元素…

Nginx使用proxy_cache指令设置反向代理缓存静态资源

场景 CentOS7中解压tar包的方式安装Nginx&#xff1a; CentOS7中解压tar包的方式安装Nginx_centos7 tar文件 怎么load_霸道流氓气质的博客-CSDN博客 参考上面流程实现搭建Nginx的基础上&#xff0c;实现静态资源的缓存设置。 注意上面安装时的目录是在/opt/nginx目录下&…

ELK中grok插件、mutate插件、multiline插件、date插件的相关配置

目录 一、grok 正则捕获插件 自定义表达式调用 二、mutate 数据修改插件 示例&#xff1a; ●将字段old_field重命名为new_field ●添加字段 ●将字段删除 ●将filedName1字段数据类型转换成string类型&#xff0c;filedName2字段数据类型转换成float类型 ●将filedNam…

如何使用Flask-CORS实现跨域资源共享

如何使用Flask-CORS实现跨域资源共享 引言&#xff1a; 在网络应用开发中&#xff0c;跨域资源共享&#xff08;Cross Origin Resource Sharing&#xff0c;简称CORS&#xff09;是一种机制&#xff0c;允许服务器与指定的来源或域名之间共享资源。使用CORS&#xff0c;我们可…

Leetcode每日一题:1289. 下降路径最小和 II(2023.8.10 C++)

目录 1289. 下降路径最小和 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理思路&#xff1a; 1289. 下降路径最小和 II 题目描述&#xff1a; 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路…

数据结构-1

1.2 线性结构树状结构网状结构&#xff08;表 数 图&#xff09; 数据&#xff1a;数值型 非数值型 1.2.3数据类型和抽象数据类型 1.3抽象数据类型 概念小结&#xff1a; 线性表: 如果在独立函数实现的 .c 文件中需要包含 stdlib.h 头文件&#xff0c;而主函数也需要包含 st…

短视频账号矩阵系统/技术开发搭建私有部署

本系统是基于短视频领域的新一代系统&#xff0c;旨在提供一个高效、全面的短视频管理与分发平台。系统采用先进的开发算法和技术&#xff0c;实现了智能化视频分类、推荐和用户互动功能。 目录 一、抖音SEO账号矩阵系统的开发和部署遵循以下原则&#xff1a; 二、账号矩阵绑…

谷歌全栈多平台应用开发神器Project IDX来了!PaLM 2加持,代码效率翻倍

一直以来&#xff0c;从0开始构建应用&#xff0c;都是一项复杂的工作。尤其是跨越手机、Web和桌面平台的程序。 这是一片无尽的复杂海洋&#xff0c;需要把技术堆栈融合在一起&#xff0c;来引导、编译、测试、部署、监控应用程序。 多年来&#xff0c;谷歌一直致力于让多平…