目录
- 测试需求
- 实现思路
- 完整框架
- 2.1 初始化数据 (test_data.xlsx)
- 2.2 核心脚本 (api_client.py)
- 2.3 测试用例 (test_interfaces.py)
- 2.4 日志 (logging)
- 2.5 pytest配置文件 (pytest.ini)
- 2.6 测试报告 (pytest-html)
- 2.7 入口函数 (run_tests.py)
- 2.8 完整流程
- 注意事项
测试需求
简单的一个接口场景:
接口场景:6个接口,分别为登录接口,新建项目接口,导入图片接口,图片识别接口,保存接口,退出登录;
实现思路
-
初始化数据:准备测试所需的数据,如用户名、密码、项目名称等,并存储在Excel文件中。
-
读取Excel数据:使用pandas或openpyxl库读取Excel文件中的测试数据。
-
编写核心脚本:封装发送HTTP请求、处理响应的逻辑。
-
编写测试用例:使用pytest编写针对每个接口的测试用例。
-
日志记录:使用logging库记录测试过程中的关键信息。
-
pytest配置文件:设置pytest的相关配置,如插件、命令行参数等。
-
生成测试报告:使用pytest插件(如pytest-html)生成测试报告。
-
入口函数:编写一个入口脚本,用于启动整个测试流程。
完整框架
要实现基于Python、requests、excel、pytest的接口自动化测试,我们需要按照以下步骤和框架进行:
2.1 初始化数据 (test_data.xlsx)
| TestID | TestCase | URL | Method | Headers | Body | ExpectedStatus | ExpectedResponse |
|--------|----------------|--------------------|--------|-----------|--------------------------|----------------|------------------|
| 1 | Login | /api/client/login | POST | ... | {'username': 'user1', ...} | 200 | {...} |
| 2 | CreateProject| /api/projects | POST | ... | {'project_name': 'proj1'} | 201 | {...} |
| 3 | ImportImage | /api/projects/{id}/images | POST | ... | {'image_file': 'path/to/image'} | 201 | {...} |
| 4 | RecognizeImage| /api/projects/{id}/images/{image_id}/recognize | GET | ... | | 200 | {...} |
| 5 | Save | /api/projects/{id} | PUT | ... | {'updated_data': ...} | 200 | {...} |
| 6 | Logout | /api/client/logout | POST | | | 200 | {...} |
2.2 核心脚本 (api_client.py)
import requests
import logging# 定义APIClient类,用于封装API交互逻辑
class APIClient:def __init__(self, base_url, username, password):# 初始化时接收API的基础URL、用户名和密码self.base_url = base_urlself.username = usernameself.password = password# 初始化token为None,登录成功后设置self.token = None# 初始化请求头,之后根据token进行更新self.headers = {}# 创建一个requests会话对象,用于保持连接和cookieself.session = requests.Session()# 初始化日志系统self.initialize_logging()def initialize_logging(self):# 配置基础的日志信息,设置日志级别和格式logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')# 获取当前类的日志器self.logger = logging.getLogger(__name__)def login(self):"""执行登录操作,获取token并保存到实例变量中"""# 登录API的URLurl = f"{self.base_url}/login"# 准备登录所需的payloadpayload = {'username': self.username, 'password': self.password}# 发送POST请求进行登录response = self.session.post(url, json=payload)# 检查响应状态码if response.status_code == 200:# 提取token并保存到实例变量self.token = response.json().get('token')