由于刚来到咱们社区 第一次发帖,而且文笔不好,编程技术也烂的要死,直接讲述我的框架设计思路

使用的是 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 测试报告内详细展示报错原因

各位多多担待,第一次写,技术菜,文本菜😋


↙↙↙阅读原文可查看相关链接,并与作者交流