第一章、pytest概述
Pytest is a framework that makes building simple and scalable tests easy. Tests are expressive and readable—no boilerplate code required. Get started in minutes with a small unit test or complex functional test for your application or library.
Pytest 是一个功能强大且易于使用的 Python 测试框架,用于编写和运行单元测试、集成测试和功能测试。以下是 Pytest 测试框架的一些主要特点和用法:
一、概述
- pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,容易上手
- pytest可以和selenium,requests,appium等第三方库结合实现web自动化,借口自动化,app自动化
- pytest可以实现测试用例的跳过以及rerun失败用例重试
- pytest可以和allure生成非常美观的测试报告
- pytest可以和jenkins持续集成
- pytest有很多非常强大的插件,并且这些插件能够实现很多的实用的操作
- pytest
- pytest-html(生成html格式的自动化测试报告)
- pytest-xdist(测试用例分布式执行,多CPU分支)
- pytest-ordering(用于改变测试用例的执行顺序)
- pytest-rerunfailures(用例失败后重跑)
- allure-pytest(用于生成美观的测试报告)
1、简单易用
- Pytest 的语法简单直观,容易上手。
- 不需要大量的样板代码,测试用例可以以函数形式定义。
2、自动发现测试用例
- Pytest 能够自动发现和收集项目中的测试用例,无需手动配置测试套件。
3、丰富的断言
- Pytest 提供了丰富的断言(assert)机制,使得编写测试用例更加灵活和清晰。
4、参数化测试
- 使用
@pytest.mark.parametrize
装饰器,可以轻松实现参数化测试,运行多组输入进行测试。
5、Fixture 支持
- Pytest 支持 Fixture,用于提供测试用例所需的资源和环境。
- Fixture 可以在测试用例运行前进行 setup 操作,在测试用例运行后进行 teardown 操作。
6、插件系统
- Pytest 具有丰富的插件系统,可以通过插件扩展其功能,满足各种不同需求。
7、并行测试
- Pytest 支持并行执行测试,提高测试效率。
二、安装pytest
1、安装
pip install pytest
2、验证安装
pytest --version
3、pytest文档
https://docs.pytest.org/en/latest/contents.html
三、默认命名规则
在执行pytest命令时,会自动从当前目录及子目录中寻找符合下述约束的测试函数来执行。
1、测试文件以test_ 开头(以 _test结尾也可以)
所有的单测文件名都需要满足test_*.py格式或*_test.py格式。
2、测试类以Test开头,并且不能带有init方法
在单测文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以T开头,不然pytest是不会去运行该class的)
3、测试函数以test开头
在单测类中,可以包含一个或多个test_开头的函数。
四、pytest.ini 配置文件
Pytest 的配置文件名为 pytest.ini
,它用于配置 pytest 的行为,可以在项目的根目录下创建该文件。以下是一些常用的 pytest 配置选项及其详解:
-
[pytest] 部分:
addopts
:用于指定额外的命令行选项和标记。例如,addopts = -v -s
表示在运行 pytest 时使用-v
(增加详细输出)和-s
(输出标准输出流)选项。markers
:用于定义自定义的标记(marker),以便在测试函数或测试模块中使用。例如,markers = slow: mark tests as slow
可以定义一个名为slow
的标记,并提供其说明。
-
[pytest-marks] 部分:
- 在此部分中,您可以定义标记(marker)的别名和说明。例如,
slow: mark tests as slow
定义了slow
标记的别名和说明。
- 在此部分中,您可以定义标记(marker)的别名和说明。例如,
-
[pytest-rerunfailures] 部分:
reruns
:指定在测试失败时重新运行测试的次数。reruns_delay
:指定在重新运行失败测试之间等待的时间(秒)。
-
[pytest-cov] 部分:
cov
:指定要计算代码覆盖率的模块或路径。cov-report
:指定生成代码覆盖率报告的格式。
-
[pytest-html] 部分:
html_report_title
:指定生成的 HTML 报告的标题。
-
其他配置选项:
python_files
:匹配测试文件的文件名模式。python_classes
:匹配测试类的名称模式。python_functions
:匹配测试函数的名称模式。norecursedirs
:排除指定的目录,不进行递归查找测试文件。
配置文件的使用可以让您在项目中统一管理 pytest 的配置选项,从而使测试运行更加方便和可控。您可以根据项目的需要,选择性地配置不同的选项,以满足不同的测试需求
第二章、pytest运行方式
一、主函数模式(相关语法同时适合于主函数模式和命令行模式)
可以在 Python 脚本中调用 Pytest 提供的 main()
函数来运行测试用例。例如:
import pytest
pytest.main()
pytest.main(["test_file.py", "-vs"])
1、默认执行当前目录及其子目录中所有符合命名条件的模块的用例
这将会执行当前目录及其子目录中所有以
test_*.py
或*_test.py
命名的文件中的测试用例。
2、不传参数
实际上,pytest.main()
方法默认情况下不需要传递任何参数,它会自动识别项目中的测试文件并执行测试。通常情况下,您可以简单地调用 pytest.main()
而不传递任何参数来运行测试。
这将会执行当前目录及其子目录中所有以 test_*.py
或 *_test.py
命名的文件中的测试用例。
如果需要传递参数,可以像在命令行中一样将参数作为字符串列表传递给 pytest.main()
方法。但通常情况下,不需要手动传递参数,除非您需要在代码中动态设置一些特定的参数。
3、传入参数(传入的参数同时适合于主函数模式和命令行模式)
pytest.main()
方法可以接受一个包含命令行参数的列表作为参数,这些参数将会被传递给 Pytest 运行测试用例的过程。常见的参数包括:
这些选项可以通过命令行传递给 Pytest,以控制测试的执行行为和输出结果。
1、测试文件或目录(默认为当前目录及其子目录下所有符合条件的文件)
指定要运行的测试文件或目录。例如:
pytest.main(["test_file.py"])
或pytest.main(["test_directory/"])
。
2、命令行选项
指定要在运行测试时使用的命令行选项。例如:
pytest.main(["-v", "-s"])
表示运行测试时增加详细输出和输出标准输出流。
-v, --verbose:
- 运行测试时增加详细输出。通常情况下,Pytest 只输出测试结果的摘要信息,使用
-v
选项可以使 Pytest 输出更加详细的信息,包括每个测试用例的执行结果、测试函数的名称等。 - 显示更详细的信息
- -vs可以一起使用
-s, --capture=no:
- 输出标准输出流。Pytest 默认会捕获测试过程中的标准输出流,使用
-s
选项可以禁止捕获标准输出流,从而在测试过程中实时看到打印到标准输出的信息。 - 表示输出调试信息,包括print打印的信息
-k EXPRESSION:
- 通过表达式来选择要运行的测试用例。例如:
-k test_login
表示运行名称中包含 "test_login" 的测试用例。
3、标记
使用
-m
参数可以指定要运行的测试用例的标记(marker)。例如:pytest.main(["-m", "slow"])
表示运行标记为slow
的测试用例。
-m MARKEXPR:
- 通过标记(marker)来选择要运行的测试用例。例如:
-m slow
表示运行标记为 "slow" 的测试用例。
4、其他参数
您还可以传递其他的命令行参数,如
--cov
、--cov-report
等,用于指定代码覆盖率、生成报告等功能。
--cov:
- 计算代码覆盖率。使用
--cov
选项可以指定要计算代码覆盖率的模块或路径。
--cov-report:
- 指定生成代码覆盖率报告的格式。常见的报告格式包括
term
(终端输出)、html
(HTML 格式报告)、xml
(JUnit XML 格式报告)等。
总之,pytest.main()
方法可以接受任意数量和类型的参数,用于配置 Pytest 的运行行为,这些参数可以通过列表的形式传递给该方法。
二、命令行模式
可以在命令行中使用 pytest
命令来运行测试用例。例如:
pytest test_file.py # 运行指定文件中的测试用例
pytest test_directory/ # 运行指定目录下所有文件中的测试用例
pytest #运行当前工作目录下符合条件文件中的测试用例
三、通过读取pytest.ini配置文件运行