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进行各种类型的接口测试,从简单的请求发送到复杂的认证处理和断言验证,以及与主流测试框架的集成。