钓鱼网站开发教程,中音阶梯网站谁家建设,看一个网站是哪里做的,域名注册后能开始建设网站吗引言
pytest-bdd 是一个专为Python设计的行为驱动开发#xff08;BDD#xff09;测试框架#xff0c;它允许开发人员使用自然语言#xff08;如Gherkin#xff09;来编写测试用例#xff0c;从而使测试用例更易于理解和维护。
安装
通过pip安装
pip install pytest-b…引言
pytest-bdd 是一个专为Python设计的行为驱动开发BDD测试框架它允许开发人员使用自然语言如Gherkin来编写测试用例从而使测试用例更易于理解和维护。
安装
通过pip安装
pip install pytest-bdd介绍
特性文件Feature File定义了要测试的系统功能。通常以.feature为扩展名并使用Gherkin语言编写。特性文件包含特性名称、描述以及一个或多个场景。 场景文件Scenario File定义了特定场景的步骤。虽然pytest-bdd不直接要求场景文件具有特定的扩展名或格式但通常会将场景步骤的定义放在Python测试文件中并使用pytest-bdd提供的装饰器来映射场景文件中的步骤。 步骤定义将特性文件中的步骤映射到Python代码中的函数。这些函数使用pytest-bdd提供的given、when、then等装饰器来定义。 钩子在特定测试事件如测试开始或结束时调用的函数。pytest-bdd提供了几个内置钩子如before_scenario、after_scenario、before_step、after_step等允许在测试的不同阶段执行自定义代码。
简单代码实现
feature文件编写
Feature: TestApiScenario: Successful TestGiven: 我是接口测试When: 调用 www.baidu.com 接口When: 使用 get 请求Then: 调用成功python文件编写
import pytest
from pytest_bdd import scenarios, given, when, then, parsers
import requestsclass ApiCaller:def __int__(self):self.api Noneself.methods Noneself.types Noneself.params Nonedef call_api(self):print(self.api)result requests.request(method,http:// self.api)return resultscenarios(test.feature)pytest.fixture
given(我是测试接口)
def api_caller():return ApiCaller()when(parsers.parse(调用 {api} 接口))
def api(api_caller, api):api_caller.api apiwhen(parsers.parse(使用 {methods} 请求))
def method(api_caller, methods):api_caller.methods methodsthen(调用成功)
def asserts(api_caller):result api_caller.call_api()assert result.status_code 200
运行
pytest test.py拓展
通过上面简单的使用我们知道行为驱动测试是通过pytest-bdd提供的given、when、then等装饰器来获取到feature文件中的参数然后来进行编码测试。所以我们可以编写一个较为通用的python测试脚本来运行所有的feature文件。这样我们只需要通过写feature文件就可以进行接口自动化测试了。
import pytest
from pytest_bdd import scenarios, given, when, then, parsers
import requestsclass ApiCaller:def __int__(self):self.api Noneself.methods Noneself.types Noneself.params Noneself.headers Nonedef call_api(self):result requests.request(self.methods,http:// self.api)return resultscenarios(test1.feature)pytest.fixture
given(我是测试接口)
def api_caller():return ApiCaller()when(parsers.parse(调用 {api} 接口))
def api(api_caller, api):api_caller.api apiwhen(parsers.parse(使用 {methods} 请求))
def method(api_caller, methods):api_caller.methods methodswhen(parsers.parse(参数类型 {types}))
def types(api_caller, types):api_caller.types typeswhen(parsers.parse(参数 {params}))
def params(api_caller, params):api_caller.params paramswhen(parsers.parse(参数为空))
def params_none():passwhen(parsers.parse(请求头 {headers}))
def headers(api_caller, headers):api_caller.headers headerswhen(parsers.parse(请求头为空))
def params_none():passthen(调用成功)
def asserts(api_caller):result api_caller.call_api()assert result.status_code 200我们把一些特殊场景提前定义好比如请求头为空参数为空。也可以根据自身业务来继续添加一些特殊场景比如不同的校验方式等。这样我们就可以通过一个python脚本来实现不同的feature文件进行接口自动化测试。