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搜索指定目录的方法
Apr 29 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
Python paramiko模块使用解析(实现ssh)
Aug 30 Python
如何Tkinter模块编写Python图形界面
Oct 14 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
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
php查看网页源代码的方法
2015/03/13 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
js回调函数仿360开机
2019/12/26 Javascript
npm qs模块使用详解
2020/02/07 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
Python实现二叉堆
2016/02/03 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
写给老婆的检讨书
2014/02/21 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
硕士生找工作求职信
2014/07/05 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
党员身份证明材料
2015/06/19 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
停车场管理制度范本
2015/08/05 职场文书
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers