pytest-bdd 接口测试
时间: 2024-12-30 17:32:16 浏览: 7
### 使用 Pytest-BDD 实现 API 接口测试
#### 安装依赖包
为了使用 `pytest-bdd` 和其他必要的工具来实现 API 测试,需要安装一些 Python 包。可以通过 pip 来完成这些操作。
```bash
pip install pytest-bdd requests
```
#### 编写特性文件
创建一个 `.feature` 文件描述待测的行为。这里以登录接口为例:
```gherkin
Feature: 用户登录功能
Scenario Outline: 成功登录
Given 用户名 "<username>" 密码 "<password>"
When 发送 POST 请求至 "/login"
Then 应返回状态码 "200"
And 响应体中包含字段 "token"
Examples:
| username | password |
| user1 | pass1 |
| user2 | pass2 |
```
此部分定义了一个简单的场景轮廓,其中包含了多个例子用于参数化测试用例[^3]。
#### 创建步骤定义模块
接下来,在 Python 脚本里为上述 Gherkin 描述编写对应的步骤函数。这通常放在名为 `steps.py` 的文件内:
```python
import json
from behave import given, when, then
import requests
@given('用户名 "{username}" 密码 "{password}"')
def set_credentials(context, username, password):
context.credentials = {"username": username, "password": password}
@when('发送 POST 请求至 "{endpoint}"')
def send_post_request(context, endpoint):
url = f"http://example.com{endpoint}"
response = requests.post(url=url, data=json.dumps(context.credentials))
context.response = response
@then('应返回状态码 "{status_code:d}"')
def check_status_code(context, status_code):
assert context.response.status_code == status_code
@then('响应体中包含字段 "{field_name}"')
def verify_response_field(context, field_name):
body = context.response.json()
assert field_name in body.keys(), f'"{field_name}" not found in {body}'
```
这段代码实现了对 HTTP POST 请求的封装,并提供了断言方法来校验服务器端反馈的信息是否符合预期[^4]。
#### 执行测试案例
最后一步就是运行测试命令了。可以在终端输入如下指令启动测试过程:
```bash
pytest --bdd-features=./path/to/features/your_feature_file.feature ./tests/
```
这样就可以利用 BDD 方式来进行 API 接口测试了。这种方式不仅让非技术人员更容易理解测试意图,同时也提高了团队协作效率[^5]。
阅读全文