httpx 接口测试教程
httpx 接口测试教程
httpx是一个功能强大的 Python HTTP 库,可用于接口测试。以下是一个httpx接口测试教程:
安装httpx(CSDN 博客)
使用以下命令安装httpx:
pip install httpx |
基本使用
GET 请求(CSDN 博客)
发送一个简单的 GET 请求,并获取响应状态码和响应内容(以 JSON 格式为例):
import httpx r = httpx.get("http://httpbin.org/get") print(r.status_code) print(r.json()) |
POST 请求(CSDN 博客)
发送带参数的 POST 请求:
import httpx payload = {'key1': 'value1', 'key2': 'value2'} r = httpx.post("http://httpbin.org/post", data=payload) print(r.json()) |
异步调用(CSDN 博客)
httpx支持异步操作,这在需要同时发送多个请求时能显著提高效率。
import httpx import asyncio async def main(): async with httpx.AsyncClient() as client: resp = await client.get('http://httpbin.org/get') result = resp.json() print(result) asyncio.run(main()) |
处理认证
基本认证
如果接口需要基本认证,可以这样做:
import httpx url = "http://httpbin.org/basic-auth/user/pass" auth = ("user", "pass") r = httpx.get(url, auth=auth) print(r.status_code) |
Bearer Token 认证
对于使用 Bearer Token 认证的接口:
import httpx url = "http://your-api-url.com" headers = {"Authorization": "Bearer your_token_here"} r = httpx.get(url, headers=headers) print(r.status_code) |
断言与响应验证
通常需要验证接口返回的状态码、响应体等是否符合预期。
import httpx r = httpx.get("http://httpbin.org/get") # 验证状态码是否为200 assert r.status_code == 200 # 验证响应体中是否包含特定字段 response_data = r.json() assert "url" in response_data |
结合测试框架使用
可以将httpx与测试框架(如unittest或pytest)结合使用,进行更规范的接口测试。
使用pytest
安装pytest:
pip install pytest |
编写测试用例:
import httpx def test_get_request(): r = httpx.get("http://httpbin.org/get") assert r.status_code == 200 def test_post_request(): payload = {'key': 'value'} r = httpx.post("http://httpbin.org/post", data=payload) assert r.status_code == 200 assert r.json()["form"] == payload |
运行测试:
pytest |
使用unittest
编写测试用例:
import unittest import httpx class TestHTTPX(unittest.TestCase): def test_get_request(self): r = httpx.get("http://httpbin.org/get") self.assertEqual(r.status_code, 200) def test_post_request(self): payload = {'key': 'value'} r = httpx.post("http://httpbin.org/post", data=payload) self.assertEqual(r.status_code, 200) self.assertEqual(r.json()["form"], payload) if __name__ == '__main__': unittest.main() |
运行测试:
python -m unittest your_test_file.py |
通过以上步骤,你可以使用httpx进行各种类型的接口测试,从简单的请求发送到复杂的认证处理和断言验证,以及与主流测试框架的集成。