Pytest插件pytest-order指定用例顺序
Pytest插件pytest-order指定用例顺序
安装
pip install pytest-order
注意不是pytest-ordering
说起来这里有个故事
关于pytest-ordering和pytest-order
在写这个文章之前,我用的一直是pytest-ordering
但我在安装pytest-ordering的时候一直看到有pytest-order
今天特意看了下,好家伙
GITHUB上写了这么一句:pytest-ordering is no longer maintained, please use https://pypi.org/project/pytest-order/
pytest-order
is a fork of pytest-ordering that provides additional features like ordering relative to other tests.pytest-order
works with Python 3.6 - 3.10, with pytest versions >= 5.0.0 for all versions except Python 3.10, and for pytest >= 6.2.4 for Python 3.10.pytest-order
runs on Linux, macOS and Windows.
所以pytest-ordering在当前的pytest及python版本中可能会出现问题,而pytest-order是同步更新的,你可以放心食用
那么问题来了,pytest-order怎么用呢?看官方的示例跟pytest-ordering还是有区别的(如果没有区别,装了2个的话你可能会分不清哪个调用的,当然我们不推荐你用2个)
虽然用起来很简单,但的确蛮细节的,网上你看到的基本都是pytest-ordering的用法,然它在3年前就停止更新了
我把它的git@github.com:pytest-dev/pytest-order.git,下下来,它写了很多的example,嗯~
根据索引排序
其实就一个数字
也可以是与之对应的特定字符,如first等
字符 数字index first 0 second 1 last -1 second_to_last -2 eighth_to_last -8 示例1
import pytest
@pytest.mark.order(index=2)
def test_three():
print('three')
assert 3 == 3
@pytest.mark.order('second')
def test_two():
print('two')
assert 2 == 2
@pytest.mark.order(-1)
def test_last():
print('last')
assert 'last' == 'last'
@pytest.mark.order(0)
def test_one():
print('one')
assert 1 == 1
if __name__ == '__main__':
pytest.main(['-sv', __file__])
test_order_v1.py::test_one one
PASSED
test_order_v1.py::test_two two
PASSED
test_order_v1.py::test_three three
PASSED
test_order_v1.py::test_last last
PASSED
============================== 4 passed in 0.06s ==============================
进程已结束,退出代码为 0
index是从0开始的;切记index=2其实是第三个,first其实是0.所以我们不建议混用
-1是最后一个没有问题,索引体系跟list的类似,还是比较好理解的。建议用数字,学习成本就比较低。
这个装饰器可以用到类上
import pytest
@pytest.mark.order(2)
class TestA:
def test_one(self):
assert 1 == 1
def test_two(self):
assert 1 == 1
@pytest.mark.order(1)
class TestB:
def test_one(self):
assert 1 == 1
def test_two(self):
assert 1 == 1
if __name__ == '__main__':
pytest.main(['-sv', __file__])
test_order_v1.py::TestB::test_one PASSED
test_order_v1.py::TestB::test_two PASSED
test_order_v1.py::TestA::test_one PASSED
test_order_v1.py::TestA::test_two PASSED
排在指定用例后面
直接看示例
import pytest
@pytest.mark.order(after='test_hallo')
def test_hello():
assert 1 == 1
def test_hallo():
assert 1 == 1
if __name__ == '__main__':
pytest.main(['-sv', __file__])
还可以这样写,指定类
@pytest.mark.order(after="TestB::test_c")
@pytest.mark.order(after="Test2")
可以指定文件夹/文件::类::测试用例(即测试函数名),也可以用before
@pytest.mark.order(before="test_module_c/test_submodule.py::test_2")
组合也可以
@pytest.mark.order(index=0, after="test_second")
@pytest.mark.order(after=["test_second", "other_module.py::test_other"])
如果是参数化,那就直接用测试函数名
import pytest
@pytest.mark.order(after=["test_second"])
def test_first():
assert True
@pytest.parametrize(param, [1, 2, 3])
def test_second(param):
assert True
说在最后
关于用例的顺序相关的插件是不少的,比如
pytest-randomly:随机顺序
pytest-reverse:反转(通过一个hook亦可实现)
pytest-random-order :随机顺序
pytest-depends:依赖
pytest-find-dependencies:寻找依赖
写完发现他有个doc,白整了~
https://pytest-order.readthedocs.io/en/latest/
最新文章
- In-Memory:内存优化表 DMV
- Python Socket 网络编程
- CentOS7下安装和使用Xdebug
- quartz(1)
- KnockoutJS 3.X API 第五章 高级应用(4) 自定义处理逻辑
- Web 前端
- dubbo 转
- 学习打造自己的DEBUG_NEW
- STP详解
- VLAN设置
- webdynpro 组件重用 传值问题
- JAVA语法题
- Oracle 执行计划(Explain Plan) 说明
- GitHub修改用户名
- 常用类-API文档-Integer
- hashlib模块(加密模块)
- 苹果8plus怎么录屏视频
- python2.7安装和uwsgi
- lightswitch Grid 控件添加 CheckBox 多选
- 洛谷.2325.[SCOI2005]王室联邦(贪心)
热门文章
- go:快速添加接口方法及其实现
- [C++] - GCC和LLVM对方法 warning: non-void function does not return a value [-Wreturn-type] 的处理差异
- 【云原生 · Kubernetes】部署博客系统
- vs2019中使用Git,新建项目时总提示部分项目位于解决方案文件夹外
- day11 枚举类enum &; 单例模式 &; 异常以及抛出
- 【Java SE进阶】Day03 数据结构、List、Set、Collections
- 【JVM调优】Day03:GC参数、OOM出现方式、调优实战
- 【每日一题】【map操作】【滑动窗口所需元素】2021年12月22日-76. 最小覆盖子串
- 保存sklearn中模型的两种方法(pickle、joblib)
- v-model双向绑定原理