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

pytest 基础

pytest安装

安装 pip install -U pytest

验证安装 pytest --version

约束:

所有的测试文件名都需要满足test_ *.py格式或* _test.py格式。

测试文件中的测试类以Test_开头,并且不能带有 init 方法。

测试类中可以包含一个或多个test_开头的函数。

步骤:编写测试用例、执行测试用例、输出测试报告

import pytest   #文件名test_try.py
class Test_py:def test_01(self):print('test001')def test_02(self):print('test002')

pytest的main方法

  • 直接执行pytest.main()

    • 自动查找当前目录下,以test_开头的文件或者以_test结尾的py文件;
  • 设置pytest的执行参数

    • pytest.main([‘–html=./report.html’,‘test_login.py’])
    • 执行test_login.py文件,并生成html格式的报告。
  • main()括号内可传入执行参数和插件参数,通过[]进行分割,[]内的多个参数通过‘逗号,’进行分割:

    • 运行目录及子包下的所有用例 pytest.main([‘目录名’])

    • 运行指定模块所有用例 pytest.main([‘test_reg.py’])

    • 运行指定模块指定类指定用例 pytest.main([‘test_reg.py::TestClass::test_method’]) 冒号分割

-m=xxx: 运行打标签的用例

–lf :运行上次失败的用例 last failure

–ff:运行上次的用例,先执行上次失败的 failed first

-reruns=xxx:失败重新运行 !!!

-q: 安静模式, 不输出环境信息

-v: 丰富信息模式, 输出更详细的用例执行信息 用例所在文件和用例名称

-s: 显示程序中的调试信息 比如print/logging输出

–junitxml=./log.xml 生成xml报告

-k:执行用例包含关键字的用例,关键字用双引号 pytest -k “2” .\shishi\test_assert.py

-x: 执行失败就停止执行,之后的用例不被执行

1.运行指定案例:

if __name__ == '__main__':pytest.main(["-v","-s","test_1214.py"])

2.运行当前文件夹包括子文件夹所有用例:

if __name__ == '__main__':pytest.main(["-v","-s","./"])

3.运行指定文件夹(code目录下所有用例):

if __name__ == '__main__':pytest.main(["-v","-s","code/"])

4.运行模块中指定用例(运行模块中test_add用例):

if __name__ == '__main__':pytest.main(["-v","-s","test_pytest.py::test_add"])

5.执行失败的最大次数

使用表达式"–maxfail=num"来实现(注意:表达式中间不能存在空格),表示用例失败总数等于num 时停止运行。

if __name__ == '__main__':pytest.main(["-v","--maxfail=2","test_pytest.py::test_add"])

6.错误信息在一行展示

在实际项目中如果有很多用例执行失败,查看报错信息将会很麻烦。使用"–tb=line"命令。

if __name__ == '__main__':pytest.main(["-v","--tb=line","test_pytest.py::test_add"])

7.运行打标签的用例 函数前加@pytest.mark.biaoqian ,biaoqian是标签名 使用“-m=xxxxx”命令,只执行带有标签的用例

import pytest    #导入pytest包
str = "PHP/JAVA/PYTHON"
@pytest.mark.biaoqian
def test_in1():assert "PH" in str   #true
def test_in2():assert  "PI" in str #false
def test_is1():assert "PHP/JAVA/PYTHON" is str  #true
@pytest.mark.biaoqian
def test_is2():assert "PHP" is str  #false
if __name__ == '__main__':pytest.main(['-v','-m=biaoqian','test_assert.py'])

8.执行失败就停止执行 使用-x

if __name__=='__main__':pytest.main(['-v','-x','test_assert.py'])

9.执行上次执行中失败的用例 使用 --lf

if __name__=='__main__':pytest.main(['-v','--lf','test_assert.py'])

10.执行上次执行的用例,先执行失败的 使用 --ff

if __name__=='__main__':pytest.main(['-v','--ff','test_assert.py'])

断言方法

pytest断言主要使用Python原生断言方法,主要有以下几种:

  • assert xx:判断 xx 为真
  • assert not xx:判断 xx 不为真
  • assert a in b:判断 b 包含 a (实际结果包含预期结果)
  • assert a == b:判断 a 等于 b (内容和类型必须同时满足相等)
  • assert a !=b:判断 a 不等于 b
  • assert a is b 判断a和b是相等的 (断言前后两个值相等)

测试用例的执行

  • 使用命令行执行指定文件

    cmd中执行 pytest test_try.py

    cmd中执行pytest 执行当前文件夹下所有test_或者_test的文件

  • 使用命令行执行文件的制定方法

    cmd中执行 pytest test_try.py::Test_py::test_01 文件名::类名::方法名

跳过用例的执行

  • @pytest.mark.skipif(condition,reason=“xxx”)
    • condition 跳过的条件,reason为原因必填
  • @pytest.mark.skip()
import pytest    #导入pytest包
@pytest.mark.skip()
def test_001():      #函数以test_开头print("test_001")
@pytest.mark.skipif(1==1,reason="tiaoguo222")
def test_002():print("test_002")
if __name__=='__main__':pytest.main(['-v','test_0102.py'])

标记为预期失败的用例

  • @pytest.mark.xfail(condition,reason=“xxx”)
    • condition预期失败的条件,reason为原因必填
    • xfail如果pass就是xpass,如果fail就是xfail
import pytest    #导入pytest包
str = "PHP/JAVA/PYTHON"
@pytest.mark.xfail()
def test_in1():assert "PH" in str   #true
def test_in2():assert  "PI" in str #false
def test_is1():assert "PHP/JAVA/PYTHON" is str  #true
@pytest.mark.xfail(1==1,reason="shibai is2")
def test_is2():assert "PHP" is str  #false
if __name__=='__main__':pytest.main(['-v','test_assert.py'])   
#结果 xpass fail pass xfail

参数化

  • @pytest.mark.parametrize(argnames,argvalues) 参数名,参数值
  • @pytest.mark.parametrize(“a”,[3,6])单参数
    • 参数值多个,测试方法就运行多个。如上,运行两次
  • @pytest.mark.parametrize(“a,b”,[(1,2),(0,3)])多参数
import pytest    
class Test_parametrize:@pytest.mark.parametrize('a,b',[(1,3),(2,4)])def test_aaa(more,a,b):     print("输出两个值:",a,b)@pytest.mark.parametrize("x",[1,2])def test_bbb(self,x):print("输出值:",x)
if __name__=='__main__':pytest.main(['-v','-s','test_parametrize.py'])

执行标记的用例多次

  • @pytest.mark.repeat(n) 执行当前用例 n 次 然后继续往下执行其他用例
import pytest
@pytest.mark.repeat(5)
def test_001():print("test_001")
if __name__=='__main__':pytest.main(['-v','test_repeat.py'])

设置用例执行的顺序

  • @pytest.mark.last–最后一个执行
  • @pytest.mark.run(order=1)—第几个执行
import pytest
@pytest.mark.run(order=1)
def test_001():print("test_001")
@pytest.mark.last()
def test_002():print("test_002")
@pytest.mark.run(order=2)
def test_003():print("test_003")
if __name__=='__main__':pytest.main(['-v','test_ordering.py'])

生成测试报告

  • html报告 ‘–html=./test_para.html’
  • xml报告 ‘–junit-xml=./test_para.xml’
if __name__=='__main__':pytest.main(['-v','-s','--junit-xml=./test_para.xml','test_parametrize.py'])#pytest.main(['-v','-s','--html=./test_para.html','test_parametrize.py'])

相关文章:

pytest 基础

pytest安装 安装 pip install -U pytest 验证安装 pytest --version 约束: 所有的测试文件名都需要满足test_ *.py格式或* _test.py格式。 测试文件中的测试类以Test_开头,并且不能带有 init 方法。 测试类中可以包含一个或多个test_开头的函数。 步骤…...

软测入门(七)python操作数据文件(Json、yaml、csv、excel、xml)

python操作文件 txt文件 read() : 读取所有readline() : 读取一行readlines() : 读取所有,且以行为单位,放入list列表中 file open(r"F:\abc.txt", "r", encoding"utf-8") # 以utf-8格式读取文件 # 读取所有 # print…...

【小程序】django学习笔记1

网页能用,不知道小程序能不能用。应该能吧。。。。。创建django程序文件包,xxx处是给该文件夹起个名django-admin startproject xxx一个project是由很多个app(小应用)组成的在文件夹目录下创建一个app,xxx处给该app起个…...

MySQL常用函数整理

MySQL常用函数整理sql函数分类一、流程控制1、判断值为null或空字符串2、IF函数3、IFNULL函数4、CASE函数(1) 相当于switch case的作用(2) 相当于if elseif的作用5、COALESCE函数二、字符串类(GBT答案)1、用于select、insert等子句中2、用于where子句中其…...

设计模式—“组件协作”

现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。 典型模式有:Template Method、Observer、Strategy 一、Template Method 动机 在软件构建过程中,对于某一…...

vue里使用driver.js实现项目功能向导指引

介绍 https://github.com/kamranahmedse/driver.js driver.js 是一个轻量级、无依赖的原生JavaScript引擎,在整个页面中驱动用户的注意力,强大的、高度可定制的原生JavaScript引擎,无外部依赖,支持所有主流浏览器。 安装 npm …...

详解JAVA类加载

目录 1.概述 2.双亲委派 3.ServiceClassLoader 4.URLClassLoader 5.加载冲突 1.概述 概念: 类加载器(Class Loader)是Java虚拟机(JVM)的一个重要组件,负责加载Java类到内存中并使其可以被JVM执行。类…...

高斯分布、高斯混合模型、EM算法详细介绍及其原理详解

相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解决策树算法和CART决策树算法详细介绍及其原理详解线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算法详细…...

[Linux入门篇]一篇博客解决C/C++/Linux System Call文件操作接口的使用

目录 0.前言 1.C / C ->文件操作 1.1 C语言文件操作 1.1.1 C语言文件打开/关闭/写入 1.1.2 C语言文件的追加操作 1.1.3 C语言文件的读取 1.2 C语言文件操作 1.2.1 C文件打开 / 关闭 / 写入 1.2.2 C文件读取 1.2.3 文件追加 2.三个默认输入输出流 2.1 C语言中的三…...

数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组

去重删除有序数组中的重复项题目来自:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/题目描述给你一个 升序排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数…...

FPGA实现模拟视频BT656解码 TW2867四路PAL采集拼接显示 提供工程源码和技术支持

目录1、前言2、模拟视频概述3、模拟视频颜色空间4、逐行与隔行5、BT656数据与解码BT656数据格式BT656数据解码6、TW2867芯片解读与配置TW2867芯片解读TW2867芯片配置TW2867时序分析7、设计思路与框架8、vivado工程详解9、上板调试验证10、福利:工程代码的获取1、前言…...

【建议收藏】超详细的Canal入门,看这篇就够了!!!

概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部…...

KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.02.17-2023.…...

查漏补缺3月

SPI扩展序列化方式 分布式ID的相关问题 TCP的流量控制,避免浪费网络资源的滑动平均法也可以用在其他可能会出现资源浪费的情况等 讲一讲对自己这个 RPC 项目的想法,你是怎么设计这个项目的,想要实现那些功能? 你认为一个好的 RPC…...

如何使用Java实现类似Windows域登录

什么是域登录? 域登录是一种集中式身份验证和授权方法,用于访问企业内部网络和资源。在Windows环境中,域是一组计算机和用户帐户的集合,受到单个安全管理的控制。域登录允许用户在访问域资源时使用单个帐户名和密码进行身份验证&…...

生成模型与判别模型

生成模型与判别模型 一、决策函数Yf(X)或者条件概率分布P(Y|X) 监督学习的任务就是从数据中学习一个模型(也叫分类器),应用这一模型,对给定的输入X预测相应的输出Y。这个模型的一般形式为决策函数Yf(X)或者条件概率分布P(Y|X)。 …...

Kotlin lateinit 和 lazy 之间的区别 (翻译)

Kotlin 中的属性是使用var或val关键字声明的。Late init 和 lazy 都是用来初始化以后要用到的属性。 由于这两个关键字都用于声明稍后将要使用的属性,因此让我们看一下它们以及它们的区别。 Late Init 在下面的示例中,我们有一个变量 myClass&#xff0…...

Golang alpine Dockerfile 最小打包

最近在ubantu 上进行了 iris项目的alpine 版本打包&#xff0c;过程遇到了一些问题&#xff0c;记录一下。 golang版本 &#xff1a;1.18 系统&#xff1a;ubantu 代码结构 Dockfile内容 FROM alpine:latest MAINTAINER Si Wei<3320376695qq.com> ENV VERSION 1.1 ENV G…...

在NVIDIA JetBot Nano小车上更新WIFI驱动

前言:树莓派上的WIFI驱动类型比较多&#xff0c;经常有更好驱动的需求本文给出RealTek的无线WIFI模组&#xff0c;8821CU的驱动更新办法步骤第一 通过其他方式连接网络小车通过网线或者老的WIFI连接到网络上第二 构建驱动模块并下载驱动首先&#xff0c;我们需要打开一个ubuntu…...

2023年网络安全最应该看的书籍,弯道超车,拒绝看烂书

学习的方法有很多种&#xff0c;看书就是一种不错的方法&#xff0c;但为什么总有人说&#xff1a;“看书是学不会技术的”。 其实就是书籍没选对&#xff0c;看的书不好&#xff0c;你学不下去是很正常的。 一本好书其实不亚于一套好的视频教程&#xff0c;尤其是经典的好书…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...