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基于递归算法实现的走迷宫问题
Aug 04 Python
django上传图片并生成缩略图方法示例
Dec 11 Python
Django中使用Celery的方法示例
Nov 29 Python
PyCharm+PySpark远程调试的环境配置的方法
Nov 29 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
python实现AES加密和解密
Mar 27 Python
Python识别html主要文本框过程解析
Feb 18 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
常用的10个Python实用小技巧
Aug 10 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 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
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
目前最全的python的就业方向
2018/06/05 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
浅析python redis的连接及相关操作
2019/11/07 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
导游实习生自荐书
2014/01/28 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
老师对学生的评语
2014/04/18 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
政风行风建设整改方案
2014/10/27 职场文书
保护地球的宣传语
2015/07/13 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
八年级英语教学反思
2016/02/15 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
2019公司管理制度
2019/04/19 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python