由于刚来到咱们社区 第一次发帖,而且文笔不好,编程技术也烂的要死,直接讲述我的框架设计思路
使用的是 Pytest+Requests+Allure 框架
然后使用的 pytest 的参数化来进行运行接口测试数据
目前的项目目录:
common:公共方法封装 (yaml 操作,Requests 封装,assert 封装)
config:环境配置信息以及账号 token 等
data:接口测试数据
logs:pytest 配置后自动生成的日志
reports 和 temps:allure 测试报告
testcases:测试用例存
request 封装:
config 配置的环境数据以及接口地址,账号 token,请求头,请求体等等需要使用的东西
data:
接口测试数据存放,一个 yaml 对应一个接口,一个 list 对应一条测试用例
格式可自己设定,我目前是存储 Url,用例信息,schema 库的响应结果格式校验,和预期结果
logs 配置:
在 pytest.in
输出来的格式
INFO root:test_mimu.py:37 模块名称: 物品收藏,测试目的: 物品收藏成功 ,响应状态码: 200,响应结果: {"msg":"成功","code":0,"data":true}
testcases:
conftest: 存储公共接口 (关联),如登录,等
然后就是测试用例
@allure.epic("移动端-接口测试")
class TestMain:
def setup_class(self):
self.req = RequestHandler()
self.logger = logging
@user2ize('args', yaml_case_data())
def test_mimu_api(self, args):
if args['case_name'] is not None:
# 动态生成标题
allure.dynamic.title(args['case_name'])
# 动态获取级别信息
if args['severity'] is not None:
allure.dynamic.severity(args['severity'])
# 动态获取模块名称
if args['feature'] is not None:
allure.dynamic.feature(args['feature'])
# 动态获取用例功能名称
if args['story'] is not None:
allure.dynamic.story(args['story'])
url = get_url(args['url'])
payload = args['body']
token = read_yaml('config/config.yaml')['token']
headers = request_header(payload, token)
with allure.step("接口请求"):
response = self.req.visit("POST", url, headers=headers, json=payload)
response_json = response.text
self.logger.info('模块名称: {},测试目的: {} ,响应结果: {}'.format(args['story'], args['case_name'], response_json))
response_body_check(args, response)
return response_json
def teardown_class(self):
self.logger.info("测试用例执行完毕")
思路:
调用封装的 yaml 方法,循环读取 data 目录下的所有 yaml 文件,然后将所有 yaml 文件内的数据读取出来,存入一个 List 内,然后使用参数化方法进行循环执行与断言校验。如果报错就用例执行失败并在日志和 allure 测试报告内详细展示报错原因
各位多多担待,第一次写,技术菜,文本菜