pytest-ordering:指定pytest的case运行顺序的插件
背景
在写接口或功能自动化case的时候,会遇到一些case有先后执行顺序的场景。比如:注册->登陆,先调用注册接口在数据库里面生成用户名和密码,然后使用登陆接口验证登陆。
在pytest里,如果注册和登陆分别是两个testcase,默认执行执行顺序是从前到后的。
例子
有一个pytest的测试case用例:test_login.py
#/usr/bin/env python3 import pytest def test_login(): assert True def test_reg(): assert True
运行:pytest test_login.py
可以看到test_login在test_reg之前执行,这和我们的期望相悖。
解决方法:
1. 可以在编写testcase脚本时候,把test_reg放到test_login前面。
2.使用pytest-ordering插件
第一种方式属于硬编码的方式,在后续维护过程中很容易出现维护的混乱性(比如后续有人要新加case和注册登录相关,可能改起来就比较麻烦了)。
第二种的好处就是可以通过pytest-ordering插件,使用装饰器的方式写清楚这种先后顺序,方便阅读和维护。
pytest-ordering使用
安装pytest-ordering
sudo pip3(pip) install pytest-ordering
使用pytest-ordering修饰符
1. 通过指定序数词指定,比如first,second,third...second-to-last(倒数第二), last(最后)。这种含义比较直接(不过容易写错单词)
#/usr/bin/env python3 import pytest @pytest.mark.run('second') def test_login(): assert True @pytest.mark.run('first') def test_reg(): assert True
2. 通过指定序号指定,比如1,2,3...-2(倒数第二), -1(最后)。这种写错的几率下,也比较直接。
#/usr/bin/env python3 import pytest @pytest.mark.run(order=2) def test_login(): assert True @pytest.mark.run(order=1) def test_reg(): assert True
3. 通过指定函数名指定,比如test_login和test_order都要在test_reg后执行,这种用法就比较适合此类场景。
#/usr/bin/env python3 import pytest @pytest.mark.run(after='test_reg') def test_login(): assert True def test_reg(): assert True @pytest.mark.run(after='test_reg') def test_order(): assert True
以上就是pytest-ordering插件的三种写法,如果有任何疑问和建议可以留言~
博主:测试生财
座右铭:专注测试与自动化,致力提高研发效能;通过测试精进完成原始积累,通过读书理财奔向财务自由。
csdn:https://blog.csdn.net/ccgshigao
- IDEA 安装完码云插件,运行报“Cannot run program "xxx":CreateProcess error=2,系统找不到指定的文件”
- Appium junit之自定义多次执行部分case的次数以及顺序,仅运行rePublish()即可
- IIS与.NET顺序安装反了,无法建ASP.NET应用程序或者服务(Visual Studio.net 已检测到指定的WEB服务器运行的不是ASP。NET1.1版。)
- Eclipse 运行使用指定的 JVM - m2eclipse 插件找不到 com.sun 的 default-tools.jar 的解决方案
- IDEA 安装完码云插件,运行报“Cannot run program "xxx":CreateProcess error=2,系统找不到指定的文件”
- IIS与.NET顺序安装反了,无法建ASP.NET应用程序或者服务(Visual Studio.net 已检测到指定的WEB服务器运行的不是ASP。NET1.1版。)
- 应用程序运行时,动画的执行与代码的逻辑顺序不匹配,即指定控件未出现动画效果,而其他控件却出现动画效果
- 插件开发――应用运行顺序
- Junit指定测试运行顺序
- 解决:运行pytest时,报错:'TestCaseFunction' object has no attribute 'get_marker'
- Linux 指定运行时动态库路径
- 用dos批处理程序检测是否安装.netframework,并自动安装后运行指定程序(.net自启动光盘的制做)
- window遍历任务管理器的进程 查找指定进程是否在运行
- Eclipse下通过Maven的Jetty插件运行Web工程的配置,包括启动https
- [转]FreeBSD 下 CSH(TCSH) 用户配置文件的运行顺序
- NPAPI 插件无法在 Chrome 42 版及更高版本上正常运行
- SpringBoot2.0 基础案例(17):自定义启动页,项目打包和指定运行环境
- android-01背景、编译运行、开发快捷键、插件
- 分布式之_多线程之指定线程运行服务器
- sql in按照指定顺序排序