当前位置: 首页 > 工具软件 > pytest > 使用案例 >

【pytest】1.pytest的基础规则

公冶阳德
2023-12-01

前言

一、pytest简介

1.pytest是一个非常成熟的单元框架,比unittest更灵活,更容易
2.pytest可以和selenium、request、appium结合实现web自动化、接口自动化、app自动化。
3.pytest可以实现测试用例跳过、失败重跑
4.pytest可以和allure生成非常美观的测试报告
5.pytest可以和jenkins持续集成
6.pytest有非常强大的插件,并且你这些插件能实现很多的实用的操作。

pytest
pytest-html 生成html格式的测试报告
pytest-xdist 测试用例分布式执行,多cpu并发
pytest-ordering 用于改变测试用例的执行顺序
pytest-rerunfailures 用于失败重跑
allure-pytest 用于生成美观的测试报告
需要安装的插件可以放在requirement.txt中,通过pip install -r requirement.txt安装/)

二、使用pytest的规则

1.模块名必须以test_开头,或者以_test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试方法必须以test开头

三、pytest测试用例运行方式

1.主函数模式

(1)运行所有:pytest.main()
(2)指定模块:pytest.main([‘-vs’,’ -vs test_login.py’])
(3)指定目录:pytest.main([‘-vs’,‘./testcase’])
(4)通过nodeid指定运行用例:nodeid由模块名、分隔符、类名、方法名、函数名组成。
pytest.main([‘-vs’,‘./testcase/test_login.py::test_01’])

2.命令行模式

(1) 运行所有:pytest.main()
(2)指定模块:pytest -vs test_login.py
(3)指定目录:pytest -vs ./testcase
(4)通过nodeid指定运行用例:nodeid由模块名、分隔符、类名、方法名、函数名组成。 pytest -vs ./testcase/test_login.py::test_01

  • 参数详解:
    -s:表示输出调试信息
    -v:显示更详细的信息
    -vs:一起使用,常用
    -n:支持多线程或者分布式运行用例;如 pytest -vs ./testcase/test_login.py -n 2
    –reruns NUMS:用例失败重跑
    -x:只要有一个用例报错,运行停止
    –maxfail=2 :出现两个以上失败,运行停止
    -k :根据测试用例的部分字符串指定测试用例;如 pytest -vs ./testcase -k “ab”
    –html :生成测试报告(默认的不推荐,建议使用allure测试报告),如:–html ./report/report.html

3.通过读取pytest.ini配置文件运行(企业使用)

pytest.ini是pytest测试框架的核心配置文件
1.位置:一般放在项目的根目录
2.编码:必须是ANSI,可以使用notepad++修改编码格式
3.作用:改变pytest的默认行为
4.运行规则:所有的运行方式,都会去读取这个配置文件
5.格式:

[pytest]
# 01.可添加多个命令行参数,用空格分隔
addopts = -s -v
# 02.搜索文件夹,执行指定文件夹里面的用例
testpaths = ./testcase
# 03.配置搜索测试文件名称,默认是test开头的文件,可以自定义修改
python_files = test*.py
# 04.配置测试搜索的类名,默认是Test开头的类,可以自定义修改
python_classes = Test_*
# 05.配置测试搜索的测试函数名,默认是以test开头的方法/函数,可以自定义修改
python_functions = test*

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

  • 默认顺序:从上到下
  • 使用装饰器自定义运行顺序(未定义的按照默认顺序执行)如:@pytest.mark.run(order=1)

五、如何分组执行测试用例(场景例如:冒烟用例、分模块执行、分用例级别执行…)

示例:
smoke:冒烟用例,分布在各个模块中的部分用例。
model1:模块1的用例
model2:模块2的用例

  1. 在pytest.ini配置文件中定义:
markers =
    smoke: 冒烟用例
    model1:模块1的用例
    model2:模块2的用例
  1. 在用例前使用装饰器:
	@pytest.mark.smoke
    def test_login_003(self):
        print("用例003")

    @pytest.mark.model1
    def test_login_004(self):
        print("用例004")

运行用例时使用参数-m+需要执行的makers,执行多个时,用or连接:

pytest -m "smoke"
pytest -m "smoke or model1"

六、pytest跳过测试用例

  1. 无条件跳过
@pytest.mark.skip("跳过原因:本轮不执行")
def test_login_001(self):
    print("用例001")
  1. 有条件跳过
@pytest.mark.skipif(level > 2, reason="级别大于2的执行")
 类似资料: