概述
pytest支持自定义标记,可以将项目划分多个模块,然后按照指定模块执行
mark标记
demo test_m.py
只运行web标记的测,在cmd运行的时候加-m web,指定参数值web
pytest -v -m web/直接在编辑器使用["-s", "test_server.py", "-m=web]
如果不想执行标记web的用例,就使用pytest -v -m “not web”
-v 指定函数节点id
如想要运行某个.py模块下类的一个用例,如TestClass里面的test_method用例,每个test_开头的用例,函数的明细就是用例的节点id,指定节点id运行用-v 参数
pytest -v test_m.py::TestClass::test_method
也可以运行整个class
>pytest -v test_m.py::TestClass
也可以运行多个节点,多个节点之间用空格隔开
pytest -v test_server.py::TestClass test_server.py::test_send_http
-k匹配用例名称
可以使用-k命令运行指定在匹配用例名称的表达式
pytest -v -k http
也可以排除某些用例
pytest -k “not send_http” -v
同时也可以选择匹配多个
pytest -k “http or quick” -v
pytest.main()的使用
pytest在运行用例的时候,一般会使用命令行去执行,但也可以像unittest框架一样,在该项目的根目录下写一个run_all.py的文件,运行该文件即可
pytest.main()
pytest.main(args,plugins) args:传一个list对象,list里面是多个命令行的参数 plugins 传一个list对象,在list里面初始化的时候注册的插件
如果不带任何参数,那么在执行的效果与cms直接运行pytest命令一样,默认运行当前目录及子目录的所有文件夹的测试用例
带参数运行
在运行的时候,也可以指定参数运行
-s:显示程序中的print/logging输出
-v:丰富信息模式,输出更详细的用例执行信息
-k:运行包含某个字符的测试用例,eg:pytest -k add xx.py 中包含add的用例
-q:简单输出模式,不输出环境信息
-x:出现一条测试用例失败就退出测试,在调试阶段非常有用,当测试用例失败时,应调试通过,而不是继续执行测试用例
在命令行带上-s参数
多个参数-s -v
plugins参数的使用
一般我们在写插件的代码上放置在conftest.py会被pytest查找,如果不写在conftest.py,也可以通过plugins参数指定加载
pytest fixture之name参数使用别名
在使用fixture的name参数,使用别名更容易理解
demo
定义fixture打开浏览器,测试用例使用fixture的前置操作
open_broswer这个fixture返回打开浏览器的实例的driver,后面的测试用例传open_broswer参数,此时open_broswer就相当于driver了,这个时候就可以将open_broswer重命名name,改成driver,这样就更之前的一样了
备注:重命名的千万别有误区,这里是重命名,如果是调用函数,其后面是有括号的
为了实现上面的效果,又不引起误解,可以在fixture里面是有name参数
pytest文档内置fixture pytestconfig动态添加和获取pytest.ini
pytestconfig是可以获取pytest.ini里面的配置参数
有一些配置参数添加到配置里面,如configid、productid以及环境的base_url地址、账号相关信息
addini有4个参数:self,name,help,type=None,default=None
动态添加配置信息
添加命令行参数,可以用addoption来添加命令行参数
- 第一个'url' 是参数的名称
- type 是类型,默认None,可以设置:None, "pathlist", "args", "linelist", "bool"
- default 是设置的默认值
- help 是设置帮助文档,方便查阅
pytest文档-内置request读取项目根目录rootdir
在写自动化测试项目的时候,会使用到配置文件,比如读取数据库相关配置文件,单独放置在config配置文件,方便维护
pytest的内置fixture可以获取到配置文件相关信息,request.config.rootdir用于获取项目的根目录
pytest第三方插件
1、pytest-dependency
前言
该插件是pytest的第三方,主要解决的是的用例之间的依赖关系。如果依赖的上下文失败,后面的用例会被标识跳过该执行,相当于执行了pytest.mark.skip
dependency可作用域范围有:session、package、module、class
安装 pip install pytest-dependency
官方示例:pytest-dependency
2、基本用法
首先需要在用例开始位置打上装饰器@pytest.mark.dependency(),这里代表用例为主条件,如果该条用例失败,关联他的用例会跳过执行。
在被关联的用例上,也需要打上带参数的装饰器@pytest.mark.dependency(),depends接受的参数关联的依赖用例名
在depends也可以用别名的方式指定用例名
2.1 Test类下实现方式
2.2 函数方式
2.3 别名方式
3、定义依赖范围
官方详解
我们可以看到scope可接受四种参数定义的类型('session','package','module'或'class')
scope='class‘,其作用于所属类,外部类不会被关联
scope=’module‘ 不传递时默认是module,作用于当前文件
置灰查找当前文件符合条件的文件名,类里同名的方法不会被依赖
scope=’package‘,其作用于当前目录统计的依赖函数,跨目录无法找到依赖函数
scope=’session‘ 作用全局,可跨目录调用,单倍依赖的用例必须先执行
pytest执行顺序
pytest默认按字母顺序去执行的(小写英文—>大写英文—>0-9数字)
用例之间的顺序是文件之间按照ASCLL码排序,文件内的用例按照从上往下执行。
setup_module->setup_claas->setup_function->testcase->teardown_function->teardown_claas->teardown_module
可以通过第三方插件pytest-ordering实现自定义用例执行顺序
pytest-ordering 指定用例的运行顺序
pytest默认是按照字母来执行执行顺序,由于多接口之间存在值引用的关系,此时就需要执行case的执行顺序。pytest控制case执行顺序的插件是pytest-ordering,直接用pip安装。
1.安装依赖包
pip install pytest-ordering
2、pytest-ordering的使用
通过装饰器的方式来控制执行顺序
方式一
方式二
方式三
执行优先级:0>较小的正数>较大的正数>无标记>较小的负数>较大的负数
方式四
最后
以上就是年轻鱼为你收集整理的pytest 常用命令的全部内容,希望文章能够帮你解决pytest 常用命令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复