hxz
发布于 2023-05-23 / 66 阅读
0

【接口自动化框架】提高团队编码效率

背景痛点:

落地自动化项目过程中,不难发现有很多常用的前置造数据步骤,倘若每次都是直接编写代码或者复制粘贴业务接口模块,会造成代码冗余,可读性差的问题。

同理,后置的数据源校验,也可以实现业务封装。

除此之外,还可以针对通用性高的请求方法进行封装。

实现理念:

  1. 前置处理的封装

具备这2个条件可封装:

  • 多条用例都会复用

  • 前置过程冗余,涉及多个步骤或多接口的调用

import time
import requests
from common.logsMethod import info
from common.yamlRead import YamlRead


class CreateXX:
    """创建XX数据"""
    envConfig = YamlRead().env_config()
    dataConfig = YamlRead().data_config()
    cid1 = envConfig["cid1"]
    userid1 = envConfig["userid1"]
    host = envConfig["host"]
    url_home_XX_list = host + dataConfig["getHomeListXX"]['path']  # 获取首页XX
    url_set_XX_content = host + dataConfig["setXXContent"]['path']  # 更新XX内容
    url_set_XX_info = host + dataConfig["setXXInfo"]['path']  # 更新XX主体
    url_XX_remind = host + dataConfig["getXXRemind"]['path']  # 获取下XX
    url_delete_XX = host + dataConfig["deleteXX"]['path']  # 软删除XX
    url_clean_recycle_bin = host + dataConfig["deleteRecycleBin"]['path']  # 删除回收站内XX

    def create_XX(self, userid, cid, num):
        XXs_list = []
        for i in range(num):
            # 前置
            headers = {
                "Content-Type": 'application/json',
                "Cookie": f"XXcid={cid}",
  
            }
            XX_id = str(int(time.time() * 1000)) + '_XXId'
            body = {
                "XXId": XX_id
            }

            res = requests.post(url=self.url_set_XX_info, headers=headers, json=body)
            info_version = res.json()['infoVersion']
            body = {
                "XXId": XX_id,
                'title': 'a',
                'summary': 'a',
            }

            XXs_list.append(body)
            requests.post(url=self.url_set_XX_content, headers=headers, json=body)
            info(f"前置新建第{i+1}条XX成功")
        return XXs_list
  1. 数据源校验的方法

数据源查询方法封装起来,提高使用便利性

同前置的封装一致

  1. 请求方法

封装的设计理念:

  • 不同的请求方法都封装不同的函数

  • 通用的业务数据封装在框架

  • 必要的日志输出

  • 满足接口请求的超时

  • 修改场景比较少的变量,提供默认值,比方说headers

  • 返回值需要直接返回处理结果

import requests
from common.logsMethod import info, error


def get(url, cid, headers=None):
    if headers is None:
        headers = {'Cookie': f'XXcid={cid}'}
    info(f"【requests】url:{url}")
    info(f"【requests】headers:{headers}")
    try:
        res = requests.get(url=url, headers=headers, timeout=30)

    except TimeoutError:
        error("requests timeout!")
        return "requests timeout!"
    info(f'【response】code:{res.status_code}')
    info(f'【response】body:{res.text}')
    return res