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生成器的使用方法
Nov 21 Python
python 中random模块的常用方法总结
Jul 08 Python
Python简单读取json文件功能示例
Nov 30 Python
python3将视频流保存为本地视频文件
Jun 20 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
jupyter notebook中美观显示矩阵实例
Apr 17 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
Django url 路由匹配过程详解
Jan 22 Python
教你使用pyinstaller打包Python教程
May 27 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
Protoss魔法科技
2020/03/14 星际争霸
Laravel下生成验证码的类
2017/11/15 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
python实现爬虫下载美女图片
2015/07/14 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Python谱减法语音降噪实例
2019/12/18 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
挪威手表购物网站:Klokker
2016/09/19 全球购物
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
大学生的自我鉴定范文
2014/01/21 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
产品委托授权书范本
2014/09/16 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
男方婚前保证书
2015/02/28 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书