接口测试--Day5
一、pytest简介
Pytest是一个流行的测试框架,广泛应用于单元测试、集成测试和功能测试。它具有简单、灵活、可扩展的特点,提供了丰富的功能和插件儿生态系统,它简化了测试的编写和组织拍,通过丰富的功能和简洁的语法,让测试变得容易灵活且易于理解。
二、安装
pip install pytest
三、Pytest测试规则
- 测试文件以test的开头,
- 测试类以test的开头,并且类中类里面不能带有init初始化构造函数
- 测试函数以test开头,
- 断言使用基本的assert即可。
四、Pytest的运行方式
命令行运行方式:
- 直接在命令行中输入pytest, 它将自动查找并执行当前目录,以及子目录中所有以test开头的测试用例文件。
- 运行指定目录的测试用例,指定要运行的目录拍test将查找并运行该目录及其子目录下的测试用例。
pytest /testcase/login
- 运行指定文件的测试:
pytest /testcase/login/test_login.py
- 使用"-k"参数并提供测试用例或测试目录的名称来运行测试用例
-
指定目录
pytest -k login -
指定测试文件
pytest -k test_login -
指定测试函数
pytest -k test_write_content
参数说明:
-s 表示输出调试信息,包括print信息
-v显示更加详细的信息
-K指定运行测试用例函数、文件或目录。
主函数方式运行:
用于执行pytest的测试,它可以通过传递命令行参数来配置和控制测试的执行。
if __name__ == '__main__':
pytest.main(['-vs'])
通过读取pytest框架的配置文件--pytest.ini
Pytest.ini文件是pytest的测试框架的配置文件,它允许你设置各种配置选项以自定义的行为运行测试,一般是在项目的根目录下创建pytest.ini,pyest将在运行测试的时候读取该文件并应用其中的配置。
配置文件参数说明:
- addopts: 用于在运行测试时传递额外的命令行选项
- testpaths: 用于指定pytest在哪些目录下查找测试文件,它允许你定义一个或多个目录,告诉pytest这些目录下寻找文件。
- python_files: 用于指定测试文件的命名模式匹配
- pytest_classes: 用于指定测试类的命名模式匹配
- python_functions: 用于指定测试函数的命名匹配
- markers: 用于注册自定义标记
[pytest]
addopts = -vs -alluredir=./report/temp --clean-alluredir --rerun=3 -m "P1 or P3" -n 3
testpaths = ./testcase/other
python_files = test_*.py
python_classes = Test*
python_functions = test_*
五、插件系统
1)pytest提供了一个插件设置多进程/多线程数并发执行,使测试用例可以在多个进程环境下并发执行,提高执行效率:pytest-xdist提供一个-n选项设置多进程/多线程数量,安装插件:
pip install pytest-xdist
使用:pytest.main(['-n=3']) 或者 addopts = -vs -n 3
- 重run测试用例:当我们做自动化测试时,执行测试用例遇到网络波动或者其他不确定因素,导致测试用例运行失败,这并不是测试的失败,这时需要用到重新run失败的测试用例:
pip install pytest-rerunfailures
#应用:
@pytest.mark.flaky(reruns=3, reruns_delay=2)
def test_login_success(self):
import random
assert random.choice([True,False]), '测试失败'
#reruns失败重run的次数,reruns_delay:失败重run的时间间隔
3)测试用例执行顺序:在默认情况下,pytest会按特定的顺序执行,可以使用pytest ordering插件儿去自定义测试用例的执行顺序。
安装插件:
pip install pytest-ordering
#应用:
@pytest.mark.run(order=3)
def test_add_user1(self):
print("新增用户1")
六、pytest的分组执行和跳过执行
1) 分组执行:在Pytest中,可以使用标记或者参数化来实现测试用例的分组执行,分组执行是一种将测试用例按照特定的标记或者条件进行组织的运行方法:
- 在测试用例中打上标记:
@pytest.mark.P1
def test_open_new_label(self, not_login_driver):
label_page=LabelPage(not_login_driver)
label_page.open_new_lable_operate()
- 在pytest.ini中注册:
makers =
P1 - 使用-m 去执行分组的测试用例:pytest -m "P1"
- 跳过执行用
- 无条件掉跳过 @pytest.mark.skip
- 有条件跳过 @pytest.mark.skipif(condition=num==3, reason='不符合条件')
七、参数化处理
在Pytest,参数化是一种将相同的测试用例以不同的参数运行多次的机制,这可以帮助简化测试代码,使其更灵活和更易维护。达到覆盖不同的测试场景,通过@pytest.mark.parametrize装饰器去实现。
八、关于setup/teardown/setup_class/teardown_class/fixture的使用
【今天搞得太多了, 时间关系关于第七和第八以后有时间了详细信息再补上】

浙公网安备 33010602011771号