现在,无论是开发还是使用服务,我们每个人都面临着 REST API 的挑战。同时,我们正处于微服务的流行时代,我们将业务逻辑拆分为多个独立的小服务。这些服务大多遵循 RESTful 原则,并使用 JSON 格式进行通信,因为其简单性使其成为最广泛使用的格式。
pyhttptest - 这是一个命令行工具,用于对 RESTful APIs 进行 HTTP 测试。
此工具通过三个简单的步骤实现自动化测试。
1. 安装软件包
pip install pyhttptest
2. 描述针对您的 API 服务的 HTTP 请求测试用例
使用简单且广泛使用的 JSON 格式在文件中描述您的 HTTP 请求测试用例。
单个测试用例定义示例
发送一个 HTTP GET 请求
- 创建一个JSON文件,例如,
data/test_server_status.json
{ "name": "TEST: Get server status", "verb": "GET", "endpoint": "/get", "host": "https://httpbin.org", "headers": { "Accept-Language": "en-US" } }
- 创建一个JSON文件,例如,
发送一个 HTTP POST 请求
- 创建一个 JSON 文件,例如,
data/test_create_html_bin.json
{ "name": "TEST: Create an HTML bin", "verb": "POST", "endpoint": "post", "host": "https://httpbin.org", "payload": { "content": "Hello, world!" } }
- 创建一个 JSON 文件,例如,
多个测试用例定义示例
- 创建一个 JSON 文件,例如,
data/requests.json
[
{
"name": "TEST: List all users",
"verb": "GET",
"endpoint": "api/v1/users",
"host": "http://localhost:8085/",
"headers": {
"Accept-Language": "en-US"
},
"query_string": {
"limit": 1
}
},
{
"name": "TEST: Add a new user",
"verb": "POST",
"endpoint": "api/v1/users",
"host": "http://localhost:8085/",
"payload": {
"username": "pyhttptest",
"email": "admin@pyhttptest.com"
}
},
{
"name": "TEST: Modify an existing user",
"verb": "PUT",
"endpoint": "api/v1/users/XeEsscGqweEttXsgY",
"host": "http://localhost:8085/",
"payload": {
"username": "pyhttptest"
}
},
{
"name": "TEST: Delete an existing user",
"verb": "DELETE",
"endpoint": "api/v1/users/XeEsscGqweEttXsgY",
"host": "http://localhost:8085/"
}
]
3. 运行命令并获得报告
pyhttptest execute data/test_server_status.json
单个测试用例的报告
pyhttptest execute data/requests.json
多个测试用例的报告
您可以传递给.json
文件的属性包括:
name
- 测试用例的名称。verb
- HTTP 方法。endpoint
- 您想要在服务器上调用的资源。host
- 服务器主机地址。headers
- HTTP 头部。支持所有 HTTP 头部字段。query_string
- URL 问号后的查询字符串参数。payload
- 数据。
最佳实践
您可能会问,在我的现有/新项目中如何添加、结构和组织测试用例。每个含有测试的 Python 项目都会在其项目目录中有一个名为tests/
的文件夹。
根据惯例,像unittest
和pytest
这样的框架会发现并执行 Python 脚本中定义的测试用例。为了不混淆这些测试并保持惯例,我建议在项目根目录创建一个名为live_tests/
的新目录。
在这个新目录中,您可以放入所有定义 API 测试用例的.json
文件。这样做可以轻松区分您的测试,但这真的取决于您!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。