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

单元测试框架-Pytest(简单学习)

单元测试框架-Pytest

Pytest是基于Python语言的单元测试框架,也是一个命令行的工具,比 unittest 测试框架更灵活。具有以下特点:

  1. 入门简单,易上手,官方文档丰富而且使用广泛,有大量的参数例子。

  2. unittest有的,它都有,而且支持更为复杂的功能测试

  3. 支持大量第三方插件,如:失败重试、控制用例执行顺序等。

  4. 基于配置文件可以很简单的集成CI(持续集成)工具中。

安装

pip install pytest

快速入门

基本格式

pytest_01_基本格式.py,代码:

def add(x, y):return x + yclass TestAddFunc(object):  # 测试用例类名必须用Test开头def test_01(self):   # 方法名与函数名必须要用test_开头print(add(10, 20))def test_02(self):print(add("a", "B"))def test_03(self):print(add("a", 20))

运行:

测试运行

pytest提供了三种方式给测试人员执行测试用例:

  • 命令行运行

pytest -s -v 文件名
# -s 输出测试用例的print语句打印的信息
# -v 输出执行的测试用用例的类名以及方法名
# -x 一旦发现失败用例,立即停止继续运行
# -maxfail=2 当测试遇到2条失败用例,立即停止继续运行

Pycharm运行

file -> settings,打开配置窗口。

main函数运行(基本不用)

pytest.main(["模块文件名::类名::方法名", "参数"])
pytest.main(["pytest_01_基本格式.py::TEstAddFunc::test_01", "-sv"])

测试脚手架

方法级别:setup与teardown

类级别:setup_class与teardown_class,注意:这是实例方法,不是类方法

模块级别:setup_module与teardown_module

pytest_02_测试脚手架.py,代码:

def add(x, y):return x + ydef setup_module():print("模块执行初始化操作")def teardown_module():print("模块执行初始化putest")class TestAddFunc(object):  # 测试用例类名必须用Test开头def setup(self):print('setup执行初始化操作')def teardown(self):print('teardown执销毁操作')def setup_class(self):    # 注意:此处方法类型是实例方法。print('类级别:setup_class执行初始化操作')def teardown_class(self):  # 注意:此处方法类型是实例方法。print('类级别:teardown_class执行初始化操作')def test_01(self):   # 方法名与函数名必须要用test_开头print(add(10, 20))def test_02(self):print(add("a", "B"))def test_03(self):print(add(20, 20))

运行:

基于配置文件运行pytest

在pytest提供的终端运行测试用例的方式的基础上,pytest还支持使用配置文件来简化运行参数。

可以通过pytest --help 查看pytest配置文件的名:pytest.ini、tox.ini、setup.cfg。

配置文件一般保存在项目根目录下。

pytest.ini,配置文件格式:

; 命名空间,表示以下选项属于pytest配置
[pytest]
; 运行参数
addopts = -s -v
; 匹配搜索的测试文件的目录路径
testpaths = ./
; 匹配搜索的测试文件名格式
python_files = test_*.py
; 匹配搜索的测试类格式
python_classes = Test*
; 匹配搜索的测试方法名格式
python_functions = test_*

上面的注释,必须清除否则报错。有了配置文件以后,使用pytest命令即可运行测试用例。

pytest

断言

Pytest的断言比unittest提供的断言更加简单易用,仅仅只需要使用assert关键字,后续跟上python原生的表达式即可。

assert "m" in "moluo"
assert "m" not in "moluo"
assert 1 == 2
assert 1 != 1
assert 1 > 2
assert not True
assert type(1) is int
assert type(1) not is int

pytest_03_断言.py,代码:

def add(x, y):return x + yclass TestAddFunc(object):  # 测试用例类名必须用Test开头def test_01(self):   # 方法名与函数名必须要用test_开头res = add(10, 20)assert res == 30def test_02(self):res = add("a", "B")assert type(res) is intdef test_03(self):res = add(20, 20)assert res != 20

运行:

跳过

根据特定的条件,不执行标识的测试函数。

@pytest.mark.skipif(判断条件, reason="跳过原因")

pytest_04_跳过.py,代码:

import pytestdef add(x, y):return x + yversion = (2, 7, 12)class TestAddFunc(object):  # 测试用例类名必须用Test开头def test_01(self):   # 方法名与函数名必须要用test_开头res = add(10, 20)assert res == 30@pytest.mark.skipif(version <= (2, 7, 12), reason="高于2.7以下,不测试test_02")def test_02(self):res = add("a", "B")assert type(res) is intdef test_03(self):res = add(20, 20)assert res != 20

运行:

参数化

pytest也支持参数化操作,而且不需要安装任何第三方模块即可使用,也不再需要ddt。

import pytestdef add(x, y):return x + yclass TestAddFunc(object):  # 测试用例类名必须用Test开头@pytest.mark.parametrize("x,y", [(10, 20), ("a", "b"), ("a", 20)])def test_01(self, x, y):   # 方法名与函数名必须要用test_开头res = add(x, y)assert res == 30

进阶使用

控制测试用例执行顺序

unittest执行测试用例的默认顺序是根据测试用例方法名的ASCII码排序而定的,值越小,越靠前执行。

pytest执行测试用例的默认顺序是根据测试方法的源代码上下顺序来排序的。

而如果我们要控制测试用例的执行顺序,可以通过pytest的第三方模块pytest-ordering来实现。

安装

pip install pytest-ordering

使用

class TestAdd(object):@pytest.mark.run(order=n)  # n表示执行顺序,可以是正负整数。def test_测试方法名(self):pass
# 执行顺序为优先执行正数排序的方法,接着到没有排序的方法,最后是负数排序的方法。
# 如果多个方法都是正数,则先执行排序值小的,同理如果多个方法都是负数,也是一样先执行排序值小的。
失败用例重试

安装

pip install pytest-returnfailures

使用

安装插件到本地以后,在pytest运行参数中会新增选项:--retuns 重试次数
# 重试次数为正整数
生成HTML格式测试报告

安装

pip install pytest-html

使用

安装插件到本地以后,在pytest运行参数中会新增选项:--html=report.html

allure

Allure 是一款轻量级的开源自动化测试报告生成框架。它支持绝大部分测试框架,比如 pytest、unittest 等。

  • 下载allure命令行工具:Releases · allure-framework/allure2 · GitHub

  • 解压allure.zip到一个文件目录中

  • 将allure安装目录\bin所在的路径添加环境变量path中

  • 命令行输入pip install allure-pytest

  • 在命令行中输入allure,如果能看到命令就是已经配置完成

jdk1.8(Java 8 环境)下载安装

https://www.java.com/zh-CN/download/

相关文章:

单元测试框架-Pytest(简单学习)

单元测试框架-Pytest Pytest是基于Python语言的单元测试框架&#xff0c;也是一个命令行的工具&#xff0c;比 unittest 测试框架更灵活。具有以下特点&#xff1a; 入门简单&#xff0c;易上手&#xff0c;官方文档丰富而且使用广泛&#xff0c;有大量的参数例子。 unittest…...

毛玻璃态卡片悬停效果

效果展示 页面结构组成 页面的组成部分主要是卡片。其中卡片的组成部分主要是包括了图片和详情。 卡片的动效是鼠标悬停在卡片上时&#xff0c;图片会移动到左侧&#xff0c;并且图片是毛玻璃效果。所以我们在布局的时候图片会采用绝对布局。而详情则是基础布局。 CSS3 知识…...

【面试经典150 | 数组】除自身以外数组的乘积

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;记录左右乘积空间优化 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到…...

uboot启动流程-涉及s_init汇编函数

一. uboot启动涉及函数 本文简单分析uboot启动流程中&#xff0c;涉及的汇编函数&#xff1a; lowlevel_init函数调用的函数&#xff1a;s_init 函数 save_boot_params_ret函数调用的函数&#xff1a; _main 函数 本文继上一篇文章的学习&#xff0c;地址如下&#xff1a;…...

单例模式详解及5种实现方式 (设计模式 一)

基本概念 在软件开发中&#xff0c;单例模式是一种常见的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。单例模式在需要确保只有一个对象实例存在的场景中非常有用&#xff0c;例如数据库连接、线程池、日志记录器等。 单例模式的核心思想是通…...

面试系列 - Java常见算法(一)

目录 一、排序算法 1、冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 2、快速排序&#xff08;Quick Sort&#xff09;&#xff1a; 二、查找算法 1、二分查找&#xff08;Binary Search&#xff09;&#xff1a; 三、 图算法 1、深度优先搜索&#xff08;De…...

Sentinel学习(1)——CAP理论,微服务中的雪崩问题,和Hystix的解决方案 Sentinel的相关概念 + 下载运行

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍CAP理论&#xff0c;微…...

C#学习 - 表达式、语句

表达式 定义 算法逻辑的最基本单元&#xff0c;表达一定的算法意图是由一个或多个操作数和零个或多个操作符组成的序列表达式功能是求值&#xff0c;得到的结果可能是一个值、对象、方法或名称空间因为操作符有优先级&#xff0c;所以表达式也有优先级 分类 一个值。表达式…...

VirtualBox 进入虚拟机后,鼠标出不来了

VirtualBox 进入虚拟机后&#xff0c;鼠标出不来了。 一般情况下&#xff0c;VirtualBox默认的鼠标切换快捷键是右边的Ctrl键。 如果按住右Ctrl键还是没有用&#xff0c;那应该是没有设置主机键。 设置方法&#xff1a; 打开VirtualBox的全局设定&#xff0c;找到热键&#xff…...

030-从零搭建微服务-消息队列(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...

Docker从认识到实践再到底层原理(九)|Docker Compose 容器编排

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

操作EXCEL计算3万条数据的NDVI并填入

Python操作EXCEL&#xff0c;计算3万条数据的NDVI并填入 问题描述 现在是有构建好了的查找表&#xff0c;不过构建了3万条数据&#xff0c;在excel中手动计算每行的NDVI值太麻烦了&#xff0c;也不会操作。 就试试python吧&#xff0c;毕竟python自动处理大型EXCEL数据很方便…...

Linux服务器安装Anaconda 配置远程jupyter lab使用虚拟环境

参考的博客&#xff1a; Linux服务器安装Anaconda 并配置远程jupyter lab anaconda配置远程访问jupyter&#xff0c;并创建虚拟环境 理解和创建&#xff1a;Anaconda、Jupyterlab、虚拟环境、Kernel 下边是正文了。 https://www.anaconda.com/download是官网网址&#xff0c;可…...

R语言实现随机生存森林(3)

常见问题解答 1、计算C指数 1-Error rate&#xff0c;或者 rsf.err <- get.cindex(yvar$Survival_months,yvar$OS,predictedrf.grow$predicted) 2、模型中predicted和predicted.oob区别 predicted和predicted.oob是两个不同的属性&#xff0c;它们分别表示模型的预测结果…...

WebPack-打包工具

从图中我们可以看出&#xff0c;Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件&#xff0c;减少了页面的请求. 下面举个例子 &#xff1a; main.js 我们只命名导出一个变量 export const name"老六"index.js import { name } from "./tset/…...

CISSP学习笔记:PKI和密码学应用

第七章 PKI和密码学应用 7.1 非对称密码学 对称密码系统具有共享的秘钥系统&#xff0c;从而产生了安全秘钥分发的问题非对称密码学使用公钥和私钥对&#xff0c;无需支出复杂密码分发系统 7.1.1 公钥与私钥 7.1.2 RSA&#xff08;兼具加密和数字签名&#xff09; RSA算法…...

简述Java21新特性

Java21新特性 你发任你发我用Java8 不管Java更新了多少版本&#xff0c;我还是用Java8,因为在很多框架不知道支持不支持Java21&#xff0c;而且因为很多Jar包的版本冲突问题&#xff0c;所以我还是用Java8&#xff0c;但是对于新技术的了解是非常必要的。 Java 21是新推出的长…...

Composition API(常用部分)

1. Composition API(常用部分) 文档: ​ https://composition-api.vuejs.org/zh/api.html 1) setup 新的option, 所有的组合API函数都在此使用, 只在初始化时执行一次函数如果返回对象, 对象中的属性或方法, 模板中可以直接使用2) ref 作用: 定义一个数据的响应式语法: cons…...

驱动插入中断门示例代码

驱动插入中断描述符示例代码 最近做实验&#xff0c;每次在应用层代码写测试代码的时候都要手动挂一个中断描述符&#xff0c;很不方便所以就想着写个驱动挂一个中断门比较省事 驱动测试效果如下&#xff1a; 下面的代码是个架子&#xff0c;用的时候找个驱动历程传递你要插…...

1 论文笔记:Efficient Trajectory Similarity Computation with ContrastiveLearning

2022CIKM 1 intro 1.1 背景 轨迹相似度计算是轨迹分析任务&#xff08;相似子轨迹搜索、轨迹预测和轨迹聚类&#xff09;最基础的组件之一现有的关于轨迹相似度计算的研究主要可以分为两大类&#xff1a; 传统方法 DTW、EDR、EDwP等二次计算复杂度O(n^2)缺乏稳健性 会受到非…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...