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 迭代器工具包【推荐】
May 06 Python
Python字符编码判断方法分析
Jul 01 Python
python3+PyQt5使用数据库表视图
Apr 24 Python
Flask之flask-session的具体使用
Jul 26 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
python监测当前联网状态并连接的实例
Dec 18 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
python语言基本语句用法总结
Jun 11 Python
python应用文件读取与登录注册功能
Sep 23 Python
python实现与redis交互操作详解
Apr 21 Python
Python页面加载的等待方式总结
Feb 28 Python
python删除csv文件的行列
Apr 06 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 Directory 函数的详解
2013/03/07 PHP
php强制下载文件函数
2016/08/24 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
利用python画出折线图
2018/07/26 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
社区庆中秋节活动方案
2014/02/07 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
安全生产宣传标语
2014/06/06 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
2014年文员工作总结
2014/11/18 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js