Pytest-Bdd-Playwright 系列教程(14):Docstring 参数

Pytest-Bdd-Playwright 系列教程(14):Docstring 参数

前言

  • 在自动化测试的过程中,我们经常需要处理复杂的测试数据或需要输入多行文本。Pytest-Bdd
    提供了一种解决方案------Docstring 参数,它能够有效地解决这些问题;
  • Docstring 参数允许在 Gherkin 语法的步骤中嵌入多行文本,这在多种测试场景下都非常有用,包括但不限于复杂业务规则的描述、长文本输入的测试、详细测试步骤的记录、复杂预期结果与API 响应内容的验证以及文本内容的比对等。

一、什么是docstring?

在 Python 中,Docstring 是指位于函数、模块或类定义开头的字符串,通常用于描述其用途和参数等信息。而在 Pytest-BDD 中,Docstring 被赋予了新的含义,它是指在 Gherkin 步骤中定义的多行文本,这些文本使用三重引号 (""") 来包围。这种特性使得测试编写者能够在测试步骤中直接嵌入大量文本数据,而无需通过外部文件加载或硬编码的方式。

二、基本语法

在 Pytest-BDD 中使用 Docstring 的基本语法如下所示:

gherkin 复制代码
When 这是一个简单的docstring:
      """
      这是一个测试文本
      包含两行内容
      """

上述示例中,When 关键字后面的步骤定义了一个 Docstring,其中包含了两行文本。这些文本将作为一个整体传递给相应的步骤函数。

三、主要特点

  • 单个字符串传递:无论 Docstring 包含多少行文本,它都会作为一个单个的字符串传递给步骤函数;
  • 多行支持:多行文本之间通过换行符 \n 分隔;
  • 自动处理缩进:Pytest-BDD 会自动移除 Docstring 内部的前导缩进,确保文本格式的一致性;
  • 专属性质:只有在定义了 Docstring 的步骤中,才能使用 Docstring 参数。

四、实际例子

gherkin 复制代码
# features/docstring_demo.feature
Feature: 文档字符串演示

  Scenario: 带有docstring的场景
    Given 准备测试docstring
    When 这是一个简单的docstring:
      """
      这是一个测试文本
      包含两行内容
      """
python 复制代码
# tests/test_docstring_demo.py
from functools import partial
from pytest_bdd import given, when, parsers, scenario

scenario = partial(scenario, 'docstring_demo.feature')

@scenario('带有docstring的场景')
def test_docstring_demo():
    pass

@given('准备测试docstring')
def _():
    pass

@when(parsers.parse('这是一个简单的docstring:\n{docstring}'))
def step_with_docstring(docstring):
    # docstring参数将包含完整的文档字符串内容
    assert docstring == "这是一个测试文本\n包含两行内容"

运行命令:

bash 复制代码
pytest ./tests/test_docstring_demo.py

运行结果如下:

五、注意事项

  • 如果步骤没有定义docstring但在函数中使用了docstring参数,会抛出错误。
  • docstring的缩进会被自动处理,例如:
gherkin 复制代码
Then 步骤
"""
    即使有缩进
    也会被去除
"""

实际得到的字符串会是:"即使有缩进\n也会被去除"

六、使用建议

  • 长文本数据:当需要传递较长的测试数据时,使用 Docstring 可以使代码更加简洁和易读;
  • 多行文本内容:适合用于测试多行文本内容,如日志文件、配置文件等;
  • 复杂输出结果:可以用于验证复杂的输出结果,特别是当输出结果包含多行文本或结构化数据时;
  • API 响应验证:在测试 API 接口时,使用 Docstring 可以方便地定义和验证复杂的 JSON 响应。

总结

通过合理使用 Docstring 参数,我们可以更好地组织和管理 BDD 测试用例,使测试代码更加清晰和专业。在实际项目中,建议根据具体需求灵活运用这一功能,以提升自动化测试的效率和可维护性。

相关推荐
维度攻城狮2 小时前
ros2参数通信案例
开发语言·windows·python·ros2·参数通信
深圳佛手2 小时前
不用智能体开发框架,如何调用工具?
前端·python
清水白石0082 小时前
Python 与尾递归:为何不优化?如何优雅绕过?
开发语言·python
王大傻09282 小时前
使用python for循环与ord() + chr()实现字符串加密
开发语言·python
540_5403 小时前
ADVANCE Day35
人工智能·python·深度学习
郑泰科技3 小时前
python深度学习报错:Original error was: No module named ‘numpy.core._multiarray_umath‘
python·深度学习·numpy
不要em0啦3 小时前
从0开始学python:函数与数据容器
开发语言·python
无限码力4 小时前
华为OD技术面真题 - Python开发 -3
python·华为od·华为od技术面真题·华为od面试八股文·华为od面试python八股文·华为od技术面八股真题
0思必得04 小时前
[Web自动化] Requests模块响应的内容
运维·前端·python·自动化·html·web自动化
XLYcmy4 小时前
高级密码猜测生成器AdvancedPasswordGenerator密码生成器程序详细分析
开发语言·python·算法·网络安全·开发工具·源代码·口令安全