首页 > 其他分享 >Pytest插件pytest-order指定用例顺序

Pytest插件pytest-order指定用例顺序

时间:2022-10-15 20:11:07浏览次数:79  
标签:__ 插件 pytest mark assert 用例 Pytest test order

Pytest插件pytest-order指定用例顺序

安装

 pip install pytest-order
  • 注意不是pytest-ordering

  • 说起来这里有个故事

 

关于pytest-ordering和pytest-order

https://github.com/ftobia/pytest-ordering

https://github.com/pytest-dev/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年前就停止更新了

    • 我把它的[email protected]: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/

     

  •  

标签:__,插件,pytest,mark,assert,用例,Pytest,test,order
From: https://www.cnblogs.com/wuxianfeng023/p/16794941.html

相关文章

  • 自动化测试 - mac安装jenkins并安装allure插件,构建执行pytest自动化用例并产出allure
    背景:jenkins+pytest+allure,产出自动化测试结果步骤如下:一、mac安装jenkins1.方法一:(不推荐,跳过)安装tomcat下载jenkins并放到tomcat的www目录2.方法二:brew安装......
  • Visual Studio必备插件
    1、RainbowBraces2、Codist3、ResXManager4、XAMLStylerforVisualStudio20225、Viasfora6、ZenCoding7、PrismTemplatePack8、JSON2CSharp20229、IndentR......
  • Vite 使用 mock插件
    1.首先下载插件yarnaddvite-plugin-mockmock-D2.建立mock文件夹,并且新建index.js文件exportdefault[{ url:'/dev-api/api/getUsers', method:'get......
  • MyBatisPlusConfig中配置分页插件以及分页案例
    1、MyBatisPlusConfig中配置分页插件依赖参考:https://www.cnblogs.com/konglxblog/p/16793936.htmlpackagecom.stu.service.base.config;importcom.baomidou.mybati......
  • tomcat7插件
    tomcat7插件<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven......
  • python提效小工具-统计xmind用例数量
    问题:做测试的朋友们经常会用到xmind这个工具来梳理测试点或写测试用例,但是xmind8没有自带的统计测试用例,其他版本的xmind有些自带节点数量统计功能,但也也不会累计最终的数......
  • vue3无限滚动插件
    vue3无限滚动插件vue3-infinite-scroll-better支持Vue3的滚动加载插件,所有用法和vue-infinite-scroll一致。并解决了一些bug。安装npminstallvue3-infinite-scroll-b......
  • FreeBSD下开发Python插件并使用nuitka打包
    承接前面的文章https://www.cnblogs.com/passedbylove/p/16759512.htmlhttps://www.cnblogs.com/passedbylove/p/16756063.html自定义Python插件的setup.pyfromdistu......
  • idea插件收藏
    EasyJavadoc自动注释CR过很多同学的代码,经常会遇到类上或者方法上没有注释的情况,其中一个原因是写注释比较麻烦。那么有什么提效的方法吗?EasyJavadoc就是可以很好......
  • 在vscode中使用博客园插件
    在vscode中使用博客园插件自动上传本地博客(1)前言好记性不如烂笔头。千古流传的经验之谈,绝不是浪得虚名。记忆是最最会骗人的东西,又是最容易被遗忘的东西。过河拆桥,......