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轻松实现代码编码格式转换
Mar 26 Python
python简单的函数定义和用法实例
May 07 Python
Python OpenCV获取视频的方法
Feb 28 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
Python3 pandas 操作列表实例详解
Sep 23 Python
Python操作qml对象过程详解
Sep 26 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
Python自带的IDE在哪里
Jul 01 Python
Python random模块的使用示例
Oct 10 Python
python 30行代码实现蚂蚁森林自动偷能量
Feb 08 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中设置时区,记录日志文件的实现代码
2013/01/07 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
brook javascript框架介绍
2011/10/10 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
浅谈python数据类型及类型转换
2017/12/18 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
python实现网站微信登录的示例代码
2019/09/18 Python
python实现简单俄罗斯方块
2020/03/13 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
财务内勤岗位职责
2014/04/17 职场文书
施工单位安全责任书
2014/07/24 职场文书
出差报告范文
2014/11/06 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python