pytest 测试框架

pytest 测试框架本篇章将讲解 pytest 测试框架的基本使用知识 从安装 到 API 方法的使用 命名方式 执行参数 参数化 前后置 固件等等做了一系列的讲解

在这里插入图片描述

简介

pytest 基于unittest封装的第三方测试框架,易学易用,兼容性非常好,支持UI自动化脚本开发,支持接口自动化脚本开发,支持持续集成jenkins,支持分布式执行,支持错误调试,支持错误重跑机制,支持allure报告框架

环境配置(安装)

  • pip install pytest —脚本开发与执行
  • pip install pytest-html—脚本运行生成测试报告
  • pip install pytest-xdist—脚本运行分布式执行

语法规则

  • pytest脚本名称命名:以test开头或test结尾
  • pytest脚本中的类名:以Test开头
  • pytest脚本中的函数/方法名:以test开头
  • pytest脚本的包中必须要有__init__.py
  • pytest脚本中的类中不允许含有构造方法__init__
  • pytest脚本作用于函数,亦可作用于类和方法
  • pytest脚本运行未设置的情况下,安装函数或类及方法的ASCII顺序执行

例子 :

image.png

  • 导包import pytest
  • 定义类/函数test
  • 断言:assert
  • 执行:pytest.main([‘test005.py’]),执行参数一定是list列表形式

执行方式

  • pytest.main(['[脚本名称]','-s']) 执行当前脚本下的用例,打印print
  • pytest.main(['[脚本名称]::脚本下的类名称::类下面的方法名称','-v']) 指定类下的方法执行用例
  • pytest.main(['[脚本名称]::脚本下的类名称', '-v','--html=report.html']) 指定测试类执行用例
  • pytest.main([__file__])#指定当前模块执行测试

执行参数

  • -s:执行print() pytest.main(['[包名]::类名','-s'])
  • -v:详细输出日志 pytest.main(['[包名]::类名::方法名称','-v'])
  • -n :指定分布式执行的次数 ‘-n’ ‘2’ pytest.main(['[包名]','-n','2'])
  • -q:安静模式,极简模式,不加载环境配置信息及日志信息,尽量与-v不要同时使用 pytest.main(['[包名]','-q'])
  • -m:标记执行,支持逻辑运算符
  • -k:标记执行 ,模糊匹配 支持逻辑运算符
  • -x:执行失败一次就终止测试
  • --maxfail=1:设置失败的最大次数
  • --rerun=2 :指定次数为两次 需要安装 pytest-rerunfailures

参数化

  • 单个参数

    @pytest.mark.parametrize('参数',['参数对应的值'])

    例子:

     @pytest.mark.parametrize('username',['admin'])---单个参数 

    image.png

  • 一组参数

    @pytest.mark.parametrize('参数1,参数2',[['参数1对应的值','参数2对应的值']])

    例子:

     @pytest.mark.parametrize('username,password',[['admin','milor123']])一组参数 

    image.png

  • 多组参数

    @pytest.mark.parametrize('参数1,参数2',[['参数1对应的值','参数2对应的值'],['参数1对应的值','参数2对应的值']])

    例子:

     @pytest.mark.parametrize('username,password',[['admin','milor123'],['lm','LiuM123']]) 

    image.png

跳过执行

  • 无条件跳过:@pytest.mark.skip(reason=‘没有理由’)
  • 有条件跳过:@pytest.mark.skipif(1<2,reason=‘当1<2时,跳过’)
  • 方法或函数内部无条件跳过:pytest.skip(msg=‘skip’)

标记执行

  • -k 模糊匹配标记 标记含有某个字符串的测试用例进行执行操作(支持逻辑运算符 and or )

    pytest.main([__file__,'-s','-k','login']) #执行用例名称中包含login的测试用例 pytest.main([__file__, '-s', '-k', 'login and index ']) #执行用例名称中包含login和index的测试用例 pytest.main([__file__, '-s', '-k', 'login or index ']) #执行用例名称中包含login或index的测试用例 
  • -m标记 设置标记,在配置文件pytest.ini 设置markers,支持设置多个标记,应用场景:冒烟测试、回归测试等,支持逻辑运算符 and or

    1、pytest.ini 放置在pytest 工作目录中,创建这个文件,编辑内容

    image.png

    2、在需要打标记的测试用例上面使用装饰器 @pytest.mark.smoke

    3、在测试执行时,输入 -m 参数进行标记执行

    提示 :如果在运行过程中出现了如下警告则是未在pytest中设置标记

    ytestUnknownMarkWarning: Unknown pytest.mark.smoke 

    代码实例:

    image.png

    参数也可以这样写:

    image.png

    image.png

前置后置

  • setup / teardown

    unittest测试框架中的前后置,在pytest兼容,function和method 功能类似于构造__init__与析构__del__

    每条测试用例执行之前均要执行一次setup

    每条测试用例执行完之后均要执行一次teardown

    适用于函数或类下的方法—测试用例

  • setup_function /teardown_function

    应用于函数中,每个测试函数执行之前进行setup初始化,执行之后进行teardown回收资源,恢复现场

  • setup_module / teardown_module

    应用于函数中,针对当前模块,所有测试函数执行之前进行setup初始化,执行之后进行teardown回收资源,恢复现场

  • setup_class / teardown_class

    应用于类中,所有测试函数执行之前进行setup初始化,执行之后进行teardown回收资源,恢复现场

  • setup_method / teardown_methon

    应用于类中,每个测试方法执行之前进行setup初始化,执行之后进行teardown回收资源,恢复现场

  • 总结:
  1. 测试场景:每条测试用例执行之前均要做的重复的动作,执行之后均要执行的重复的动作,比如:针对单个模块进行测试需要相同的前置条件时,可以适用此方法。测试登录,登录用例覆盖有10条用例,每次执行前需要打开浏览器,执行后需要关闭浏览器 setup setup_function setup_method

image.png

  1. 测试场景:所有测试用例执行时均需要某个对象dr或者某种状态session,需要持续使用,可以适用此方法,比如:测试登录之后的模块,需要登录的driver或者会话session setup_module setup_class

    image.png

固件

  • 语法 :@pytest.fixture(scope='function',name='myfix',autouse=True)
    • scope:适用的范围,默认function,支持class,method,module
    • autouse:默认值为False,设置为True,会自动执行固件装饰器
    • name:别名固件装饰器-

代码:

image.png

  • 应用场景:与前置后置用法类似,比如:UI自动化测试中的driver与资源回收,接口自动化测试中初始化与资源回收

代码演示:

image.png

  • 脚本执行模式
    1. 工具中run脚本,走main入口
    2. 命令行模式运行pytest脚本名称

pytest [脚本名称.py]::test_login -s -m smoke 指定模块下的测试用例标记执行,并打印print内容

执行顺序

从上往下依次执行,可以使用 order参数进行排序

@pytest.mark.run(order=2) @pytest.mark.run(order=1) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208149.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:14
下一篇 2026年3月19日 下午12:15


相关推荐

  • TCP/IP协议详解 卷1 Traceroute程序[通俗易懂]

    TCP/IP协议详解 卷1 Traceroute程序[通俗易懂]作用可以让我们看到IP数据报从1台主机传到另一台主机所经过的路由。比Ping程序看到更多东西优势不是所有路由器都支持RR选项。所以有些路由器上会出现不记录IP的现象。Traceroute不需要路由器具备任何特殊的功能RR选项的数据报的目的Ping服务器(主机)会将接受到的RR清单Copy回去。然后再加上回去的IP清单。这样就是X2。这会收到一些限制IP首部的空间有限,不能存放太多的IP…

    2022年6月20日
    29
  • java垃圾回收器的工作原理「建议收藏」

    java垃圾回收器的工作原理「建议收藏」出处:Sunnier深入理解java垃圾回收机制—-一、垃圾回收机制的意义  Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用

    2022年10月8日
    5
  • oracle截取字符添加数据库,oracle截取字符串前几位的方法_数据库[通俗易懂]

    oracle截取字符添加数据库,oracle截取字符串前几位的方法_数据库[通俗易懂]数据库关系的6个性质_数据库数据库关系的6个性质:1、每一列中的分量为同一类型的数据,来自同一个域;2、不同的列可出自同一个域;3、列的次序可以任意交换;4、任意两个元组不能完全相同;5、行的次序可以任意交换;6、每一个分量都必须是不可分的数据库。oracle截取字符串前几位的方法Oracle提前某数据的前几位用substr函数。如test表中数据如下:现要提取dept字段中的前两位,可用如下…

    2025年8月20日
    6
  • 进制转换(包含小数转换)

    进制转换(包含小数转换)进制转换

    2026年3月19日
    1
  • FFmpeg 4.x 从入门到精通(一)—— QT 中如何用 FFmpeg 实现软件解码

    FFmpeg 4.x 从入门到精通(一)—— QT 中如何用 FFmpeg 实现软件解码背景因为在2021年给自己定了目标和计划,学习ffmpeg,所以这篇文章是实现计划的第一步。ffmpeg众所周知,就不展开介绍了,下面给出FFmpeg4.2windowsx64lib库和头文件的下载地址(粉丝免积分下载):https://download.csdn.net/download/u012534831/14045436本文也是属于博主的入门学习总结与分享,因此我们先从ffmpeg的软解码开始,从解码到绘制,一起体验下亲自动手的快乐。本文的语言环境基于C++,界面部分是QT。

    2022年6月26日
    25
  • Generic Host Process for Win32 Services 解决之道[通俗易懂]

    Generic Host Process for Win32 Services 解决之道[通俗易懂]开机有时候会出现:GenericHostProcessforWin32Services遇到了一个问题,需要关闭。出现上面这个错误一般有三种情况。1.就是病毒。开机后会提示GenericHostProcessforWin32Services遇到问题需要关闭”“RemoteRrocedureCall(RPC)服务意外终止,然后就自动重起电脑。一般该病毒会在

    2022年10月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号