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


Posted in Python onJanuary 28, 2021

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, 测试用例

以上就是pytest fixtures装饰器的使用和如何控制用例的执行顺序的详细内容,更多关于pytest fixtures装饰器和控制用例的执行顺序的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python下函数参数的传递(参数带星号的说明)
Sep 19 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
python django下载大的csv文件实现方法分析
Jul 19 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 Python
Python操作SQLite数据库过程解析
Sep 02 Python
Python列表元素常见操作简单示例
Oct 25 Python
python读取Kafka实例
Dec 23 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
如何在python中处理配置文件代码实例
Sep 27 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 #Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 #Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 #Python
详解Python调用系统命令的六种方法
Jan 28 #Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 #Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
Jan 28 #Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 #Python
You might like
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
利用JS实现数字增长
2016/07/28 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
浅谈Vue.js
2017/03/02 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
Python判断Abundant Number的方法
2015/06/15 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
Python中six模块基础用法
2019/12/08 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
解决python对齐错误的方法
2020/07/16 Python
python实现批处理文件
2020/07/28 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
文员个人的求职信范文
2013/09/26 职场文书
办理暂住证介绍信
2014/01/11 职场文书
护理不良事件检讨书
2014/02/06 职场文书
Django实现聊天机器人
2021/05/31 Python
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL