目录
-
- 测试需求
- 实现思路
- 框架
-
- 代码实例
- 1. 环境准备和配置文件
- 2. Excel接口数据及测试结果
- 3. API封装
- 4. 读取Excel数据
- 5. 测试用例
- 6. 日志和配置文件处理
- 7. HTMLTestRunner生成可视化的html报告
- 8. 报告通过飞书/邮件发送
-
- 报告通过飞书发送
- 报告通过邮件发送
- 9. 入口函数
- 10. 飞书Webhook发送消息
- 11. 更新`run_tests.py`以使用`feishu_module`
- 12. 配置文件`config.ini`
- 13. 注意事项
测试需求
需要测试的接口场景为:6个接口,分别为登录接口,新建项目接口,导入图片接口,图片识别接口,保存接口,退出登录
实现思路
实现接口自动化测试需要按照一系列步骤来搭建框架和编写代码。下面是一个简化的流程,用于指导你完成整个项目。
1. 环境准备
- 安装Python环境(推荐Python 3.x版本)
- 安装必要的库:
requests
,openpyxl
,unittest
,ddt
,logging
,beautifulsoup4
,lxml
等。
pip install requests openpyxl unittest ddt logging beautifulsoup4 lxml
2. Excel接口数据及测试结果
- 使用Excel表格管理接口测试数据,包括请求参数、预期结果等。
- 使用
openpyxl
库读取Excel数据。
** 3. 测试用例**
- 编写测试用例类,每个接口对应一个或多个测试用例。
- 使用
unittest
框架编写测试方法。 - 使用
ddt
库实现数据驱动测试。
4. API封装
- 创建一个API模块,用于封装所有接口的请求方法。
- 每个接口方法接收必要的参数,并返回响应结果。
5. 读取Excel数据和登录功能封装
- 创建一个数据读取模块,用于从Excel中读取测试数据。
- 封装登录功能,在测试开始时进行登录,并获取必要的token或其他认证信息。
6. 初始化数据
- 根据需要,编写初始化数据的脚本,如创建测试用户、项目等。
7. 日志
- 使用
logging
库配置日志记录,记录测试过程中的关键信息。
8. 配置文件
- 创建一个配置文件,用于管理API的基础URL、Excel文件路径、日志级别等。
9. HTMLTestRunner生成可视化的html报告
- 使用
HTMLTestRunner
生成测试报告。 - 在测试脚本执行完毕后调用HTMLTestRunner生成报告。
10. 报告通过飞书发送
- 集成飞书机器人,发送测试报告。
- 编写发送报告的脚本,使用飞书API发送消息。
11. 入口函数
- 编写入口脚本,调用测试用例并生成报告
入口函数通常是一个简单的脚本,它调用测试用例执行函数,并可能包含一些其他逻辑,如设置环境变量、读取配置文件等。
框架
一个完整的项目基础结构包括(此基础上可更加详细):
config/
: 存放配置文件。data/
: 存放测试数据,如Excel文件。logs/
: 存放日志文件。test_cases/
: 存放测试用例文件。utils/
: 存放工具函数和模块,如API封装、Excel读取、日志设置等。main.py
: 入口脚本。requirements.txt
: 项目依赖文件。
代码实例
由于实现一个完整的接口自动化框架涉及到大量的代码和配置,我将提供一个简化版的框架搭建示例,并对关键部分进行详细的注释说明。请注意,实际项目中可能还需要进行更多的错误处理、日志记录、异常捕捉等。
首先,确保已经安装了必要的库:
pip install requests openpyxl unittest ddt beautifulsoup4 lxml
1. 环境准备和配置文件
创建一个配置文件config.ini
:
[API]
base_url = http://your-api-endpoint.com/api/v1
[EXCEL]
data_file = test_data.xlsx
sheet_name = TestCases
[LOGGING]
log_file = test.log
log_level = INFO
[FEISHU]
webhook_url = https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxx
2. Excel接口数据及测试结果
在test_data.xlsx
中准备测试数据,包括请求参数和预期结果。以下实例EXCEL参考
3. API封装
api_module.py
:
import requests
from configparser import ConfigParser
config = ConfigParser()
config.read('config.ini')
class API:
def __init__(self):
self.base_url = config.get('API', 'base_url')
self.session = requests.Session()
self.headers = {
'Content-Type': 'application/json'}
self.token = None
def login(self, username, password):
url = f"{
self.base_url}/login"
data = {
'username': username, 'password': password}
response = self.session.post(url, json=data, headers=self.headers)
if response.status_code == 200:
self.token = response.json().get('token')
return True
return False
def create_project(self, project_data):
# 假设token在header中传递
headers = self.headers.copy()
if self.token:
headers['Authorization'] = f'Bearer {
self.token}'
url = f"{
self.base_url}/project"
response = self.session.post(url, json=project_data, headers=headers)
return response
# ... 其他接口方法
4. 读取Excel数据
excel_module.py
:
import openpyxl
from configparser import ConfigParser
config = ConfigParser()
config.read('config.ini')
def read_excel_data():
data_file = config.get('EXCEL', 'data_file')
sheet_name = config.get('EXCEL', 'sheet_name')
wb = openpyxl.load_workbook(data_file)
sheet = wb[sheet_name]
test_cases = []