【自动化测试】Pytest框架 —— 跳过测试和失败重试

news2024/11/23 21:08:30

1、Pytest跳过测试用例

自动化测试执行过程中,我们常常出现这种情况:因为功能阻塞,未实现或者环境有问题等等原因,一些用例执行不了, 如果我们注释掉或删除掉这些测试用例,后面可能还要进行恢复操作,这时我们就可以配置跳过这些用例。

Pytest测试框架中存在两个跳过测试的方法:skipskipif

(1)无条件跳过skip

skip方法为无条件跳过测试用例。

使用方法:@pytest.mark.skip标记在需要跳过的测试用例上。

(2)有条件跳过skipif

skipif方法为有条件跳过测试用例,条件为真跳过。

使用方法:@pytest.mark.skipif(condition=跳过的条件, reason=跳过的原因),

标记在需要符合条件跳过的测试用例上。

  • 参数condition:跳过的条件,为True则跳过测试,为False则继续执行测试,默认为True。
  • 参数reason:标注跳过的原因,必填参数。

(3)练习

"""
1.学习目标
    掌握pytest中跳过测试方法
2.操作步骤
    skipif(condition=判断条件,reason=跳过原因)
    使用时放置在需要跳过的用例之前
    @pytest.mark.skipif(条件,原因)  # 当条件为真,跳过执行
3.需求
"""
# 导入pytest
import pytest


# 编写测试用例
def login_data():
    return "jerry", "123456"


# 无条件跳过
@pytest.mark.skip
def test_register():
    """注册用例"""
    print("注册步骤")
    assert False


# 当条件为真,跳过测试
@pytest.mark.skipif(login_data()[0] == "jerry", reason="jerry用户不存在")
def test_login():
    """不记住密码登录"""
    username = login_data()[0]
    password = login_data()[1]
    print(f"输入用户名{username}")
    print(f"输入密码{password}")
    print("点击登录按钮")
    assert username == "jerry"


def test_shopping():
    """购物下单"""
    print("购物流程")
    assert True


if __name__ == '__main__':
    pytest.main()

"""
执行结果:跳过一个用例 : 1通过,2跳过

test_pytest_01.py::test_register 
test_pytest_01.py::test_login 
test_pytest_01.py::test_shopping 

======================== 1 passed, 2 skipped in 0.04s =========================

Process finished with exit code 0
SKIPPED (unconditional skip)
Skipped: unconditional skip
SKIPPED (jerry用户不存在)
Skipped: jerry用户不存在
购物流程
PASSED
"""
# 注:跳过的用例测试结果标识为s

2、Pytest失败重试

Pytest失败重试就是,在执行一次测试脚本时,如果一个测试用例执行结果失败了,则重新执行该测试用例。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

前提:

Pytest测试框架失败重试需要下载pytest-rerunfailures插件。

安装方式:pip install pytest-rerunfailures

Pytest实现失败重试的方式:

方式一:在命令行或者main()函数中使用

pytest.main(['-vs','test_a.py','--reruns=2'])(这种方式没有实现成功,可能自己环境的问题)

或者:

pytest -vs ./test_a.py --reruns 2 --reruns-delay 2(可以)

表示:失败重试2次,在每次重试前会等到2秒。

说明: reruns为重跑次数,reruns_delay为间隔时间,单位s

方式二:在pytest.ini配置文件中使用(推荐)

pytest.ini配置文件中addopts添加reruns重试参数

[pytest]
addopts = -s --reruns 2 --reruns-delay 2
testpaths = scripts
python_files = test_01.py
python_classes = Test*
python_functions = test*

示例:使用第二种方式:

"""
1.学习目标
    掌握pytest中用例失败重试方法
2.操作步骤
    2.1 安装 pytest-rerunfailures
        pip install pytest-rerunfailures
    2.2 使用 在pytest.ini文件中,添加一个命令行参数  
        --reruns n # n表示重试次数
3.需求
"""
# 1.导入pytest
import pytest


# 2.编写测试用例
@pytest.mark.run(order=2)
def test_login():
    """登录用例"""
    print("登录步骤")
    assert "abcd" in "abcdefg"


@pytest.mark.run(order=1)
def test_register():
    """注册用例"""
    print("注册步骤")
    assert False


@pytest.mark.run(order=4)
def test_shopping():
    """购物下单"""
    print("购物流程")
    assert True


@pytest.mark.run(order=3)
def test_cart():
    """购物车用例"""
    print("购物车流程")
    assert True


if __name__ == '__main__':
    pytest.main(['-vs', 'test_01.py', '--reruns=2'])

# pytest ./pytest_demo/test_01.py --reruns 10 --reruns-delay 1
#
"""
执行结果:注意有两个:2 rerun
==================== 1 failed, 3 passed, 2 rerun in 0.09s =====================

test_01.py::test_register 注册步骤
RERUN
test_01.py::test_register 注册步骤
RERUN
test_01.py::test_register 注册步骤
FAILED
pytest_demo\test_01.py:20 (test_register)
@pytest.mark.run(order=1)
    def test_register():
        ""注册用例""
        print("注册步骤")
>       assert False
E       assert False

test_01.py:25: AssertionError
登录步骤
PASSED购物车流程
PASSED购物流程
PASSED
"""

注意:如果设置失败重试5次,在重试的过程中成功了,就不用全部跑完5次重试,这里需要注意一下。 

END今天的分享就到此结束了,点赞关注不迷路

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

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

相关文章

NSSCTF第11页(3)

[羊城杯 2020]easyphp 源码 发现会在写入文件之前会删除目录下的除了index.php的文件。写入文件的文件名和文件内容也是可控的,只不过存在过滤 stristr函数对文件内容进行过滤,该函数绕过还是简单的,只需要添加一些特殊字符就可以了&#…

2013年108计网

第33题 在 OSI 参考模型中, 下列功能需由应用层的相邻层实现的是()A. 对话管理B. 数据格式转换C. 路由选择D. 可靠数据传输 很显然,题目所问的应用层的相邻层是表示层。该层实现与数据表示相关的功能。选项a中的对话管理属于会话层。选项c中的路由选择属于网络层。…

U-Mail信创邮件系统解决方案

近年来,在国家政策的大力引导和自身数字化转型需求驱动下,国产化成为国内数字化发展道路上的关键词,企业不断加强自主创新能力,进行信创建设,实现软硬件系统国产化替代,已成为大势所趋。邮件系统作为企业管…

Python编程:从入门到实践 (项目3—Web应用程序—学习问题汇总)(新手避坑必看)

本人系统环境: WIN10系统 Python 3.9 Django 2.1.5 书本环境: Python 3.x Django 1.8.5 基于Django 开发一个名为“学习笔记”的项目,这是一个在线的日志系统,能够记录所学习的有关特定主题的知识。 建立项目 要编写一个名为“…

vscode文件跳转(vue项目)

在 .vue 文件中,点击组件名打开 方式1: 在 vue 组件名上,桉住ctrl 鼠标左键 // 重新打开一个tab 方式2: 在 vue 组件名上,桉住ctrl shift 鼠标左键 // 在右侧拆分,并打开一个tab .vue文件的跳转 按住 …

el-date-picker精确到分钟

0 效果 1 代码 使用format、value-format属性格式化即可 :clearable“false” // 取消删除图标 注意: format:“yyyy-MM-dd HH:mm” 小时默认是从00:00开始 format:“yyyy-MM-dd hh:mm” 小时默认是从12:00开始

ElasticSearch的文档、字段、映射和高级查询

1. 文档(Document) 在ES中一个文档是一个可被索引的基础信息单元,也就是一条数据 比如:你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON&…

java通过FTP跨服务器动态监听读取指定目录下文件数据

背景: 1、文件数据在A服务器(windows)(不定期在指定目录下生成),项目应用部署在B服务器(Linux); 2、项目应用在B服务器,监听A服务器指定目录,有新…

UI设计软件有哪些好用和免费的吗?

在我们分享五个有用的原型工具之前,完成原型,将优化界面,这次是UI设计师的任务,UI设计软件对设计师非常重要,UI设计工具是否使用直接影响最终结果,然后有人会问:UI界面设计使用什么软件&#xf…

2021年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 Python 中函数不包括? A:标准函数 B:第三库函数 C:内建函数 D&#xf…

如何判断被DDoS攻击

当网络和设备正常的情况下,服务器突然出现连接断开、访问卡顿、用户掉线等情况;服务器CPU或内存占用率出现明显增长;网络出入流量出现明显增长;网站或应用程序突然出现大量的未知访问;登录服务器失败或者登录过慢等等。以上是最为常见的服务器被 DDoS攻击后出现的几…

【赠书第2期】嵌入式虚拟化技术与应用

文章目录 前言 1 背景概述 2 专家推荐 3 本书适合谁? 4 内容简介 5 书籍目录 6 权威作者团队 7 粉丝福利 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展,虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式…

鸿蒙开发工具的汉化

1、下载汉化包 汉化插件下载地址:Chinese (Simplified) Language Pack / 中文语言包 - IntelliJ IDEs Plugin | Marketplace 百度网盘下载地址:链接:百度网盘 请输入提取码 DevEco Studio是基于IDEA223版本,下载汉化包时请注意…

【经验模态分解】2.EMD的3个基本概念

/*** poject 经验模态分解及其衍生算法的研究及其在语音信号处理中的应用* file EMD的3个基本概念* author jUicE_g2R(qq:3406291309)* * language MATLAB/Python/C/C* EDA Base on matlabR2022b* editor Obsidian(黑曜石笔记软件…

JVM之jinfo虚拟机配置信息工具

jinfo虚拟机配置信息工具 1、jinfo jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机的各项参数。 使用jps -v 可以查看虚拟机启动时显示指定的参数列表,但是如果想知道未被显示指定的参数的系统默认值,除 …

SpringBoot测试类启动web环境-下篇

一、响应状态 1.MockMvcResultMatchers 说明:模拟结果匹配。 package com.forever;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoC…

数据分析实战 | 多元回归——广告收入数据分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型构建 八、模型预测 九、模型评价 一、数据及分析对象 CSV格式的数据文件——“Advertising.csv” 数据集链接:https://download.csdn.net/d…

Jmeter 性能压测 —— 混合场景

性能测试,单场景的目的一般是为了发现缺陷、发现瓶颈。 完成所有单个重点场景的性能测试之后,还需要做一个混合场景的性能测试-评估系统整体性能。 1、场景设计 使用Jmeter 做混合场景设计 在一个测试计划,将每个重点测试场景各创建为一个…

第五章:人工智能深度学习教程-人工神经网络(第一节-人工神经网络及其应用)

当您阅读这篇文章时,您体内的哪个器官正在思考这个问题?当然是大脑啦!但你知道大脑是如何运作的吗?嗯,它有神经元或神经细胞,它们是大脑和神经系统的主要单位。这些神经元接收来自外界的感觉输入并进行处理…