1. 简介

今天主要学习一下pytest的执行用例的规则。

2. 通过help帮助查看pytest如何使用

.查看pytest命令行参数,可以用pytest -h 或pytest --help查看

3. 用例设计原则

  • 文件名以test_*.py文件和*_test.py
  • 以test_开头的函数
  • 以Test开头的类
  • 以test_开头的方法
  • 所有的包pakege必须要有__init__.py文件

4.开始用例设计

4.1 用例设计目录

为了不必要的麻烦,请按照我的目录设计和写测试用例

4.2 test_class.py参考代码

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 1.导入模块
#  content of  test_class.py
class TestClass:def test_one(self):x = "this"assert 'h' in xdef test_two(self):x = "hello"assert hasattr(x, 'check')def test_three(self):a = "hello"b = "hello world"assert a in b

4.3 test_sample.py参考代码

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 1.导入模块#  content of  test_sample.py
def func(x):return x + 1def test_answer():assert func(3) == 5

5. 执行方式

 cmd执行pytest用例有三种方法,以下三种方法都可以,一般推荐第一个。简单、好记、好写。

pytest
py.test
python -m pytest

如果不带参数,在某个文件夹下执行时,它会查找该文件夹下所有的符合条件的用例(查看用例设计原则)

6. 执行规则

1.执行某个目录下所有的用例

pytest 文件名/

2.执行某一个py文件下用例

pytest 脚本名称.py

3.-k 按关键字匹配

pytest -k “MyClass and not method”

 这将运行包含与给定字符串表达式匹配的名称的测试,其中包括Python使用文件名,类名和函数名作为变量的运算符。 上面的例子将运行TestMyClass.test_something但不运行TestMyClass.test_method_simple

4.按节点运行

每个收集的测试都分配了一个唯一的nodeid,它由模块文件名和后跟说明符组成来自参数化的类名,函数名和参数,由:: characters分隔。
运行.py模块里面的某个函数

pytest test_mod.py::test_func

运行.py模块里面,测试类里面的某个方法

pytest test_mod.py::TestClass::test_method

5.标记表达式

pytest -m slow

将运行用@ pytest.mark.slow装饰器修饰的所有测试。
6.从包里面运行

pytest —pyargs pkg.testing

这将导入pkg.testing并使用其文件系统位置来查找和运行测试。

7.pytest -x( 遇到错误时停止测试)

pytest -x test_class.py

从运行结果可以看出,本来有3个用例,第二个用例失败后就没继续往下执行了

8.pytest -maxfail=num(当用例错误个数达到指定数量时,停止测试)

pytest --maxfail=1

7. pycharm配置pytest

以pytest方式运行,需要改该工程设置默认的运行器:file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择pytest

8. pycharm运行三种方式

上边已经介绍了如何在cmd执行pytest用例,平常我们写代码在pycharm比较多,写完用例之后,需要调试看看,是不是能正常运行,如果每次跑去cmd执行,太麻烦,所以很有必要学习如何在pycharm里面运行pytest用例

8.1xx.py脚本方式直接执行

1.以xx.py脚本方式直接执行,当写的代码里面没用到unittest和pytest框架时,并且脚本名称不是以test_开头命名的,此时pycharm会以xx.py脚本方式运行

 2.参考代码

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 1.导入模块
def hello():print("hello world !")if __name__=="__main__":hello()

8.2 以unittest方式运行

  1.当脚本命名为test_xx.py时,用到unittest框架,此时运行代码,pycharm会自动识别到以unittest方式运行

8.3 pytest方式运行

以pytest方式运行,需要改该工程设置默认的运行器:file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择pytest

备注:pytest是可以兼容unittest框架代码的

9. 趁热打铁-pycharm写pytest代码

在pycharm里面写pytest用例,先导入pytest

9.1 代码实现:

9.2 参考代码:

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 1.导入模块
#  content of  test.py
import pytestclass TestClass:def test_one(self):x = "this"assert 'h' in xdef test_two(self):x = "hello"assert hasattr(x, 'check')def test_three(self):a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main('-q test.py')

9.3 运行结果:

 1.运行代码后,控制台打印如下图的结果

2.运行结果“.F. ” 点是代表测试通过,F是Fail的意思,1 warnings是用于pytest.main('-q test_class.py')里面参数需要传list,多个参数放list就不会有警告了

pytest.main(['-q', 'test.py')

10. pycharm设置pytest

  1.新建一个工程后,左上角file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择pytest

2.改完之后,再重新建个脚本(注意是先改项目运行方式,再写代码才能出来),接下来右键运行就能出来pytest运行了

3.pytest是可以兼容unittest脚本的,之前写的unittest用例也能用pytest框架去运行

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

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

相关文章

InnoDB数据页

导读: 我们已经知道了页是数据库存储的基本单位,知道了一条行记录的存储格式是怎样的,当数据越来越多时,那一条条行记录具体又是怎么在页中被组织起来的呢? 一、InnoDB数据页结构 二、总结 1、一条条行数据是如何在数…

世赛背景下,中职物联网应用与服务赛项实训解决方案

一、世赛背景与物联网应用赛项概述 1.1 世赛发展历程及对中职教育的影响 世界技能大赛(WorldSkills Competition,简称世赛)自1950年创立以来,已经成为全球范围内展示职业技能水平的重要赛事。截至2024年,世赛已成功举…

【攻防篇】解决:阿里云docker 容器中自动启动xmrig挖矿-- 实战

文章目录 场景一、问题二、原因三、解决方案1、控制台处理2、 [清除与防护](https://blog.csdn.net/ladymorgana/article/details/148921668?spm1001.2014.3001.5501)1. 紧急处理:停止挖矿进程2. 清理被感染的容器3. 防护措施:防止再次被入侵4. 排查入侵…

飞算智造JavaAI:智能编程革命——AI重构Java开发新范式

文章目录 引言:当传统Java开发遇上AI一、技术架构解析1.1 核心架构图1.2 关键技术栈 二、实战演示:从需求到代码的全AI辅助2.1 场景:电商优惠券系统开发2.2 代码生成实例2.3 智能调试演示 三、与传统开发模式对比测试3.1 基准测试数据3.2 典型…

[特殊字符] 分享裂变新姿势:用 UniApp + Vue3 玩转小程序页面分享跳转!

在如今流量成本日益攀升的移动互联网时代,"用户分享拉新" 成为了增长的重要策略。而微信小程序作为天然具备社交传播力的平台,提供了较完善的分享机制支持。本文将从实战角度出发,手把手教你如何使用 uni-app Vue3 构建一个支持「…

[创业之路-458]:企业经营层 - 蓝海战略 - 重构价值曲线、整合产业要素、创造新需求

“重构价值曲线、整合产业要素、创造新需求”是蓝海战略中实现价值创新的核心路径,它们构成了一个从内部优化到外部协同,再到市场颠覆的完整逻辑链条。以下从理论框架、实践方法和企业案例三个维度展开分析: 一、重构价值曲线:打…

慢查询引发对mysql索引的探索

目录 一、索引分类 1.1 聚簇索引结构 1.2 非聚簇索引(二级索引) 1.3 主键索引 1.4 唯一索引 1.5 普通索引 1.6 前缀索引 1.7 联合索引 1.8 索引下推 1.9 索引区分度 二、优化索引的方法 2.1 索引的特点 2.2 适合创建索引的情况 2.3 不适合创建索引的情况 2.4 优…

启用不安全的HTTP方法

背景: 今天被安全检测出一个这样的问题:启用不安全的HTTP方法。DELETE方法是用来调试web服务器连接的http方式,支持该方式的服务器文件可能被非法删除;PUT方法用来向服务器提交文件;TRACE方法本用于客户端测试到服务器…

fvcom 水深文件dep制作

fvcom 水深文件dep制作 fvcom 水深文件dep制作20250630 本次案例网格和水深展示 vv image Figure 1 Model domain 本次制作其它驱动文件的输入文件为yellowsea.2dm 格式2dm; 文件内容格式详细介绍参考: https://www.xmswiki.com/wiki/SMS:2D_Mesh_Files_*.2dm …

ViewModel是EventFlow-State映射

ViewModel负责组装界面状态State。引发State变换的原因有很多,比如用户点击某个按钮,一次网络请求受到应答,一次本地数据库查询返回结果等等。因此ViewModel是根据各种事件生成State的对象,换句话说,是一个从多个事件流…

javaweb Day2

PreparedStatement作用: 预编译SQL语句并执行: 预防SQL注入问题 SQL注入:SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

Java项目:基于SSM框架实现的中学教学管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本景海中学教学管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…

JVM调优实战 Day 15:云原生环境下的JVM配置

【JVM调优实战 Day 15】云原生环境下的JVM配置 文章标签 jvm调优, 云原生, Java性能优化, JVM参数配置, 容器化部署, Kubernetes, Docker, JVM在云原生中的应用 文章简述 随着云原生技术的普及,Java 应用越来越多地运行在容器(如 Docker)和…

数据结构day7——文件IO

一、标准 IO 的起源与概念 标准 IO(Standard Input/Output)是由 Dennis Ritchie 在 1975 年设计的一套 IO 库,后来成为 C 语言的标准组成部分,并被 ANSI C 所采纳。它是对底层文件 IO 的封装,提供了更便捷、可移植的文…

6.Docker部署ES+kibana

部署ES(Elasticsearch)kibana 1.ES暴露的端口很多 2.ES十分消耗内存 3.ES的数据一般需要挂载出去,放在安全目录(挂载) elastic 前往官方手册 1.下载运行elasticsearch的 docker run -d --name elasticsearch --net somenet…

使用mysqldump对mysql数据库进行备份

目录 1软件说明 2语法格式 3备份流程 3.1只备份指定数据库中表和数据 3.1.1准备目录 3.1.2备份db1数据库里面的所有表信息 3.1.3还原备份 3.2备份数据库结构 3.2.1备份db1数据库的结构和数据 3.2.2还原数据库 3.3备份所有数据库 3.3.1备份数据库 3.3.2还原数据库 1…

vue3路由跳转打开新页面

Vue3 路由跳转打开新页面的方法 在 Vue3 中,有几种方法可以实现路由跳转时打开新页面: 1. 使用 router.resolve 方法 import { useRouter } from vue-routerconst router useRouter()const openNewPage (path) > {const resolved router.resolv…

SeaTunnel 社区 2 项目中选“开源之夏 2025”,探索高阶数据集成能力!

Apache SeaTunnel 社区在“开源之夏 2025”中再传捷报,共有两个项目成功入选,聚焦于 Flink CDC schema 支持与元数据管理的生态扩展方向,体现出 SeaTunnel 在实时数据集成和平台化能力构建上的深入布局。 中选项目与学生如下: 《…

Neo4j无法建立到 localhost:7474 服务器的连接出现404错误

一、确认中文路径问题(核心原因) 安装路径包含中文,可能导致 Windows 命令行或 Neo4j 解析路径时出错。 解决方法: 重新安装 Neo4j 到英文路径(推荐): 将 Neo4j 解压或安装到不含中文的目录&a…

锂离子电池均衡拓扑综述

锂离子电池均衡拓扑综述 一、引言 锂离子电池因其高能量密度、长循环寿命等优点,在电动汽车、储能系统等领域得到了广泛应用。然而,电池组在使用过程中,由于电池个体差异、充放电管理等因素,会出现荷电状态(SOC&…