一、pytest常用插件

# 生成html格式的自动化测试报告

# 测试用例分布执行,多cpu分发

# 用于改变测试用例的执行顺序

  pytest-rerunfailures # 用例失败后重跑

#用于生成美观的测试报告

二、pytest常用规则

开头或者test结尾;

  2、测试类必须以Test开头,并且不能有init方法;

3、测试函数或方法必须以test开头;

三、pytest测试用例的运行方式

1、主函数模式

(1)运行所有:pytest.main()



(4)通过nodeid指定用例运行:nodeid有模块名、分隔符、类名、方法名、函数名组成pytest.main(['-vs','./interface/test_interface::test_login.py'])

2、主函数模式




(4)通过nodeid指定用例运行:pytest -vs ./interface/test_interface::test_login.py

3、参数详解:


-v :显示更详细的信息、包括所执行文件路径nodeid

-vs :组合

-n :支持多线程或者分布式运行测试用例,pytest -vs test_login.py -n2

-reruns NUM :失败用例重跑


--maxfail=2 :出现两个用例失败就停止

-k :根据测试用例的部分字符模糊匹配测试用例,如:pytest -vs ./TestCase -k "login"--html ./report/report.html:生成测试报告

4、通过pytest.ini配置文件运行



2、编码:必须为ANSI,可以使用notpad++修改编码格式


4、运行的规则:不管主函数的模式运行,命令行模式运行,都会去读取这个配置文件

[pytest]
•   addopts = -vs  --html ./report/report.html  #命令行的参数,用空格分隔
•   testpaths = ./testcase       #测试用例的路径
•   python_files = test_*.py        #模块名的规则
•   python_classes = Test*         #类名的规则
•   python_functions = test     #方法名的规则
•   markers=
•       smoke:冒烟用例
•       usermanage:用户管理模块
•       productmanage:商品管理模块

 

四、pytest执行测试用例的顺序

1、unittest:ascll的大小顺序执行


3、改变默认执行顺序:使用mark标记,如:@pytest.mark.last@pytest.mark.run(order=2)

五、分组执行,可区分web和接口

1、配置文件pytest.ini中添加:
    markers=
        smoke:冒烟用例
        usermanage:用户管理模块
        productmanage:商品管理模块
2、用例装饰器
    @pytest.mark.smoke或@pytest.mark.usermanage
3、执行命令
    pytest -m “smoke or usermanage”

六、pytest跳过测试用例

1、无条件跳过
    @pytest.mark.skip(reason="跳过原因")
2、有条件跳过
    @pytest.mark.skipif(arg>10,reason="如果arg大于10,跳过")

七、使用@pytest.fixture()装饰器来实现部分用例的前后置

@pytest.fixture(scope='',param='',autouse='',ids='',name='')
1、scope被标记方法的作用域,function(默认)、class、module、package、session
2、param参数化,支持列表、元祖,列表字典、元祖字典
3、autouse=True,自动执行,默认False
4、ids,当使用param参数化时,给每个值设置个变量名,可做表格title
5、name,表示给@pytest.fixture()所标记的方法起个别名
6、被装饰的方法前置代码yield之前,后置代码yield之后
7、上代码
import pytest

@pytest.fixture(scope='function',params=['aa','bb'])
def my_fixture(reqest):
    print('前置')
    yield reqest.param
    print('后置')
    # return reqest.param

def test_01(self,my_fixture):
    print(my_fixture)

八、通过conftest.py和pytest.fixture()结合使用实现全局的前置应用

1、项目全局、模块全局
2、conftest.py文件是单独存放的一个夹具配置文件,经常是不能更改。
3、原则上conftest.py需要和裕兴的用例放到统一层,并且不需要做任何import导入的操作
4、@pytest.fixtrue()他的作用既可以部分也可以全部前后置
5、conftest.py和pytest.fixture()结合使用,作用全局的前后置