python 接口自动化之用例变量参数化(参数化处理器)

场景:有环境变量需要替换到用例数据中去,

解决的问题:多条接口用例的通用配置和token之类的参数要写在每条测试用例中,替换不方便。

场景一:字符串中只有一个变量需要替换

原始数据:(数据来源:execl中读取,或者数据库中读取出来的,都可以)

params= '{"_ver":"3.18.1","_ct":"101","token":${token}'

在进行接口请求前,需要把数据中的变量${token} ,替换成环境变量,${} 只是一个特殊的标识符,目的的方便使用正则表达式匹配,换成你自己喜欢的都可以

在此处使用python的re模块的re.search和re.sub ,不清楚的可以在菜鸟站上搜到教程

Python3 正则表达式 | 菜鸟教程

下面是实现的代码

思路:

        1、写出正则匹配式

        2、取出字符串中匹配成功的变量

        3、取出匹配到的值,也就是需要替换掉的变量

        4、从环境变量中获取要变量值

        5、使用re.sub进行替换。

sub的四个属性代表的意思:正则匹配式,要替换变量的字符串或者函数,要被查找替换的原始字符串,该模式匹配成功后的最大替换次数(默认为替换所有匹配到的)

import re
import Config

# 定义一个字符串,里面有一个变量
params= '{"_ver":"3.18.1","_ct":"101","token":${token},"order_id":${order_id}}'

# 写出正则匹配式
ru = r'\${(.*?)}'

# 进行正则匹配
while re.search(ru,params):
    # 取出字符串中匹配成功的变量
    res = re.search(ru, params)
    # 取出匹配到的值,也就是需要替换掉的变量
    key = res.group(1)
    print(key)
    # 从环境变量中获取要变量值
    # value = Config.token
    value = getattr(Config,key)
    print(value)
    # 进行替换,正则匹配式,要替换变量的字符串或者函数,要被查找替换的原始字符串,该模式匹配成功后的最大替换次数(默认为替换所有匹配到的),
    params = re.sub(ru,value,params,1)

print(params)

运行的结果:

 场景二:一个字符串中有多个变量需要替换

原始数据:

params= '{"_ver":"3.18.1","_ct":"101","token":${token},"order_id":${order_id}}'

思路:

        1、写出正则匹配式

        2、取出字符串中匹配成功的多个变量

        3、循环多个变量取出匹配到的值,也就是需要替换掉的变量

        4、从环境变量中获取要变量值

        5、使用re.sub进行替换。

实现代码:

import re
import Config

# 定义一个字符串,里面有一个变量
params= '{"_ver":"3.18.1","_ct":"101","token":${token},"order_id":${order_id}}'

# 写出正则匹配式
ru = r'\${(.*?)}'

# 进行正则匹配,匹配多个变量
while re.search(ru,params):
    # 取出字符串中匹配成功的多个变量
    res = re.search(ru, params)
    # 取出匹配到的值,也就是需要替换掉的多个变量
    keys = res.groups()
    # 循环对匹配到的值进行替换
    for key in keys:
        print(key)
        # 从环境变量中获取要变量值
        value = getattr(Config, key)
        print(value)
        # 进行替换,正则匹配式,要替换变量的字符串或者函数,要被查找替换的原始字符串,该模式匹配成功后的最大替换次数(默认为替换所有匹配到的),
        params = re.sub(ru, value, params, 1)

print(params)

运行结果:

 

getattr是用来获取对象中的属性或者方法的,在属性名或者方法名不确定是变量时使用。

在上面的例子中getattr(Config, key) 等价于 Config.token或者Config.order_id

token和order_id是key 在运行中对应的值

不能直接使用Config.key,因为这种情况下key就是属性名或者方法名,不能替换成key对应的变量

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值