pytest学习笔记02-默认规则、运行方式及常用参数


作为一个单元测试框架,它有着自己的规则,先讲讲它的默认规则

文件名必须以test_开头或者_test结尾 测试类必须以Test开头,并且不能有init方法 函数必须以test开头    如果不按照这个规则来写会怎么样呢? 不按照这个默认规则来写的话,就无法被pytest识别作为测试用例去运行,所以我们还是老老实实的去遵守这个规则吧。   运行方法 可以使用主函数运行,也可以使用命令行运行,两者写法是差不多的。 主函数模式(要把主函数放在根目录下去运行)
if __name__ == '__main__':
pytest.main()
(1)运行所有 pytest main()

 我这里是有两个test的文件的,我们来试一下运行结果

 可以看到这里是把两个文件都运行了

(2)运行指定模块 pytest main([‘-vs’,’文件名’])     这里要注意一下,使用这种写法的时候,文件一定要和main方法的文件在同一个目录下,否则会找不到文件 (3)运行指定目录 pytest main([‘-vs’,’./文件夹名’]) (4)通过nodeid指定用例运行,nodeid由模块名,分隔符,类名,方法名,函数名组成             pytest main([‘-vs’,’./文件夹名/文件名::函数名’])

 比如我现在想要只运行上面的test_02函数

 这样就可以指定只运行该函数

            pytest main([‘-vs’,’./文件夹名/文件名::类名::方法名’]) 那我现在想运行上面的test_one,写法也是差不多的,只不过要加上类名

 这样就OK了

命令行模式 打开终端,在终端中运行 (1)运行所有 pytest (2)运行指定模块 pytest -v 文件名 (3)运行指定目录 pytest  -vs ./文件夹名 (4)通过nodeid指定用例运行,nodeid由模块名,分隔符,类名,方法名,函数名组成             pytest -vs ./文件夹名/文件名::函数名             pytest  -vs ./文件夹名/文件名::类名::方法名  命令行与主函数的运行大同小异,这里就不再贴图了。然后下面附上常用的参数 参数: -v:显示更详细的信息 -s:表示输出调试信息,包括print打印的信息 -vs:这两个参数一起用 -n:表示多线程或者分布式运行测试用例 为什么要用多线程,有的时候可能我们有很多用例,一条一条按顺序执行就会很麻烦,所以这个时候我们就会用到多线程。 比如我现在改一下我的用例
import time


class TestClass:
def test_one(self):
x = "this"
time.sleep(5)
assert "h" in x

def test_two(self):
x = "hello"
time.sleep(5)
assert "h" not in x
我如果单独执行的话,那每个等待5秒,就需要10秒的时间

 可以看到两条用例运行了10秒左右,这个时候我再用多线程去运行试试

 这样每条用例就只用了5秒左右,会大大的节省时间,提高效率。

pytest main(]‘-vs’,’./文件夹名/文件名::类名::方法名’,’-n=x’])设置x个线程 Pytest  -vs ./文件夹名/文件名::类名::方法名 -n x 设置x个线程 —reruns num:失败用例重跑 有的时候我们希望用例执行失败然后重试看能不能重新运行成功,我们就可以使用这个参数
import pytest
if __name__ == '__main__':
pytest.main(['-vs','./pythonProject/test_01.py','--reruns=2'])

 这里我们可以看到,test_two是运行报错了,所以根据我的设置又再重复运行了2次。

pytest main([‘-vs’,’./文件名’,—reruns=x’])设置所有执行失败的用例重试(重新执行)x次 Pytest  -vs ./文件名 —reruns x 设置所有执行失败的用例重试(重新执行)x次