Python requests库接口测试与认证方法解析
推荐接口测试平台https://api.oioweb.cn/
requests库核心功能
Python第三方HTTP客户端库
安装命令: pip install requests
基础操作方法
方法说明:
- post() 用于数据提交,返回响应对象
- delete() 用于资源删除,返回响应对象
- put() 用于资源更新,返回响应对象
- get() 用于数据获取,返回响应对象
- request() 通用请求方法
- session() 创建会话对象
# 示例代码
response = http_client.put(url='https://api.example.com/data', data={'key': 'value'})
参数传递差异说明
*args与**kwargs区别:
- *args接收元组类型可变参数(a,b,c)
- **kwargs接收字典类型可变参数 {a:1,b:2,c:3}
GET请求实现 **def http_client.fetch(url, query_params=None, options)
def fetch(url, query_params=None, **options):
"""发送GET请求
:param url: 请求地址
:param query_params: 查询参数字典
:param options: 其他请求选项
:return: 响应对象
"""
return send_request('GET', url, params=query_params, **options)
POST请求实现 **def http_client.send_data(url, payload=None, json_data=None, options)
def send_data(url, payload=None, json_data=None, **options):
"""发送POST请求
:param url: 请求地址
:param payload: 表单数据
:param json_data: JSON数据
:param options: 其他请求选项
:return: 响应对象
"""
return send_request('POST', url, data=payload, json=json_data, **options)
PUT请求实现 **def http_client.update_resource(url, payload=None, options)
def update_resource(url, payload=None, **options):
"""发送PUT请求
:param url: 请求地址
:param payload: 更新数据
:param options: 其他请求选项
:return: 响应对象
"""
return send_request('PUT', url, data=payload, **options)
DELETE请求实现 **def http_client.remove_data(url, options)
def remove_data(url, **options):
"""发送DELETE请求
:param url: 请求地址
:param options: 其他请求选项
:return: 响应对象
"""
return send_request('DELETE', url, **options)
通用请求方法 def http_client.send_request(method, url, **options)
def send_request(method, url, **options):
"""构建并发送HTTP请求
:param method: 请求方法类型
:param url: 请求地址
:param options: 其他请求参数
:return: 响应对象
"""
with Session() as session:
return session.request(method=method, url=url, **options)
会话管理 会话对象支持自动处理cookies,推荐用于需要维持状态的场景
# 示例代码
session = http_client.session()
session.request(method='GET', url='https://api.example.com/data', params={'id': 123})
响应处理方法
获取接口响应数据的常用方式
response.text # 获取文本内容
response.content # 获取二进制数据
response.json() # 解析JSON数据
response.status_code # 获取状态码
response.cookies # 获取cookies信息
response.encoding # 获取编码格式
response.headers # 获取响应头信息
response.request # 获取请求详情
实战案例
1.获取用户信息
接口文档https://api.oioweb.cn/doc/qq/info
def test_user_info():
endpoint = 'https://api.oioweb.cn/api/qq/info'
params = {'user_id': '599928887'}
response = http_client.get(url=endpoint, params=params)
print(response.json())
运行结果:
{'code': 200, 'data': {'user_id': 599928887, 'nickname': '叾屾', 'sex': 'unknown', 'age': 0, 'area': ''}, 'message': 'success'}
2.图片文字识别
接口文档:https://api.oioweb.cn/doc/ocr
def test_image_recognition():
endpoint = 'https://api.oioweb.cn/api/ocr'
files = {'image': open('test.jpg', 'rb')}
response = http_client.post(url=endpoint, files=files)
print(response.json())
运行结果:
{'code': 200, 'data': [':', '自由', '心自由', '生活就自由', '到哪都有快乐'], 'message': 'success'}
会话优化方案
推荐使用会话对象提升效率
class ApiTest:
session = http_client.session()
def test_get_user(self):
endpoint = 'https://api.oioweb.cn/api/qq/info'
params = {'user_id': '599928887'}
response = ApiTest.session.request(method='GET', url=endpoint, params=params)
print(response.json())
def test_image_ocr(self):
endpoint = 'https://api.oioweb.cn/api/ocr'
files = {'image': open('test.jpg', 'rb')}
response = ApiTest.session.request(method='POST', url=endpoint, files=files)
print(response.json())
认证机制
常见认证方式:
- Cookie认证
- Session认证
- Token认证
数据提取方法
正则表达式提取示例:
import re
# 提取CSRF令牌
re.search(r'name="csrf_token" value="(.*?)"', response.text).group(1)
会话优势说明
使用会话对象的优势:
- 自动管理cookies
- 支持连接复用
- 提升性能表现
- 简化认证流程