单元测试框架-pytest

单元测试框架-pytest

官网

常用插件

  • pytest-html: 生成html报告
  • pytest-xdist: 实现并发测试
  • pytest-ordering: 实现测试用例顺序设置
  • pytest-rerunfailures: 测试用例失败重试
  • allure-pytest: 生成测试报告
引入依赖

在项目根目录下创建:requirements.txt

pytest
pytest-html
pytest-xdist
pytest-ordering
pytest-rerunfailures
allure-pytest

执行命令

pip install -r requirements.txt

验证安装成功

pytest --version

使用Pytest

规范
  • 模块名必须以test_开头或者_test结尾
  • 测试类必须以Test开头,并且不能有__init__方法
  • 测试方法必须以test开头
运行方式
  • 主函数模式

    pytest.main()
    
  • 命令行模式

    pytest
    
  • 通过读取pytest.ini配置文件运行

    • 一般放在项目根目录
    • 编码:必须时ANSI,可以使用notepad++修改编码格式
    • 作用:改变pytest默认行为
    • 运行规则:主函数与命令行模式都会读取该文件
    [pytest]
    #命令行参数,用空格分隔
    addopts = -vs
    # 测试用例文件夹,可以自己配置
    testpaths = ./testcase
    # 配置测试搜索的模块文件名称
    python_files = test*.py
    # 配置测试搜索的测试类名
    python_classes = Test*
    # 配置测试搜索的测试函数名
    python_functions = test
    #测试分组
    markers =g11n:国际化测试组i10n:本地化测试组
    
  • 执行指定模块

    pytest.main(['test_module.py'])
    
  • 指定目录

    pytest.main(['dir_name'])
    
  • 通过nodeid指定测试用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成

    pytest.main('./dir_name/module.py::class_name::fun_name')
    
参数详情
  • -s:显示测试用例的调试内容

  • -v:显示测试用例详细信息

  • -n:多线程执行测试用例

  • –reruns:设置重试次数

  • -x:只要有一个测试用例失败,停止测试

  • –maxfail:设置几个测试失败停止运行

  • -k:根据测试用例的部分字符串指定测试用例

  • -m:指定测试分组

执行顺序
  • unittest:按ascii的大小来运行

  • pytest:默认从上到下

指定测试用例顺序:需要安装pytest-ordering

@pytest.mark.run(order=)
分组测试
@pytest.mark.mark_name
  • mark_name:为自定义的分组名称

运行测试

pytest -m "mark_name"

运行多个分组

pytest -m "mark1 or mark2"
跳过测试
  • 无条件

    @pytest.mark.skip(reason="原因")
    
  • 条件跳过

    @pytest.mark.skipif(expr, reason="原因")
    
生成报告
  • HTML

    pytest --html ./save_path/report.html
    
  • Allure

    下载

    • 解压项目并配置到环境变量中,验证是否安装成功
    allure --version
    
    • 生成json格式临时报告
    --alluredir  ./temp
    
    • 生成allure报告
    allure generate ./temp -o ./report --clean
    

    -o: 报告输出目录

    –clean:对目录进行清除

测试夹具(前后置)
  • setup_class:所有测试用例执行之前运行一次
  • teardown_class:所有测试用例执行之后运行一次
  • setup_method:每个测试用例执行之前运行一次
  • teardown_method:每个测试用例执行完成执行一次

部分测试用例前后置实现:@pytest.fixture()

参数

  • scope:作用域
    • function 方法级别的前后置 (默认)
    • class 类级别的前后置
    • module 模块级别的前后置
    • package/session 包级别的前后置
  • params: 参数化
    • 支持参数类型:(列表:[] 元组() 字典列表[{},{},{}],字典元组:({},{},{}))
  • autouse: 自动执行 默认值:False 如果为False,需要将函数名作为需要调用的方法的参数
  • ids: 当使用params参数化时,给参数列表每一个值设置一个变量名
  • name: 表示的时被@pytest.fixture标记的方法取一个别名
# yield返回后面可以有代码,return后面不能有代码,返回值即为测试方法的所传入的参数
# 参数名必须为request,否则报错[not found]
# 使用name对标记的方法起别名后不能使用原函数名作为参数,否则报错
@pytest.fixture(scope='function', params=['赵姗姗', '马化腾', '张一鸣'], ids=['zss', 'mht', 'zym'], name='fixt')
def my_fixture2(request):print("前置")yield request.paramprint("后置")

conftest.py与fixture结合使用

  • 通常在每个测试包下可以包含一个conftest.py文件,通常将前后置fixture定义在该文件中,在其他模块中无需导入即可使用
  • 夹具可以使用当前包及其父包的conftest.py中所定义的,同级包无法使用
断言
assert
数据驱动
    @pytest.mark.parametrize('args', ['zss', 'nan', 'lis'])def test_ddt(self, args):print(args)@pytest.mark.parametrize('name,age', [('张三', 21), ('李四', 22), ('王五', 23)])def test_ddt2(self, name, age):print(name)print(age)
  • 参数1:迭代的变量名
  • 参数2:迭代的value

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

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

相关文章

Visual Studio Code配置开发Maven项目、Spring Boot项目

配置开发Maven项目、Spring Boot项目 配置全局配置项目配置注意 Maven项目开发安装插件创建项目启动项目 Spring Boot项目开发安装插件创建项目启动项目 其他插件 配置 全局配置 ctrlshiftp打开搜索setting.json,这个setting.json配置属于全局配置 配置全局的Java与…

Python配置与测试利器:Hydra + pytest的完美结合

简介:Hydra 和 pytest 可以一起使用,基于 Hydra Pytest 的应用可以轻松地管理复杂配置,并编写参数化的单元测试,使得Python开发和测试将变得更为高效。 安装: pip install hydra-core pytest案例源码:my…

毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计

基于stm32单片机的app视频遥控抽水灭火水泵小车设计 1、项目简介1.1 系统构成1.2 系统功能 2、部分电路设计2.1 L298N电机驱动电路设计2.2 继电器控制电路设计 3、部分代码展示3.1 小车控制代码3.1 水泵控制代码 4 演示视频及代码资料获取 1、项目简介 视频简介中包含资料http…

用selenium和xpath定位元素并获取属性值以及str字符型转json型

页面html如图所示: 要使用xpath定位这个div元素,并且获取其属性data-config的内容值。 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Optionshost127.0.0.1 port10808 …

(图论) 1020. 飞地的数量 ——【Leetcode每日一题】

❓ 1020. 飞地的数量 难度:中等 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个 海洋单元格、1 表示一个 陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边…

python基础语法(四)

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒个人主页 🥸🥸🥸C语言 🐿️🐿️🐿️C语言例题 🐣🐓🏀python 这…

9.19 QT作业

完成文本编辑器的保存工作 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QFontDialog> //字体对话框 #include<QFont> //字体类 #include<QMessageBox> //消息对话框 #inclu…

SpringMVC学习|JSON讲解、Controller返回JSON数据、Jackson、JSON乱码处理、FastJson

JSON讲解 JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级的数据交换格式&#xff0c;目前使用特别 广泛。 采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON成为理想的数据交换语言。 易于人阅读和编写&#xff0c;同时也易于机…

岩土工程安全监测中振弦采集仪连接振弦传感器时注意事项

岩土工程安全监测中振弦采集仪连接振弦传感器时注意事项 岩土工程安全监测是保障工程稳定和安全的重要手段之一&#xff0c;而振弦采集仪则是岩土工程安全监测的常用设备之一&#xff0c;可以用于实时监测地下水位、土体变形、岩体应力等。其中&#xff0c;振弦传感器是振弦采…

Clickhouse存算分离的思考

Exploring storage and computing separation for ClickHouse - JuiceFS Blog ClickHouse 存算分离改造&#xff1a;小红书自研云原生数据仓库实践 唯品会翻牌ClickHouse后&#xff0c;实现百亿级数据自助分析_语言 & 开发_dbaplus社群_InfoQ精选文章 在思考如何实现存算…

解决报错:npm ERR! code 1

我是 npm install --legacy-peer-deps 成功了 解决方案&#xff1a; 升级swiper库&#xff1a;你可以尝试升级你的项目中的swiper库到5.2.0或更高版本&#xff0c;以满足vue-awesome-swiper的需求。你可以使用以下命令来进行升级&#xff1a; npm install swiperlatest 注意…

Hadoop:YARN、MapReduce、Hive操作

目录 分布式计算概述 YARN概述 YARN架构 核心架构 辅助架构 MapReduce 概述 配置相关文件 提交MapReduce到YARN Hive Hive架构 Hive在VMware部署 Hive的启动 数据库操作 数据表操作 内部表操作 外部表操作 数据加载和导出 数据加载LOAD 数据加载 - INSERT SEL…

Flink sql 1.17笔记

环境准备 # 启动hadoop集群 # 启动Flink yarn session (base) [link999hadoop102 flink-1.17.0]$ bin/yarn-session.sh -d# 启动finksql客户端 (base) [link999hadoop102 flink-1.17.0]$ bin/sql-client.sh -s yarn-session# 如果有初始化文件 bin/sql-client.sh embedded -s …

Spring Cloud Alibaba Ribbon负载均衡器

文章目录 Ribbon 负载均衡器环境搭建1.依赖2.配置3.修改其默认的负载均衡策略3.1 验证 4.创建自定义的Rule4.1 MyRule&#xff08;&#xff09;4.2 在配置config类中配置 5.饥饿加载6.我只想访问不想被别的访问 Ribbon 负载均衡器 背景 Ribbon 是一个用于客户端负载均衡的开源…

【ElementUI】ElementUI Tooltip 根据内容判断是否显示、文字提示自定义样式

【ElementUI】ElementUI Tooltip 根据内容判断是否显示、文字提示自定义样式 封装组件自定义内容 <template><span v-if"[, null, undefined].indexOf(content) -1"><el-tooltip :content"content" effect"light" placement&q…

Pytorch从零开始实战04

Pytorch从零开始实战——猴痘病识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——猴痘病识别环境准备数据集模型选择模型训练数据可视化其他模型图片预测 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytor…

前端-layui动态渲染表格行列与复杂表头合并

说在前面&#xff1a; 最近一直在用layui处理表格 写的有些代码感觉还挺有用的&#xff0c;顺便记录下来方便以后查看使用&#xff1b; HTML处代码 拿到id 渲染位置表格 <div class"layui-table-body salaryTable"><table class"layui-table" i…

C#使用OpenCv(OpenCVSharp)图像直方图均衡化处理实例

本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行直方图均衡化处理。 直方图均衡化原理 直方图均衡化(Histogram Equalization)是一种常用的图像增强技术,用于改善图像的对比度和亮度分布。它通过重新分配图像灰度级的像素值,使得图像的直方图在灰度范围内更…

GE WES5120 5120-1506 自动化控制模块

GE WES5120 5120-1506 是一种自动化控制模块&#xff0c;通常用于工业自动化和控制系统中&#xff0c;用于监测和控制各种工业过程。这种类型的自动化控制模块在多个应用领域都有广泛的用途&#xff0c;包括但不限于以下几个领域&#xff1a; 制造业&#xff1a; WES5120 5120-…

Nginx配置负载均衡时访问地址无法生效

场景还原 今天有小伙伴练习Nginx配置负载均衡时总是无法使用配置好的网址访问 配置文件信详情 http {# 负载均衡 后端IP地址和端口 webservers 策略 轮询upstream webservers{server 192.168.1.100:8080 weight90; server 127.0.0.1:8080 weight10; }server{listen 80;ser…