当不修改ini文件时(后续会讲修改方法),pytest有如下约束:
(1)模块约束:文件名需要满足test_.py格式开头或_test.py格式结尾。
(2)测试类以Test开头,并且不能带有 init 方法
(3)在类中,可以包含一个或多个test_开头的函数。
在这里介绍主函数执行法
在pytest文件夹中新创建一个文件(注意命名规范也要满足):
improt pytest
if__name__ == "__main__":
pytest.main(["./testCase::test_1::Test_one::test_function"])
内容中的参数表示测试的位置在同目录下的testCase文件夹下的test_1文件中的Test_one类下的test_function函数,其中不指定函数就会测试类下的所有函数,不指定类就会测试文件下的所有类以及对应函数,不指定文件就会测试该文件夹下的所有测试文件。
常用参数如下:
1.-s ;输入我们用例中的调试信息
2.-v ;可以输出用例更加详细的执行信息,比如用例所在的文件及用例名称等
3.-vs ;输出更加详细的执行信息和调试信息
4.–reruns=2 ;对于失败的测试用例指定其重跑两次
5.-n 3 ;生成3个线程,分别执行用例,用于提高执行效率
6.-x ;只要有一个用例失败,就停止测试
7.–maxfail=2 ;出现两个用例失败,就停止测试
2.1. 终端输入及mark相关设置
(1)- ordering ;pytest默认测试用例从上到下执行,使用该方法可以改变执行顺序
class Test_One:
@pytest.mark.run(order=2) #定义执行顺序为2号执行位
def test_01(self):
print("1")
@pytest.mark.run(order=1) #定义执行顺序为1号执行位
def test_02(self):
print("2")
当在执行函数前加上该语句,就可以改变执行顺序。输出结果会先输出2再输出1
(2)-m “smoke” ; 执行smoke分组的用例,分组的方式如下:
class Test_One:
@pytest.mark.snoke #定义为smoke用例
def test_01(self):
print("1")
@pytest.mark.interface #定义为interface用例
def test_02(self):
print("2")
当需要执行多组用例:-m “smoke or interface”
(3)无需终端额外输入,无条件跳过用例和条件跳过用例
class Test_One:
age = 18
@pytest.mark.skip(reason="暂时无需测试") #无条件跳过该测试用例,并且理由为暂时无需测试
def test_01(self):
print("1")
@pytest.mark.skipif(age>=18,reason="年满十八岁,无需测试该用例") #若类中关于age的值>=18则跳过该用例,并且理由是年满十八岁,无需测试该用例
def test_02(self):
print("2")
安装插件和配置省略,可查看他人文章。下面介绍如何生成报告:
(1)生成临时文件:
– alluredir ./temp 空格后的语句表示将临时文件保存在同文件夹下的temp文件夹中(若没有则会创建文件夹)
(2)生成测试报告
利用主函数方式:
improt pytest
improt os
if__name__ == "__main__":
pytest.main(["./testCase::test_1::Test_one::test_function"])
os.system("allure generate ./temp -o ./report") #./temp表示在该文件夹下寻找临时文件 -o ./report 表示测试报告的存放位置