接口自动化--yaml参数化

一、前景

        再编写项目自动化时,同项目中不同用例间存在很多公共入参,每次单独修改都很麻烦,尤其随着用例的增多,再设置入参上耗费时间过多,因此引入参数化,方便对公用参数统一管理

二、实现方法

1.封装模块对参数化入参进行处理

from utils.read import base_data
import yaml
import os

def func_yaml(data):
    if isinstance(data, dict):  # 判断类型  data是dict类型
        for key, value in data.items():  # data.items():返回一个包含Series对象中所有键值对的列表。每个键值对都以元组的形式表示,
            if isinstance(value, str) and '${' in value and '}' in value:
                start = value.index('${')
                end = value.index('}')
                func_name = value[start + 2:end]

                # eval不能取0开头的整数
                a = str(eval(func_name))
                if '/' in a:
                    b = a.strip('/')
                else:
                    b = a
                data[key] = value[0:start] + b + value[end + 1:]
            #   如果键值对的值是字典类型,函数会递归调用func_yaml()函数来处理该嵌套字典。
            #   递归处理字典:处理任意层级的嵌套字典数据,确保每个层级都能应用相同的转换逻辑,从而达到全面处理的目的。
            elif isinstance(value, dict):
                data[key] = func_yaml(value)
    return data

# 获取yaml中统一管理的参数集
code_set = base_data.read_data()['CODE_SET']
order_set = base_data.read_data()['ORDER_SET']
cu_code = base_data.read_data()['CU_CODE']


def CU_CODE():
    code = cu_code
    return code

def ORDER_SET():
    data = order_set
    return data

def CODE_SET():
    set = code_set
    return set

if __name__ == '__main__':
    data = {
        "json_data": {
            "paramMap": {
                "data1": "${CU_CODE()}",

            }
        }}

    print(func_yaml(data))

2.yaml参数化设置

参数值使用${CU_CODE()['CASE1']['CUST_CODE']}格式来实现参数化

# 入参设置
ORDER_SET:
  STOP_PRICE: 10
  START_DATE: 20240129
  CLI_REMARK: test_auto

CU_CODE:
# 沪市
  CASE1:
    CUST_CODE: 666600005479
    CUACCT_CODE: 666600005479
    TRDACCT: A456742201
    OP_PWD: 111111
# 深市
  CASE2:
    CUST_CODE: 666600005479
    CUACCT_CODE: 666600005479
    TRDACCT: /0157775877/
    OP_PWD: 111111

CODE_SET:
  # 沪-普通股票
  CASE1:
    JY_CODE: 400019
    ORDER_PRICE: 10
  # 沪-企业转债
  CASE2:
    JY_CODE: 550022
    ORDER_PRICE: 10

BuyOrder1:
  paramMap:
    CUST_CODE: ${CU_CODE()['CASE1']['CUST_CODE']}
    CUACCT_CODE: ${CU_CODE()['CASE1']['CUACCT_CODE']}
    TRDACCT: ${CU_CODE()['CASE1']['TRDACCT']}
    OP_PWD: ${CU_CODE()['CASE1']['OP_PWD']}

    ORDER_VALID_DATE: ${ORDER_SET()['START_DATE']}
    STOP_PRICE: ${ORDER_SET()['STOP_PRICE']}
    CLI_REMARK: ${ORDER_SET()['CLI_REMARK']}

    TRD_CODE: ${CODE_SET()['CASE1']['SG_CODE']}
    ORDER_PRICE: ${CODE_SET()['CASE1']['ORDER_PRICE']}

3遇到的问题

再使用func_yaml方法是,发现0开头的参数值(例如02322),无法正确被读取,研究后发现是func_yaml中eval不能取0开头的整数,会将其转换为8进制。

解决方法:使用双斜杠//包围数值,/02322/,然后读取后去掉//

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值