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将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
Python学生成绩管理系统简洁版
Apr 05 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
ubuntu上安装python的实例方法
Sep 30 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
Scrapy实现模拟登录的示例代码
Feb 21 Python
python定义具名元组实例操作
Feb 28 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
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
python实现连接mongodb的方法
2015/05/08 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
Python中import机制详解
2017/11/14 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
Python配置文件处理的方法教程
2019/08/29 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
python3的pip路径在哪
2020/06/23 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
趣味体育活动方案
2014/02/08 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
西安导游词
2015/02/12 职场文书
护理专业自荐信范文
2015/03/06 职场文书
商场营业员岗位职责
2015/04/14 职场文书
python中的getter与setter你了解吗
2022/03/24 Python
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
Java 数组的使用
2022/05/11 Java/Android