Pytest系列-快速入门和基础讲解(1)

news2025/1/8 21:38:24

前言

  • 目前有两种纯测试的测试框架,pytestunittest
  • unittest应该是广为人知,而且也是老框架了,很多人都用来做自动化,无论是UI还是接口
  • pytest是基于unittest开发的另一款更高级更好用的单元测试框架

单元测试框架介绍

  • 单元测试框架是在自动化测试或者白盒测试中对软件的最小单元(函数、方法)进行测试的框架
  • 单元测试框架的分类:python(unitest、pytest)、Java(Testing(主流)、Junit)
  • 单元测还框架主要做什么
    • 发现测试用例
    • 执行测试用例
    • 判断测试结果
    • 生成测试报告

为什么要用Pytest

pytest 的官方网站介绍,它具有如下特点:
1、非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
2、能够支持简单的单元测试和复杂的功能测试
3、支持参数化
4、执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
5、支持重复执行(rerun)失败的 case
6、支持运行由 nose, unittest 编写的测试 case
7、可生成 html 报告
8、方便的和持续集成工具 jenkins 集成
9、可支持执行部分用例
10、具有很多第三方插件,并且可以自定义扩展

Pytest安装、简介以及常用插件安装

Pytest安装

cmd运行

pip install -U pytest

pip3 install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

pycharm 直接安装
在这里插入图片描述

查看版本

pytest --version

Pytest简介及常用插件安装

pytest官方文档 : https://docs.pytest.org/en/latest/contents.html

在这里插入图片描述
步骤:打开Pycharm,在项目根路径下面 创建一个.txt的文件夹,将要安装的插件放进去 (注:使用此方法是在虚拟环境安装 DOS环境会安装不成功
在这里插入图片描述
打开控制台 输入安装语句 进行安装:
在这里插入图片描述
上面方法可能安装不成功,直接在terminal 单个安装也可以
在这里插入图片描述

Pytest 默认测试用例的规则以及基础应用

Pytest 用例设计的规则

用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的
1、文件名必须以test_.py 文件开头和test.py结尾
2、以 test
开头的函数
3、以 test 开头的类,且不能包含 _ _ init_ _ 方法
4、以 test_ 开头的类里面的方法
5、所有的包 package 必须要有__init__.py 文件

Pytest执行基础应用

    **执行:Alt+Enter自动导报**

1、通过命令行执行方式执行,再terminal 和 cmd 中 直接执行。

pytest  			执行某个目录下所有的用例
pytest 脚本名称.py	执行某一个 py 文件下用例

执行参数:
(1)运行start.py 模块里面的某个函数,或者某个类,某个类里面的方法
-v 和不加 -v 都可以,加 -v 的话,打印的信息更详细

pytest -v 08_mark.py::TestClass::test_method

pytest 08_mark.py::TestClass::test_method

pytest test.py::test_answer

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

pytest start.py::TestClass::test_two

(3) -m 标记表达式(先了解)

 pytest -m login

将运行用 @pytest.mark.login 装饰器修饰的所有测试
(4)-q 简单打印,只打印测试用例的执行结果

在这里插入代码片
pytest -q test.py

(5)-s 详细打印 (输出调试信息)

 pytest -s test.py

(6)-x 遇到错误时停止测试

 pytest test.py -x

(7)—maxfail=num,当用例错误个数达到指定数量时,停止测试

 pytest test.py --maxfail=1

(8)-k 匹配用例中包含某个字符串的名称
执行测试用例名称包含http的所有用例

pytest -s -k http test.py

(9)-k 根据用例名称排除某些用例

1 pytest -s -k "not http" start.py

(10)-k 同时匹配不同的用例名称

pytest -s -k "method or weibo" start.py

(11)-n=num 多线程运行(插件:pytest-cdist 已安装成功)

pytest  -vs -n=2     两个线程一起执行

(12)–reruns=num 失败重跑, num 是重跑的次数(插件:pytest-rerunfailres 安装成功)
一个进程里面有多个线程

raise Exception()  抛出异常
try except  解决异常

pytest -vs --reruns=2   抛出异常后重新执行两次

(13)–html 生成html报告 (插件:pytest-html 已安装成功)

pytest --vs --html ./reporters/result.html   后面是存放的位置

2、通过主函数main方式执行,直接在代码运行文件最后添加。

if __name__=='__main__';
	pytest.mian()

在项目名称下添加运行文件也可以执行:

if __name__=='__main__';
	pytest.mian(["-vs"])

3、通过配置文件pytest.ini文件执行
注意
① 一般放在项目的根目录下,名称必须是pytest.ini;

② 编码格式为 ANSI;当有中文时可能需要改变编码格式为UTF-8或GB2312 ;

③ pytest.ini文件可以改变默认的测试用例规则;

④ 不管是命令行也好还是说主函数运行也好,都会加载这个配置文件。
举例:

[pytest]        #配置文件
#参数
addopts = -vs -m "smoke" #表示 只执行smoke用例

testpaths = ./testcases  #测试用例的位置

python_files = test_*.py  #python文件名的规则,会执行对应文件的测试用例

python_classes = Test* #python文件类名的规则,对应文件会执行测试用例

python_functions = Test_*  #python文件方法名的规则,对应文件会执行测试用例
------------------------------------------------
#测试用例分组执行。有时候用例多只执行个别模块的可以对测试用例进行分组执行。
#标记
markers =
	smoke:冒烟用例
	denglu:登录
	product_manage:商品管理
	.....
#代码文件中的测试用例上面添加使用
@pytest.mark.smoke

Pycharm运行Pytest

1、首先,要去settings里面设置单元测试框架为Pytest
2、如果是nosetests的话,右键运行是以python脚本运行的
3、如果设置了unittest则是以unittest框架去运行
在这里插入图片描述
在这里插入图片描述

注意

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

Pytest跳过测试用例

无条件跳过

在测试用例上方填写代码

class Testcase@pytest.mark.skip(reason='无理由跳过')
  def test_01(self):
  		print("测试")

有条件跳过

在已有条件不满足的情况下,选择跳过

class Testcase:
  work=1
  @pytest.mark.skipif(work<1,reason="工作少于1年跳过")
  def test_01(self):
  		print("测试")

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

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

相关文章

【Arduino24】8*8点阵实验

硬件准备 8*8点阵&#xff1a;1个 旋钮电位器&#xff1a;1个 面包板&#xff1a;1块 杜邦线&#xff1a;若干 硬件连线 软件程序 //定义引脚 #define xKnob_pin A0 //x轴旋钮的引脚 #define yKnob_pin A1 //y轴旋钮的引脚 const int row_pin[8] { 6, 11, 10, 3, 17, 4…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…

playwright 录制脚本执行时出现文件编码错误 SyntaxError

playwright 录制脚本执行时出现文件编码错误 SyntaxError 问题描述&#xff1a; 使用playwright 进行脚本录制&#xff0c;录制的过程中&#xff0c;某些元素的定位方式由中文确认&#xff0c;脚本录制完成后&#xff0c;执行脚本报错&#xff0c;出现 SyntaxError: (unicode e…

无涯教程-JavaScript - BESSELK函数

描述 BESSELK函数返回修改后的Bessel函数Kn(x),该函数等效于针对纯虚参判断的Bessel函数。 这些也称为双曲贝塞尔函数。 语法 BESSELK(X, N)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.RequiredNThe order of the function. If n i…

Docker实战:docker compose 搭建Sonar

1、docker-compose-sonar文件准备 进入/home/docker目录&#xff0c;新建docker-compose-sonar.yml文件&#xff0c;内容如下&#xff1a; version: 3 services: sonar:image: sonarqube:8.9.6-communityrestart: always container_name: sonarqubevolumes:# 设置与宿主机时间…

string容器的常用操作

string容器的常用操作 一、C语言中的字符串二、string容器1、概念2、特点 三、string类对象的常见构造1、构造2、实际构造函数3、测试代码4、运行结果 四、赋值运算符1、类型2、作用3、测试代码4、运行结果 五、string类对象的容量操作1、成员函数2、测试代码3、说明4、运行结果…

第二十章 ObjectScript - 潜在的缺陷

文章目录 第二十章 ObjectScript - 潜在的缺陷 第二十章 ObjectScript - 潜在的缺陷 以下项目可能会让刚接触ObjectScript的程序员感到困惑&#xff0c;特别是那些负责维护其他程序员编写的代码的程序员: 在例程或方法中&#xff0c;除非每行包含标签&#xff0c;否则每行必须…

复制粘贴是怎么实现的

在上面的代码中&#xff0c;command 和 select 是自定义的函数。它们的作用如下&#xff1a; 实现复制粘贴的思路&#xff1a; 创建一个 textarea 标签将 textarea 移出可视区域给这个 textarea 赋值将这个 textarea 标签添加到页面中调用 textarea 的 select 方法调用 docum…

【PowerDesigner16】显示工具面板

1、点击左上角【工具】“toolbars”&#xff0c;然后【自定义工具栏】&#xff0c;选择“palette”即可显示工具栏。

MediaCodec源码分析 createByCodecName流程

前言 本文梳理MediaCodec初始化流程,即create流程,基于7.0代码。流程图如下,创建流程还是比较清晰简单的。 代码见: frameworks/base/media/java/android/media/MediaCodec.java frameworks/base/media/jni/android_media_MediaCodec.h frameworks/base/media/jni/androi…

源代码防泄密

IBM 发布年度《数据泄露成本报告》&#xff0c;显示 2023 年全球数据泄露平均成本达到 445 万美元&#xff0c;比过去 3 年增加了 15%。创下该报告的历史新高。 报告显示&#xff0c;企业在计划如何应对日益增长的数据泄露频率和成本方面存在分歧。研究发现&#xff0c;虽然 95…

Debian12系统下LAMP环境中Nubuilder4.5的安装

一、环境搭建 按照官方的说法&#xff0c;Apache2和Nginx都可以的&#xff0c;实际上&#xff0c;你最好直接按照 Mariadb\Apache2\Php8.2 这个顺序&#xff0c;搭建LAMP环境较好。不然各种调试&#xff0c;还不一定能够成功。 相关搭建方法&#xff0c;属于一般操作&#xf…

Python关键字(保留字)一览表

保留字是 Python 语言中一些已经被赋予特定意义的单词&#xff0c;这就要求开发者在开发程序时&#xff0c;不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。 Python 包含的保留字可以执行如下命令进行查看&#xff1a; >>> import keyword >…

刷题笔记16——数组的花式输出

华容道 听到面试的时候会问到华容道的问题&#xff0c;简单记录一下&#xff0c;也类似于迷宫问题&#xff0c;可以记录下空格地方所在的位置&#xff0c;华容道问题就类似于空格在整个数组中寻找一条路线&#xff08;无论我们如何移动小块&#xff0c;其实都是空格以一条路线…

ActiveReportsJs 账票印刷

参考资料 官方文档 一. HTML部分 在页面上添加了Loading效果&#xff0c;账票印刷开始时显示Loading效果&#xff0c;印刷结束后隐藏Loading效果。ar-js-core.js是核心文件ar-js-pdf.js用来印刷PDFar-js-xlsx.js用来印刷EXCELar-js-locales.js用来设置语言 <!DOCTYPE htm…

MySQL——数据类型以及对表结构的修改

MySQL的数据类型 刚才我们在创建表的时候&#xff0c;说到了一个字段类型&#xff0c;所谓的字段类型就是这个字段能存放的数据的数据类型&#xff0c;在MySQL中有以下几种数据类型&#xff1a; 数据类型 大小&#xff08;字节&#xff09; 用途 格式 INT 4 整数 FLOAT…

13 - 多线程之锁优化(中):深入了解Lock同步锁的优化方法

上一讲介绍了在 JVM 层实现的 Synchronized 同步锁的优化方法&#xff0c;除此之外&#xff0c;在 JDK1.5 之后&#xff0c;Java 还提供了 Lock 同步锁。那么它有什么优势呢&#xff1f; 相对于需要 JVM 隐式获取和释放锁的 Synchronized 同步锁&#xff0c;Lock 同步锁&#…

echarts legend如何控制标签文字长度

效果 代码&#xff0c;直接贴进去换掉就能测试 legend: {type: scroll,top: 10%,icon: circle,right: 5%,orient: vertical,formatter:(name)>{//下面三个值换一下就行let arr [{a| 科创团队 },{b| 10 个},{c| 100 %}]return arr.join( )},textStyle: { color: #C2…

java实现创建时间、修改时间自动生成

一、TbaleMetaObjectHandler package com.ybzx.zdbx.common.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Compo…

一文了解Android App Bundle 格式文件

1. Android App Bundle 是什么&#xff1f; 从 2021 年 8 月起&#xff0c;新应用需要使用 Android App Bundle 才能在 Google Play 中发布。 Android App Bundle是一种发布格式&#xff0c;打包出来的格式为aab&#xff0c;而之前我们打包出来的格式为apk。编写完代码之后&a…