Pytest精通指南(03)命令行选项和用例收集规则

46 篇文章 1 订阅
28 篇文章 1 订阅


请添加图片描述

Pytest 命令行

在命令行中,通过执行pytest -hpytest --help命令,用户可以访问pytest的详尽帮助文档。

这个帮助文档是一个快速且有效的资源,用于了解pytest的使用方法、它所提供的各种功能和命令行选项。

这个帮助文档不仅列出了所有可用的命令行选项及其描述,还提供了关于如何编写和组织测试代码的实用指导。

用户可以通过文档了解如何编写有效的测试函数、如何组织测试文件的结构、如何使用断言来验证测试结果,以及如何利用fixtures来管理测试中的共享资源。

此外,帮助文档还可能包括有关参数化测试、编写插件、集成第三方库、配置pytest行为的高级主题,以及如何在持续集成/持续部署**(CI/CD)**环境中使用pytest的指南。

注意:虽然命令多的吓人,但是常规工作中根本用不到

请添加图片描述

Pytest 命令行-选项分类

  • 环境配置选项:设置pytest的环境配置,如设置日志级别、覆盖配置文件、设置测试模式等。
  • 测试过滤选项:过滤和选择测试用例,如指定测试目录、选择特定测试模块、运行指定测试函数等。
  • 测试执行选项:控制pytest的测试执行过程,如重试失败测试、生成测试报告、并行执行测试等。

注意:命令允许组合使用,如下所示

# pytest.main([测试信息输出, 指定测试用例, 测试报告输出, 测试失败次数])
 
pytest.main(["-q", "test_login.py", '--html=./report.html', "-x"])
环境配置选项
  • –version:打印 pytest 的版本号。
  • -h,–help:显示 pytest 的命令行选项和使用说明。
  • -v,–verbose:增加输出的详细程度,可以多次使用以获取更详细的输出。
  • -q,–quiet:减少输出的详细程度,可以多次使用以获取更简洁的输出。
  • –traceconfig:显示解析和加载配置文件时的详细信息。
  • –pdb:启用调试器,当测试失败时,会自动进入 Python 调试器。
  • –pdbcls=CLASSNAME:使用自定义的调试器类。
  • –capture:设置pytest的标准输出流捕获方式,有三个选项:no不捕获、stdout仅捕获标准输出、stderr仅捕获标准错误、 sys捕获两者。
  • –norecursedirs=dir1 dir2 …:指定不需要递归搜索的目录列表。
  • –rootdir=PATH:指定pytest的根目录,通常是包含 pytest.ini 配置文件的目录。
测试过滤选项
  • path:指定要运行的测试文件或目录的路径。可以是相对路径或绝对路径。
  • -m <marker_expression>:仅运行带有指定标记的测试用例
  • -k <expression>:根据表达式选择测试用例。表达式可以是字符串、正则表达式或布尔表达式
  • –lf,–last-first:首先运行上次测试失败的测试用例。
  • –ff,–failed-first:首先运行上次失败的测试用例,并在所有测试结束后再次运行这些失败的测试用例。
  • –sw:仅重新运行上次修改过的测试模块。
  • –last-failed-no-failures:如果上次运行中有失败的测试用例,则仅运行这些失败的测试用例;否则,不执行任何测试。
  • –collect-only:仅收集测试用例而不执行它们。这可以用于检查测试收集阶段的行为。
  • –trace:显示pytest的内部跟踪信息。
  • –count n:限制要运行的测试用例数量不超过n
测试执行选项
  • -n,–numprocesses=n:指定要并行运行的进程数。这对于在多个CPU核心上并行执行测试很有用
  • -x,–exitfirst:在第一个失败的测试用例后立即退出测试执行。
  • –maxfail=n:设定在第n次测试失败后停止测试执行。
  • –reruns=n:在测试用例失败时重新运行n次。
  • –tb=STYLE:设置错误跟踪信息的显示格式,其中STYLE可以是longshortlinenativeno
  • –show-capture=ITEM:控制是否显示捕获的输出,ITEM可以是allfailedno
  • –disable-warnings:禁用pytest的警告信息输出
  • –junit-xml=PATH:生成JUnit XML格式的测试报告。

常用命令汇总

测试信息输出
# 设置pytest的执行参数 "-q":安静模式, 不输出环境信息
pytest.main(["-q"])
 
# 设置pytest的执行参数 "-s":显示程序中的print/logging输出
pytest.main(["-s"])
 
# 设置pytest的执行参数 "-v":丰富信息模式, 输出更详细的用例执行信息
pytest.main(["-v"])
指定用例执行

执行全部用例

# 直接执行pytest.main():自动查找当前目录下,以`test_`开头或者以`_test`结尾的 .py 文件
pytest.main()

执行指定py文件的用例

# main函数中填写py文件,会运行指定文件内的测试任务;
pytest.main(["test_login.py"])

执行指定方法的测试用例

# main函数中填写 `py文件::类::方法` (例如:test_mod.py::TestClass::test_method)
# 会运行指定文件内的、指定类的、指定测试任务;

pytest.main(["test_login.py::Test_Login::test_login"])

执行被标记的测试任务

# 设置pytest的执行参数 "-m slow":会执行被装饰器 `@pytest.mark.marker` 装饰的所有测试用例;
# @pytest.mark.marker中,`marker` 字符名称可以自定义;例如定义为 `level1`
@pytest.mark.level1
def test_a(self):
    pass
 
pytest.main(['-m=level1'])
测试报告输出

allure 测试报告输出,详细使用方法见后续篇章

# 需要安装 allure-pytest
# 设置pytest的执行参数 "--alluredir=./report"
## --alluredir 	: 生成报告类型
## ./report		: 生成报告存放路径及名称
 
pytest.main(['--alluredir=./report'])

html 静态报告

# 需要安装 pytest-html
# 设置pytest的执行参数"--html=./report.html":执行测试文件并生成html格式的报告
## --html			: 生成报告类型
## ./report.html	: 生成报告存放路径,及报告名称
 
pytest.main(['--html=./report.html'])

# '--self-contained-html':将html的css样式合并到测试报告中
 
pytest.main(['--html=./report.html' , '--self-contained-html'])

xml 格式报告(没用过)

# 设置pytest的执行参数 "--junitxml=./report.xml":执行测试文件并生成xml格式的报告;
# 可以与jenkins做集成时使用
## --junitxml		: 生成报告类型
## ./report.xml		: 生成报告存放路径,及报告名称
 
pytest.main(["--junitxml=./report.xml"])

log 格式报告(没用过)

# 设置pytest的执行参数 "--resultlog=./report.txt":执行测试文件并生成log格式的报告(4.0以上版本被移除)
## --resultlog		: 生成报告类型
## ./report.txt		: 生成报告存放路径,及报告名称
 
pytest.main(["--resultlog=./report.txt"])

注意:输出测试报告的时候,如果允许的测试用例文件不在根目录下,可能会生成失败

可以在根目录编写一个main.py专门用来启动测试

测试执行策略

失败 1 次停止测试

# 设置pytest的执行参数 -x":第01次失败就停止测试 
pytest.main(["-x"])

指定最大失败次数后,停止测试

# 设置pytest的执行参数 "--maxfail=2":第02次失败就停止测试 
pytest.main(["--maxfail=2"])

指定失败重试次数后,停止测试

# 需要安装 pytest-rerunfailures
# 设置pytest的执行参数 "--reruns=NUM"(NUM是重试次数):测试用例运行失败时,重新运行用例 

pytest.main(["--reruns=2"])

指定用例并发进程数

# 需要安装 pytest-xdist
# 设置pytest的执行参数 "-n NUM"(NUM是需要并发的进程数):支持多线程运行测试用例 

pytest.main(["-n=2"])

Pytest 编写测试用例规则

测试文件命名规则

  • 测试文件通常以 test_ 开头或者以 _test 结尾;
  • 例如 test_example.pyexample_test.py
  • 另外,Pytest 还会查找以 test_ 开头或者以 _test 结尾的目录,并在这些目录及其子目录中查找测试文件。

测试类命名规则

  • 测试类必须以 Test 开头,并且不能带有 __init__ 方法(因为它是类的构造函数,不是测试方法)。
  • 测试类通常应该继承自 unittest.TestCase 或其他测试基类,但这并不是强制性的。

测试函数命名规则

  • 测试函数通常以 test_ 开头或者以 _test 结尾
  • 例如 test_function()function_test()
  • 测试函数通常不能带有任何参数(除了 self,如果它是一个类的方法)

Pytest 收集测试用例规则

规则描述示例
基本规则默认行为不提供任何参数时,pytest 在当前目录及其子目录中查找以 test_ 开头或以 _test结尾的 Python 文件,以及这些文件中的以 test_ 开头的函数和类方法。
通过路径指定指定目录pytest some_directory/
通过文件名指定指定文件pytest test_example.py
通过表达式指定按关键字匹配pytest -k "test_something"
通过节点指定指定函数pytest test_example.py::test_function
指定类pytest test_example.py::TestClass
指定类方法pytest test_example.py::TestClass::test_method
使用通配符模糊匹配文件名pytest test_*.py匹配所有以 test_ 开头的文件
结合目录和通配符在指定目录下模糊匹配文件名pytest some_directory/test_*.py
排除文件或目录使用 --ignorepytest --ignore some_directory/ignore_this_dir/
指定测试根目录使用 --rootdirpytest --rootdir=/path/to/root/dir
按文件结构查找使用 -p 或 --pyargspytest -p package.module
指定Python解释器使用 --pythonpathpytest --pythonpath=/path/to/python/lib
其他选项如 -v(详细输出)、-q(简洁输出)等pytest -v(详细输出)

常用命令演示

示例代码

test_case_01.py文件代码

import pytest


def addition(x, y):
    return x + y


def test_01_a():
    print("正在执行 test_a 函数...")
    assert addition(3, 5) == 8


class TestClassCase01:
    def test_01_b(self):
        assert "a" in "apple"

    def test_01_c(self):
        assert "a" in "apple"


if __name__ == '__main__':
    pytest.main()

test_case_02.py文件代码

class TestCase01:

    def test_02_a(self):
        print("正在执行 test_02_a 函数...")

    def test_02_b(self):
        print("正在执行 test_02_b 函数...")

默认行为

pytest

等价于:python -m pytestpytest ./命令

请添加图片描述

指定目录

请添加图片描述

指定文件

请添加图片描述

按关键字匹配

请添加图片描述

指定函数

请添加图片描述

指定类

请添加图片描述

指定方法

请添加图片描述

模糊匹配文件名

请添加图片描述

排除文件或目录

请添加图片描述

其他的后续篇章会有体现

暂略

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要休息的KK.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值