pytest fixtures装饰器的使用和如何控制用例的执行顺序

作者:剑尊 时间:2023-04-11 22:56:09 

pytest fixtures装饰器

pytest中可以使用@pytest.fixture 装饰器来装饰一个方法,被装饰方法的方法名可以作为一个参数传入到测试方法中。可以使用这种方式来完成测试之前的初始化,也可以返回数据给测试函数。

将fixture作为函数参数

通常使用setup和teardown来进行资源的初始化,如果有这样一个场景,测试用例1需要依赖登入功能,测试用例2不需要依赖登入功能,测试用例3需要登入功能,这种场景setup,teardown无法实现,也可以使用pytest fixture功能,在这个方法前面加个@pytest.fixture装饰器,加了这个装饰器的方法可以以参数的形式传到方法里,这个方法就会先执行这个登入方法,再去执行自身的用例步骤,如果没有传入这个登入方法就不执行登入操作,直接执行已有的步骤


#!/usr/bin/env python
# _*_coding: utf-8 _*_
import pytest

@pytest.fixture()
def login():
print("这时一个登入的方法")
return ('tome', '123')

@pytest.fixture()
def operate():
print("这是登入后的操作")

def test_case1(login, operate):
print(login)
print("test_case1,需要登入")

def test_case2():
print("test_case2,不需要登入")

def test_case3(login):
print(login)
print("test_case3,需要登入")

在上面的代码中,测试用例test_case1 和test_case3 分别增加了login 方法名作为参数,pytest会发现并调用@pytest.fixture标记的login功能,运行测试结果如下:


Testing started at 10:17 ...
C:\Python\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1\helpers\pycharm\_jb_pytest_runner.py" --path C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_fixture.py
Launching pytest with arguments C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_fixture.py in C:\Users\wanwen\PycharmProjects\vigo\xuexi\20210123
============================= test session starts =============================
platform win32 -- Python 3.8.0, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: C:\Users\wanwen\PycharmProjects\vigo\xuexi\20210123
plugins: html-2.1.1, metadata-1.11.0, ordering-0.6collected 3 items

test_fixture.py 这时一个登入的方法
这是登入后的操作
.('tome', '123')
test_case1,需要登入
.test_case2,不需要登入
这时一个登入的方法
.('tome', '123')
test_case3,需要登入
             [100%]

============================== 3 passed in 0.04s ==============================

Process finished with exit code 0

从上面结果可以看出,test_case1 和test_case3 运行之前执行了login方法,test_case2没有执行这个方法。

控制用例的执行顺序

一、pytest加载所有的用例都是乱序的,如果想指定用例的顺序,可以使用pytest-ordering插件,指定用例的执行顺序只需要在测试用例的方法前面加上装饰器@pytest.mark.run(order=[num])设置order的对应的num值,它就可以按照num的大小顺序来执行。

应用场景:有时运行测试用例要指定它的顺序,比如有些场景要先需要登入,才能执行后面的流程比如购物流程,下单流程,这时就需要指定用例的执行顺序。通过pytest-ordering这个插件可以完成用例顺序的指定。

二、安装


pip install pytest-ordering

三、实例


#!/usr/bin/env python
# _*_coding: utf-8 _*_
import pytest

class Testpytest(object):

@pytest.mark.run(order=-1)
 def test_two(self):
   print("test_two, 测试用例")

@pytest.mark.run(order=3)
 def test_one(self):
   print("test_one, 测试用例")

@pytest.mark.run(order=1)
 def test_three(self):
   print("test_three, 测试用例")

四、运行结果


Testing started at 15:51 ...
C:\Python\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1\helpers\pycharm\_jb_pytest_runner.py" --path C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_order.py
Launching pytest with arguments C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_order.py in C:\Users\wanwen\PycharmProjects\vigo\xuexi\20210123
============================= test session starts =============================
platform win32 -- Python 3.8.0, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: C:\Users\wanwen\PycharmProjects\vigo\xuexi\20210123
plugins: html-2.1.1, metadata-1.11.0, ordering-0.6collected 3 items

test_order.py                             [100%]

============================== 3 passed in 0.06s ==============================

Process finished with exit code 0
.test_three, 测试用例
.test_one, 测试用例
.test_two, 测试用例

来源:https://www.cnblogs.com/vigo01/p/14333751.html

标签:pytest,fixtures,装饰器
0
投稿

猜你喜欢

  • 使用Fabric自动化部署Django项目的实现

    2022-09-05 22:00:33
  • Python集成学习之Blending算法详解

    2022-09-28 04:31:35
  • GoFrame框架gcache的缓存控制淘汰策略实践示例

    2023-07-22 06:41:19
  • python读取并绘制nc数据的保姆级教程

    2023-11-23 02:19:24
  • win10下MySQL 8.0登录Access denied for user‘root’@‘localhost’ (using password: YES)问题的解决方法

    2024-01-19 05:31:09
  • python判断所输入的任意一个正整数是否为素数的两种方法

    2022-02-26 12:43:14
  • Pycharm编辑器技巧之自动导入模块详解

    2022-02-06 06:11:14
  • Python计时相关操作详解【time,datetime】

    2023-08-24 17:12:56
  • 数据库Oracle数据的异地的自动备份

    2010-07-27 13:28:00
  • Sklearn调优之网格搜索与随机搜索原理详细分析

    2022-05-11 10:47:12
  • 实现用python算法计算圆周率的小诀窍

    2023-10-16 15:16:27
  • python实现整数的二进制循环移位

    2022-09-08 23:11:39
  • Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解

    2023-11-16 22:45:05
  • 在Python中使用itertools模块中的组合函数的教程

    2023-11-06 16:31:36
  • 使用Python实现Wake On Lan远程开机功能

    2023-07-26 21:44:06
  • Python爬虫框架Scrapy基本用法入门教程

    2021-08-17 19:50:45
  • 详解Gotorch多机定时任务管理系统

    2024-04-26 17:35:17
  • python数字图像处理skimage读取显示与保存图片

    2023-07-28 17:33:00
  • 对django2.0 关联表的必填on_delete参数的含义解析

    2023-04-01 22:59:28
  • python正则表达式及使用正则表达式的例子

    2021-07-28 20:15:41
  • asp之家 网络编程 m.aspxhome.com