Pytest用例执行的先后顺序
创始人
2024-04-25 15:31:11
0

在这里插入图片描述

[内部资源] 想拿年薪30W+的软件测试人员,这份资料必须领取~

温馨提示

「本篇约1600字,看完需3-5分钟,学习学半小时,加油!」

先看普通函数运行顺序

import pytestdef test_one():print("我是清安")def test_02():print("--02--")def test_a():print("--a--")def test_a_1():print("--a_01__")def test_01():print("--01--")

图片

可以看到,这样写,用例的运行先后顺序根据自己写的先后函数顺序进行执行的。那么写到类中呢?

import pytestclass Testcase:def test_one(self):print("我是清安")def test2(self):print("--02--")def test_a(self):print("--a--")def test_a_1(self):print("--a_01__")def test1(self):print("--01--")

图片

没有丝毫变化。

模块用例运行先后顺序

首先准备两个.py文件,名称为test_a,test_b。内容如下:

import pytestclass Test_a:def test_a1(self):print(f"我是-{__class__.__name__}-类")
import pytestclass Test_b:def test_b1(self):print(f"我是-{__class__.__name__}-类")

图片

看,是有先后顺序的。其实你也可以理解为是Pycharm已经事先排过一次顺序了,按a-z亦或者1-9这样的顺序已经排过了,因为,你在创建.py文件的时候,就已经产生了顺序,pytest只是按照特定顺序进行测试而已。

前置后置

import pytestclass Testcase():def setup(self):"""每个方法用例运行前运行"""print("---1-set---")def teardown(self):"""每个方法用例运行后运行"""print("---1-down---")def setup_class(self):"""每个 class 运行前运行(只运行一次)"""print("---2-set class---")def teardown_class(self):"""每个 class 运行后运行(只运行一次)"""print("---2-down class---")def test_02(self):print("--02--")def test_01(self):print("--01--")

图片

它会告诉你teardowm在后续准备取消了,建议改用teardowm_method,改完后再跑,就不会出现这种警告了。(「setup改setup_method以及teardowm改teardowm_method此处需自己改动」)

图片

前置后置是不计入用例的,它只会默默的奔跑。并且它不会像unittest一样根据用例的名称来自动判断执行用例的先后顺序。它有自己的方式方法。

💥注意看优先级,以及代码中的注释,setup_class先运行,并且直到代码全部跑完,teardown_class才运行,其中setup_method以及teardowm_method每个用例运行的时候前后都会运行一次。

用例先后顺序设定

这就需要用到第三方插件了

pip install pytest-ordering
import pytestclass Testcase():def setup_method(self):"""每个方法用例运行前运行"""print("---1-set---")def teardown_method(self):"""每个方法用例运行后运行"""print("---1-down---")def setup_class(self):"""每个 class 运行前运行(只运行一次)"""print("---2-set class---")def teardown_class(self):"""每个 class 运行后运行(只运行一次)"""print("---2-down class---")def setup_module(self):"""模块运行前运行(只运行一次)"""print("---3-module class---")def teardown_module(self):"""模块运行后运行(只运行一次)"""print("---3-module class---")@pytest.mark.run(order=2)def test_02(self):print("--02--")@pytest.mark.run(order=1)def test_01(self):print("--01--")

图片

如上简单的小测试,以便于了解。接下来详细说说!

源码小片段

orders_map = {'first': 0,'second': 1,'third': 2,'fourth': 3,'fifth': 4,'sixth': 5,'seventh': 6,'eighth': 7,'last': -1,'second_to_last': -2,'third_to_last': -3,'fourth_to_last': -4,'fifth_to_last': -5,'sixth_to_last': -6,'seventh_to_last': -7,'eighth_to_last': -8,
}

上述是源码中对于优先级

一个小示范

import pytestclass Testnew:@pytest.mark.seconddef testa_02(self):print("--02--")@pytest.mark.thirddef testa_03(self):print("--03--")@pytest.mark.fourthdef testa_04(self):print("--04--")@pytest.mark.firstdef testa_01(self):print("--01--")

图片

鉴于上述,运行的时候会提示一系列的信息(此处不展示),看着不爽,可以:

import pytestclass Testnew:@pytest.mark.run(order=2)def testa_02(self):print("--02--")@pytest.mark.run(order=3)def testa_03(self):print("--03--")@pytest.mark.run(order=4)def testa_04(self):print("--04--")@pytest.mark.run(order=1)def testa_01(self):print("--01--")

图片

当然上述代码中你也可以写入负数,也是可以的。

执行特定的用例

也就是前面讲过的-k参数。一起看看

import pytestclass Test_new:def test_b2(self):print("**b2**")def test_b1(self):print("**b1**")def test_a1(self):print("--a1--")def test_a2(self):print("--a2--")

图片

它可以帮助我们过滤掉一些不想运行的用例,也是一个很不错且比较常用的参数。


资源分享【这份资料必须领取~】

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...