Pytest精通指南(22)钩子函数-重复执行(pytest-repeat)


文章目录

      • 前言
      • 应用场景
      • 插件安装
      • 参数分析
      • 使用方式一:命令行
      • 使用方式二:配置文件
      • 使用方式三:装饰器


请添加图片描述

前言

pytest框架中的**重复测试(pytest-repeat)**插件的用途是允许在运行测试用例时进行多次循环,以更全面地评估代码的稳定性。

它可以帮助发现和解决潜在问题,特别是在某些场景下,自动化测试时某个用例时好时坏,为了排查这类问题,需要对用例进行重复执行。

应用场景

  • 不稳定的测试:当测试用例由于某种原因(如外部资源的不稳定性、网络延迟等)而偶尔失败时,pytest-repeat可以帮助你通过多次运行这些用例来识别和隔离这些问题。
  • 概率性测试:对于测试那些依赖于概率或随机性的功能(如抽奖活动、随机排序等),pytest-repeat允许你运行测试用例多次,从而收集更准确的统计数据和结果。
  • 性能评估:虽然pytest-repeat的主要目标不是性能测试,但它也可以用于评估在重复执行测试时系统或应用的性能。

插件安装

安装命令pip install pytest-repeat

请添加图片描述

参数分析

–count

  • 用途:指定整个测试套件应重复运行的次数。
  • 含义:当你使用这个参数时,pytest 将运行整个测试套件指定的次数,而不是仅仅重复运行失败的测试用例。
  • 源码解释:在 pytest_collection_modifyitems 钩子函数中,pytest-repeat 会根据 --count 参数的值来复制整个测试项列表,从而增加测试套件的运行次数。

–repeat-scope

  • 用途:指定重复运行的范围,可以是 sessionfunctionclass
  • 含义:这个参数决定了重复运行是应用于整个测试会话(session),还是仅应用于单个函数或类级别的测试用例。
  • 源码解释:在 pytest_collection_modifyitems 钩子函数中,pytest-repeat 会根据 --repeat-scope 参数的值来决定如何复制测试项。如果设置为 session,则整个测试套件会被复制;如果设置为 function,则只有函数级别的测试用例会被复制;如果设置为 class,则类级别的测试用例会被复制。

吐槽一下--repeat-scope参数究极迷惑,--count参数默认是绑定--repeat-scope=function的,但是由于--repeat-scope参数独立工作的,并不是按照类或模块进行分类重复执行,这里无论是否携带--repeat-scope参数,在结果上都是一致的,看网上大佬们的解读,说是体现在分组上。

使用方式一:命令行

示例代码

def test_case_01():
    assert 1 == 1, "断言失败"


def test_case_02():
    assert 1 == 2, "断言失败"


class TestClassDemo1:
    def test_case_03(self):
        assert 1 == 1, "断言失败"

    def test_case_04(self):
        assert 1 == 1, "断言失败"

执行结果

请添加图片描述

使用方式二:配置文件

pytest.ini配置文件

[pytest]
addopts = -v -s --count 2

示例代码

def test_case_01():
    assert 1 == 1, "断言失败"


def test_case_02():
    assert 1 == 2, "断言失败"


class TestClassDemo1:
    def test_case_03(self):
        assert 1 == 1, "断言失败"

    def test_case_04(self):
        assert 1 == 1, "断言失败"

执行结果

请添加图片描述

使用方式三:装饰器

示例代码

import pytest


@pytest.mark.repeat(2)
def test_case_01():
    assert 1 == 1, "断言失败"


def test_case_02():
    assert 1 == 2, "断言失败"


@pytest.mark.repeat(2)
class TestClassDemo1:
    def test_case_03(self):
        assert 1 == 1, "断言失败"

    def test_case_04(self):
        assert 1 == 1, "断言失败"

执行结果

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年开通最新版云开发cms步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方有改版了,搞得石头哥不得不紧急的再新出一版,教大家开通最新版的cms网页管理后台 一,技术选型和技术点 1,小程序前端 wxml css JavaScript MINA原生小程序框架 2,数据库 云开发 云数据库 云…

中毒的电脑插U盘也会中毒吗?U盘中毒了不显示数据怎么办

随着数字技术的快速发展,U盘作为数据存储和传输的重要工具,广泛应用于我们的日常生活和工作中。然而,U盘在带来便利的同时,也带来了潜在的安全风险。当一台中毒的电脑插入U盘时,U盘是否也会被感染?如果U盘中…

PHP 爬虫如何配置代理 IP(CURL 函数)

在 PHP中 配置代理IP&#xff0c;可以通过设置 CURL 库的选项来实现&#xff0c;代码如下&#xff1a; 当然你要有代理ip来源&#xff0c;比如我用的这个 代理商 &#xff0c;如果想服务稳定不建议找开源代理池&#xff0c;避免被劫持。 <?php // 初始化cURL会话 $ch cu…

C++中的stack(容器适配器)

目录 一、成员函数 一、构造函数 二、入栈 三、出栈 四、判空 empty () 五、栈大小 size 六、取栈顶元素 top 七、入栈 emplace 八、交换函数 swap 二、非成员函数重载 一、关系运算符重载 二、交换函数 C中的stack不再是容器&#xff0c;而是容器适配器 注意&a…

[InternLM训练营第二期笔记]4. XTuner 微调 LLM:1.8B、多模态、Agent

该系列是上海AI Lab举行的书生 浦语大模型训练营的相关笔记部分。 该笔记是第四节课&#xff0c;学习大语言模型微调的基本概念&#xff0c;以及利用XTuner工具进行微调。 0. 什么是LLM中的微调 0.1 两种Finetune范式 微调的目的是为了让foundation模型在特定的领域更好地发挥…

力扣练习题(2024/4/18)

1不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足&#xff1a; nums1[i] nums2[j]且绘制的直线不与任何其他连线&#xff08;非水平线…

mysql按季度统计数据

最近遇到按表里得交付时间换成季度取统计&#xff0c;如下&#xff1a; select sp.Id,sp.title,QUARTER(sp.expected_delivery_time) dateStr,CONCAT(DATE(MIN(sp.expected_delivery_time)),至,DATE(MAX(sp.expected_delivery_time))) dateStr2,sp.DemandType,sp.IndustryGrou…

【人工智能基础】状态空间搜索

状态空间法 状态空间&#xff1a;一个问题全部可能的状态以及其关系的集合。 状态空间图&#xff1a;以图的形式表示问题的状态空间&#xff0c;节点对应状态&#xff0c;边对应状态转移算子&#xff0c;边上的权对应转移所需的代价 问题的解&#xff1a;是从最开始状态到目…

BP使用和弱口令漏洞

目录 一、BP使用 1.BP设置 2.Proxy 3.Reapter 4.Decord 5.Intruder 二、弱口令爆破 1.服务弱口令爆破 2.验证码绕过 一、BP使用 1.BP设置 设置代理的监听端口: 这里设置为本机的9090端口 2.Proxy 浏览器要挂代理&#xff0c;设置为本机的9090端口 打开拦截功能 当浏览…

Youtube DNN

目录 1. 挑战 2. 系统整体结构 3.召回 4. 排序 5. 训练和测试样本的处理 1. 挑战 &#xff08;1&#xff09;规模。很多现有的推荐算法在小规模上效果好&#xff0c;但Youtobe规模很大。 &#xff08;2&#xff09;新颖度。Youtobe语料库是动态的&#xff0c;每秒都会有…

Windows如何安装JDK

JDK和JRE简介 JDK&#xff1a;Java Development ToolKit java开发工具包&#xff0c;包含JRE针对java程序开发者 JRE&#xff1a;Java Runtime Environment java程序的运行环境针对java使用者来说 下载JDK&#xff0c;进入官网下载 Oracle官网 双击下载好之后的exe文件&#…

关于Python中install edge_tts记录

如下代码&#xff1a; #!/usr/bin/env python3""" Basic audio streaming example.This example shows how to stream the audio data from the TTS engine, and how to get the WordBoundary events from the engine (which could be ignored if not needed).…

分保、等保、关保、密评之间联系与区别

分保、等保、关保、密评之间联系与区别 什么是“三保一评”分保等保关保密评 相关的法律法规依据分保等保关保密评 分保工作简介分保工作流程分级保护技术要求 等保工作简介关保工作简介密评工作简介三保一评联系与区别 什么是“三保一评” 分保 涉密信息系统分级保护 指涉密信…

vivado 存储器校准调试

存储器校准调试 Vivado 中的存储器接口 IP 支持校准调试。其中存储有实用的核配置、校准和数据窗口信息 &#xff0c; 可在 Vivado 硬件管理器 中访问这些信息。“存储器校准调试 (Memory Calibration Debug) ”可随时用于读取此信息 &#xff0c; 并从存储器接口 IP 中获…

Linux命令学习—Iptables 防火墙(上)

1.1、防火墙 1、防火墙的定义 所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上 构造的保护屏障.是一种获取安全性方法的形象说法&#xff0c;它是一种计算机硬件和软件的结合&#xff0c;使 Internet 与 Intranet 之间建立起…

LeetCode216:组合总和Ⅲ

题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 解题思想 使用回溯算法 代码 class So…

代理IP对网络爬虫有什么影响?

代理IP对网络爬虫的影响深远且多方面&#xff0c;主要体现在以下几个方面&#xff1a; 第一点&#xff0c;代理IP能有效防止爬虫IP被封禁&#xff1a;在爬虫工作过程中&#xff0c;如果频繁访问同一目标网站&#xff0c;很容易被该网站的服务器识别为恶意行为&#xff0c;导致…

【大数据】Apache Knox 概述

Apache Knox 概述 1.概述1.1 Kerberos 封装1.2 简化客户端证书的管理1.3 Apache Ranger 集成1.4 Hadoop URLs VS Knox URLs 2.自定义 Apache Knox2.1 Topology2.2 Provider2.3 Services2.4 Personalized services 3.Tips3.1 Setting up SSL3.2 常见问题3.2.1 Bulky answer3.2.2…

【JavaSE】JDK17的一些特性

前言 从springboot3.0开始&#xff0c;已经不⽀持JDK8了 选⽤Java17&#xff0c;概括起来主要有下⾯⼏个主要原因 JDK17是LTS(⻓期⽀持版)&#xff0c;可以免费商⽤到2029年。⽽且将前⾯⼏个过渡版&#xff08;JDK9-JDK16&#xff09; 去其糟粕&#xff0c;取其精华的版本JDK17…

hbase基础(二)

HBase第二天 名称空间 namespace&#xff1a;名称空间默认hbase有两个名称空间&#xff0c;default、hbasedefault名称空间是默认创建表的位置&#xff0c;hbase是专门存放系统表的名称空间&#xff08;namespace、meta&#xff09;管理命名空间指令 create_namespace 命名空…
最新文章