pytest基础-new

规范

1、首先创建 py 文件命名以 test_ 开始或者以 _test 结尾

2、若是新建类,测试类需要以 Test_开头

3、测试用例(方法)需要以 test_开头

assert 断言

assert xx:判断 xx 为真

assert not xx:判断 xx 不为真

assert a in b:判断 b 包含 a

assert a == b:判断 a 等于 b

assert a !=b:判断 a 不等于 b

from calculator import add, subtractdef test_add():   #passassert add(2, 3) == 5
def test_subtract():  #passassert subtract(5, 3) != 1def test_zhen():#failassert 0 
def test_zhen2():#passassert 1def test_jia():#passassert not 0 
def test_jia1():#failassert not 1def test_include():#passassert 1 in [1,2,3]
def test_include2():#failassert 4 in [1,2,3]

执行

命令行执行:

  • pytest .\test_calculator.py 指定执行某文件

  • pytest 文件夹下所有test_* 或者*_test的文件,全部执行

  • pytest test_tt.py::Test::test_case1 pytest路径/文件名::类名::方法名 执行指定文件指定方法

  • pytest test_tt.py::test_case1 pytest路径/文件名::方法名

ide执行:

if __name__ == '__main__':

- pytest.main(['test_tt.py']) 指定文件, 指定执行某文件

- pytest.mian() 没有指定文件,文件夹下所有test_* 或者*_test的文件,全部执行

- pytest.main(['test_tt.py::Test::test_case1']) 指定文件指定类指定方法

- pytest.main(['test_tt.py::test_case1']) 指定文件指定方法

命令行参数执行:

pytest -q 简化控制台的输出

        pytest -q test_calculator.py

pytest -v 输出用例更加详细的执行信息,比如用例所在文件和用例名称

        pytest -v test_calculator.py

pytest -k 执行用例中包含‘关键字’的用例 pytest -v -k "include" 方法名包含include的会被执行

        pytest -k "include" test_calculator.py

pytest -s 输出用例中的调试信息,比如 print 打印信息,如果不加参数则不输出打印信息

        pytest -s test_calculator.py

pytest -m 执行‘标记’的内容,执行特定的测试用例,执行有相同标记的测试用例

        标记方法:方法前 @pytest.mark.run_these 打标run_these

        执行 pytest -m run_these test_calculator.py test_calculator文件中的所有打标run_these的都会被执行

pytest -x执行失败则停止执行,后面的用例不会被执行

        pytest -x test_calculator.py 执行出fail就会break

pytest --maxfail=n执行失败 n 次之后停止执行,n 是执行失败的次数

        pytest --maxfail=3 test_calculator.py 执行,当fail3次的时候,break

pytest --count=n 执行用例 n 次,n=2 就是执行两次

        pytest --count=2 test_calculator.py 执行2次

pytest --lf (last failed)重新运行上次失败的用例,若没有失败的会全部跑

        pytest --lf test_calculator.py 将上次失败的again一遍,没有失败的就all again

pytest --ff (failed first)重新运行所有用例,但首先运行上次失败的用例

        pytest --ff test_calculator.py 所有全部执行一遍,上次失败的优先执行

标记跳过执行

skipif(condition, reason=None) 参数:

condition:跳过的条件,必传参数reason:标注原因,必传参数

使用方法:

@pytest.mark.skipif(condition, reason="xxx") condition 条件为真时跳过

@pytest.mark.skip()

标记预期失败

xfail(condition=None, reason=None, raises=None, run=True, strict=False)

常用参数:

condition:预期失败的条件,必传参数reason:失败的原因,必传参数

使用方法:

@pytest.mark.xfail(condition, reason="xx")condition 为真则标记失败

在某种条件不满足的时候, 预期它是失败的, 就将它标记为预期失败, 若condition 条件不满足则正常执行

预期失败:

  • 没有条件,失败就是xfailed

  • 有条件,条件满足为真,失败就是xfailed

  • 有条件,条件不满足为假,失败就是failed

参数化

方法:

parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

常用参数:

argnames:参数名

argvalues:参数对应值,类型必须为 list 当参数为一个时格式:[value]

当 参 数 个 数 大 于 一 个 时 , 格 式 为 : [(param_value1,param_value2.....),(param_value1,param_value2 )]

使用方法:

@pytest.mark.parametrize(argnames,argvalues) 参数名,参数值

@pytest.mark.parametrize("a",[3,6])单参数

@pytest.mark.parametrize("a,b",[(1,2),(0,3)])多参数

参数值为 N 个,测试方法就会运行 N 次

标记用例多次执行

首先安装 repeat: pip install pytest-repeat

@pytest.mark.repeat(n)执行当前用例 n 次 然后再往下执行其他用例

标记用例执行顺序

使用:

安 装 pip install pytest-ordering

@pytest.mark.run(order=1)---第1个执行

@pytest.mark.run(order=2)---第2个执行

@pytest.mark.last---最后执行

fixtrue

自定义测试用例预置条件--pytest 精髓fixture

@pytest.fixture()(scope="function",params=None,autouse=False, ids=None, name=None)

调用时被优先执行 预处理或者重复操作scope:被标记方法的作用域

function(default):作用于每个测试方法,每个 test 都运行一次

class:每个 class类执行开始时执行一次 @pytest.fixture()(scope="class",autouse=True)

module:每个 module 的所有 test开始前只执行一次 @pytest.fixture()(scope="module",autouse=True)

session:多个.py 文件的用例的时候, 如果多个用例只需调用一次fixture,那就可以设置为 scope="session"。

params:(list 类型)提供参数数据,供调用标记方法的函数使用

autouse:是否自动运行,默认为 False 不运行,设置为 True 自动运行

若不为 True 则需要调用才会优先执行。

@pytest.fixture()

定义函数,命名不要以 test 开头与用例区分开,fixture 有返回值, 没有返回值默认为 None。用例调用 fixture 返回值,直接就是把 fixture 的函数名称当做变量名称。

生成测试报告

想要生成测试报告,需要先安装 pytest-html

安装命令: pip install pytest-html

  • 命令行生成:pytest --html==路径/文件名.html 执行用例文件.py

    • pytest --html==./report_sample.html test_sample.py html报告

    • pytest --junit-xml==./report_sample.xml test_sample.py xml报告

  • 使用 PyCharm 生成报告

  • if name == "__main__": pytest.main('-s','-v','--html==./report_sample.html','test_samle.py')

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

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

相关文章

【华为OD机试真题】232、统计射击比赛成绩 | 机试真题+思路参考+代码分析(C++)

题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排 名后的选手ID序列 条件如下: 1.一个选手可以有多个射击成绩的分数,且次序不固定 2.如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名…

⭐Unity 开发 | 如何通过 NTP 网络时间实现精准的跨平台时间同步【附完整源码 + UI 模块 + 偏差分析】

🎮 项目实战 | 实现一套精确、可视化的游戏时间同步机制,让你的多人在线游戏摆脱“时间不一致”噩梦! 效果如图: 📌 一、前言:为什么不能只信本地时间? 在 Unity 游戏开发中,时间几…

Vue3 Composition API与十大组件开发案例详解

文章目录 一、Vue3核心API解析1.1 Composition API优势1.2 核心API 二、十大组件开发案例案例1:响应式表单组件案例2:动态模态框(Teleport应用)案例3:可复用列表组件案例4:全局状态通知组件案例5&#xff1…

Kafka 详细解读

1. Producer(生产部卷王) 职责:往 Kafka 里疯狂输出数据,KPI 是「日抛式消息海啸」 职场人设: 白天开会画饼,深夜写周报的奋斗逼,口头禅是「这个需求今晚必须上线!」代码里的「福报…

LicheeRV Nano 与Ubuntu官方risc-v 镜像混合

LicheeRV Nano 官方给的镜像并没有unbutu, unbutu官方有一个基于 LicheeRV Dock的镜像,想象能否将二者混合 (1)刷 LicheeRV Dock的镜像 nano无法启动 (2)将nano的boot分区替换掉 LicheeRV Dock的rootfs以外的分区也…

【模板匹配】图像处理(OpenCV)-part10

19.1模板匹配 模板匹配就是用模板图(通常是一个小图)在目标图像(通常是一个比模板图大的图片)中不断的滑动比较,通过某种比较方法来判断是否匹配成功,找到模板图所在的位置。 不会有边缘填充。 类似于卷积&#xff0c…

HTML:表格数据展示区

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>人员信息表</title><link rel"styl…

MySQL 的锁,表级锁是哪一层的锁?行锁是哪一层的锁?

MySQL 的锁层级与类型 在 MySQL 中&#xff0c;锁的层级和实现与存储引擎密切相关。 1. 表级锁&#xff08;Table-Level Locks&#xff09; &#xff08;1&#xff09;存储引擎层的表级锁 实现层级&#xff1a;存储引擎层&#xff08;如 MyISAM、InnoDB&#xff09;。特点&a…

阿里巴巴按图搜索1688商品(拍立淘) API 返回值说明

阿里巴巴按图搜索1688商品&#xff08;拍立淘&#xff09;API 返回值说明 阿里巴巴按图搜索1688商品&#xff08;拍立淘&#xff09;API 的返回值通常以 JSON 格式返回&#xff0c;包含搜索结果、商品信息、分页信息等。以下是具体的返回值说明&#xff1a; 1. 请求状态信息 …

基于esp32-s3,写一个实现json键值对数据创建和读写解析c例程

以下是一个基于 ESP32 - S3 使用 ESP - IDF 框架实现 JSON 键值对数据创建、读写和解析的 C 语言例程。 环境准备 确保你已经安装了 ESP - IDF 开发环境&#xff0c;并且可以正常编译和烧录代码到 ESP32 - S3 开发板。 代码示例 #include <stdio.h> #include <stri…

MyBatis-Plus 使用 Wrapper 构建动态 SQL 有哪些优劣势?

MyBatis-Plus (MP) 提供的 Wrapper (如 QueryWrapper, LambdaQueryWrapper, UpdateWrapper, LambdaUpdateWrapper) 是其核心特性之一&#xff0c;它允许我们在开发时以面向对象的方式构建 SQL 的 WHERE 条件、ORDER BY、SELECT 字段列表等部分。与传统的 MyBatis 在 XML 文件中…

STM32与i.MX6ULL内存与存储机制全解析:从微控制器到应用处理器的设计差异

最近做FreeRTos&#xff0c;以及前面设计的RVOS&#xff0c;这种RTOS级别的系统内存上的分布与CortexA系列里面的分布有相当大的区别&#xff0c;给我搞糊涂了。 目录 STM32&#xff08;Cortex-M系列&#xff09;的内存与存储机制 Flash存储内容RAM存储内容启动与运行时流程示例…

Eteam 0.3版本开发规划

Eteam 0.1系列经历了3个小版本&#xff0c;主要完成了团队资料库功能。 Eteam 0.2系列经历了22个小版本&#xff0c;主要完成了白板和AI交互的能力。 目前的问题 目前白板上的数据有两个来源&#xff0c;团队资料库和外部数据。外部数据和团队资料库数据边界不是很清晰。 0.3版…

HTML5好看的水果蔬菜在线商城网站源码系列模板5

文章目录 1.设计来源1.1 主界面1.2 关于我们1.3 商品服务1.4 果蔬展示1.5 联系我们1.6 商品具体信息1.7 登录注册 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#…

深入理解Java包装类:自动装箱拆箱与缓存池机制

深入理解Java包装类&#xff1a;自动装箱拆箱与缓存池机制 对象包装器 Java中的数据类型可以分为两类&#xff1a;基本类型和引用类型。作为一门面向对象编程语言&#xff0c; 一切皆对象是Java语言的设计理念之一。但基本类型不是对象&#xff0c;无法直接参与面向对象操作&…

uniapp自定义拖拽排列

uniapp自定义拖拽排列并改变下标 <!-- 页面模板 --> <template><view class"container"><view v-for"(item, index) in list" :key"item.id" class"drag-item" :style"{transform: translate(${activeInde…

基于SpringBoot的课程管理系统

前言 今天给大家分享一个基于SpringBoot的课程管理系统。 1 系统介绍 课程管理系统是一种专门为学校设计的软件系统&#xff0c;旨在帮助学校高效地管理和组织各类课程信息。 该系统通常包括学生、教师和管理员三大角色。 他们可以通过系统进行选课、查看课程表、考试、进…

max31865典型电路

PT100读取有很多种方案&#xff0c;常用的惠斯通电桥&#xff0c;和专用IC max31865 。 电阻温度检测器(RTD)是一种阻值随温度变化的电阻。铂是最常见、精度最高的测温金属丝材料。铂RTD称为PT-RTD&#xff0c;镍、铜和其它金属亦可用来制造RTD。RTD具有较宽的测温范围&#x…

飞算 JavaAI 与 Spring Boot:如何实现微服务开发效率翻倍?

微服务架构凭借其高内聚、低耦合的特性&#xff0c;成为企业构建复杂应用系统的首选方案。然而&#xff0c;传统微服务开发流程中&#xff0c;从服务拆分、接口设计到代码编写、调试部署&#xff0c;往往需要耗费大量时间与人力成本。Spring Boot 作为 Java 领域最受欢迎的微服…

(2)Docker 常用命令

文章目录 Docker 服务器Docker 镜像Docker 容器本地 RegistryRUN vs CMD vs ENTRYPOINTRUNCMDENTRYPOINT 限制容器对内存、CPU 和 IO 资源的使用内存CPUBlock IO设置权重bps 和 iops cgroup 和 namespacecgroupnamespacMount namespaceUTS namespaceIPC namespacePID namespace…