一、pytest有很多命令行选项如
-v 输出详细信息
-q 简要输出
-s 打印输出
-k "xxx" 在file name、class name、function name来匹配xxx规则,pytest只运行符合匹配结果的部分
-m xx 寻找具有xx mark的test来运行或不运行
-x 遇到失败即停止
-n num 使用数量为nun的进程并行运行测试
--lf 只是运行上次失败的的部分
--ff 只是运行上次失败的部分并且忽略成功的部分
--junitxml=path 创建junit XML格式的测试报告
--html=path 创建HTML格式的测试报告
1 -k的使用
我的目录及文件如下:
执行pytest -k "eg1 and not eg2"
注意内容一定要放在引号里面
可以看到只是执行test_eg1.py, test_eg2.py没有执行.内容匹配也是模糊匹配,pytest会把你给定的字符信息和file name、class name、function name等作比较
执行pytest -k "estClass and not two" -v
为了看详细执行了哪些 我加了-v
可以看到只是执行了class里面的第一个方法
现在想要执行test_eg2.py全部test 和test_demo.py中的包含mutl关键字的test
如上图,and没有效果
换成or 就匹配到测试数据了
2 pytest -m
如上 被@test.mark.userfixture装饰的test被执行了
也可以反向选定 具有特定mark的test不被执行如
pytest -m "not usefixtures" -v test_eg2.py
注意:not xxx 要加引号 如果没有not不需要加引号
可以看到test_eg2.py里被装饰的test未执行,没有被装饰的test执行了
这里的mark可以用pytest自带的也可以用自定义的mark
3 --lf 只运行上次失败的test
如上:第一次运行有3个fail 1个pass
执行 pytest --lf
注意看pytest给出的提示,它会寻找最近一次失败的运行记录,把失败的test拿出来运行,通过的就忽略了没有被运行
如果未执行 pytest --lf 执行的是pytest --ff
如上:它和--lf的区别是
1)--lf只选定且运行了了之前的失败的test.--ff选择了之前所有的test,但--ff并没有运行所有的test,只运行了其中失败的test
2)最后统计的时候 --lf只是统计了本次运行的,也就是之前失败的test,但--ff统计了之前所有的test
4 -n 利用硬件配置上的多cpu生成多个进程,利用多进程来运行test,提高运行速度
要装一个插件,否则pytest无法识别-n参数
pip install pytest-xdist
首先不加-n直接执行
总共执行了3.62s
执行pytest -s -v -n 4
这里加-s是为了统计出时间
加了-n以后5.7s 还变慢了 哈哈
这里,我暂时没有深究,我大约记得多进程间的切换本来就消耗资源,还有我这里是win系统,win对生成多进程好像有个什么限制,后面再详细看下
4 pytest配置文件
pytest配置文件有很多 常用的就是pytest.ini。pytest会自动读取配置文件的数据
我们可以将执行pytest时后面的一些选项 如-s 写在配置文件里面,这样执行pytest时,-s就会被默认带上
注意,在pytest.ini,pytest自带的选项有很多,把-s -v写在哪一个选项后面是有讲究的的,具体可看官网文档https://docs.pytest.org/en/7.3.x/reference/reference.html#ini-options-ref
把-s -v 写到pytest.ini
如上,直接执行pytest 效果就和之前执行pytest -s -v一样一样的,自动输入更详细的执行信息
上面我配置文件多了 env custom_variable 两个选项,这个与-s -v无关,是我自定义的两个选项,在配置文件自定义选项用起来要麻烦点,后面再说
标签:选项,lf,--,pytest,命令行,test,执行,运行 From: https://www.cnblogs.com/MyRecords/p/17365453.html