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编程中的命名空间与作用域
Oct 16 Python
python下载图片实现方法(超简单)
Jul 21 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
Jul 22 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
python GUI计算器的实现
Oct 09 Python
Django操作cookie的实现
May 26 Python
Python下载商品数据并连接数据库且保存数据
Mar 31 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连接Oracle for NT 远程数据库
2006/10/09 PHP
收藏的一个php小偷的核心程序
2007/04/09 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
Javascript & DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
vue.js表格分页示例
2016/10/18 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
Python处理XML格式数据的方法详解
2017/03/21 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
python实现汉诺塔算法
2021/03/01 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
利用python实现AR教程
2019/11/20 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
中医药大学毕业生自荐信
2013/11/08 职场文书
精彩的大学生自我评价
2013/11/17 职场文书
室内拓展活动方案
2014/02/13 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
安全教育的主题班会
2015/08/13 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS