一、被测产品
- PetStore 宠物商城:
- 一个在线的小型的商城。
- 主要提供了增删查改等操作接口。
- 结合 Swagger 实现了接口的管理。
二、需求说明
三、相关知识点
形式 |
章节 |
描述 |
知识点 |
接口请求方法 |
http 接口请求方法构造 |
知识点 |
接口请求参数 |
http 接口请求参数构造 |
知识点 |
接口请求体-json |
http 接口请求体为 json 格式 |
知识点 |
接口响应断言 |
http 接口响应状态码断言 |
四、接口自动化测试实战
五、宠物商店需求分析
六、接口测试用例设计
七、编写接口自动化测试脚本思路
八、编写自动化测试脚本
- 基础脚本
class TestPetstorePetsearch:
def setup_class(self):
# 定义接口请求 URL
self.base_url = "https://petstore.swagger.io/v2/pet"
self.search_url = self.base_url + "/findByStatus"
def test_search_pet(self):
# 查询接口请求参数
params = {
"status": "available"
}
# 发出查询请求
r = requests.get(self.search_url, params=params)
# 状态断言
assert r.status_code == 200
# 业务断言
assert r.json() != []
- 脚本优化-添加日志
# 配置日志
import logging
import os
from logging.handlers import RotatingFileHandler
# 绑定绑定句柄到logger对象
logger = logging.getLogger(__name__)
# 获取当前工具文件所在的路径
root_path = os.path.dirname(os.path.abspath(__file__))
# 拼接当前要输出日志的路径
log_dir_path = os.sep.join([root_path, '..', f'/logs'])
if not os.path.isdir(log_dir_path):
os.mkdir(log_dir_path)
# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
file_log_handler = RotatingFileHandler(os.sep.join([log_dir_path, 'log.log']), maxBytes=1024 * 1024, backupCount=10)
# 设置日志的格式
date_string = '%Y-%m-%d %H:%M:%S'
formatter = logging.Formatter(
'[%(asctime)s] [%(levelname)s] [%(filename)s]/[line: %(lineno)d]/[%(funcName)s] %(message)s ', date_string)
# 日志输出到控制台的句柄
stream_handler = logging.StreamHandler()
# 将日志记录器指定日志的格式
file_log_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
# 为全局的日志工具对象添加日志记录器
# 绑定绑定句柄到logger对象
logger.addHandler(stream_handler)
logger.addHandler(file_log_handler)
# 设置日志输出级别
logger.setLevel(level=logging.INFO)
- 脚本参数化
- 使用pytest parametrize装饰器,实现宠物状态的参数化。
@pytest.mark.parametrize("status",
["available", "pending", "sold"]
)
- 生成测试报告
# 生成报告信息
pytest --alluredir=./report
# 生成报告在线服务,查看报告
allure serve ./report/
九、总结
- 通过swagger文档获取接口信息;
- 使用Requests发出携带请求参数的GET请求;
- 断言响应是否符合预期;
- 添加Log日志;
- 使用参数化方法实现一条用例可执行多个测试数据;
- 生成Allure测试报告。