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%免费】

在这里插入图片描述

在这里插入图片描述

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...