接口自动化--使用正则管理数据

在做接口自动化测试过程中难免会遇到一些数据我们会使用动态的数据,比如注册的接口,在注册成功的场景下我们总不能使用一个固定的手机号,需要使用一个动态生成的手机号码。

所以在这个场景下我们可能最开始想到的是直接使用replace方法直接替换下就好了,这个方法可以,但是会有局限性

比如:

data = ‘{"phone": "#phone#", "pwd": "#pwd#", "name": #name#}‘

如果这个是你的测试用例里面的测试数据,使用replace方法岂不是要写三次?那如果更多呢?

所以我们可以引入正则来解决

首先在python中使用正则,我们需要使用到re这个模块,这个模块是python自带的,所以不需要我们下载,直接import就好

其次我们需要了解下里面的方法:

1、search:这个方法通过查看源码,我们知道这个方法是用来通过正则表达式来查找目标字符串中的字符串,返回值是一个re.Match的对象

那么我们可以使用group方法来获取返回值

import re


pattern = r"#(.*?)#"

my_string = ‘{"phone": "#phone#", "pwd": "#pwd#"}‘

a = re.search(pattern, my_string)
print(a.group(1))
phone

可以看出已经将值给返回回来了

2、sub:通过源码,我们知道这个方法的作用:通过正则表达式来查找并将查找的对象替换为一个新的字符串

举个例子吧

pattern = r"#(.*?)#"

my_string = ‘{"phone": "#phone#", "pwd": "#pwd#"}‘

b = re.sub(pattern, ‘23‘, my_string,1)
print(b)
{"phone": "23", "pwd": "#pwd#"}

可以看出是将#phone#这个字符串替换成了23了。那么已经实现我们的功能了,接下来就是将其封装成函数并运用到我们的框架中了

下面是我封装的函数:

import re


my_dict = {"phone": ‘13712341234‘, "pwd": ‘123456789‘}    

pattern = r"#(.*?)#"

my_string = ‘{"phone": "#phone#", "pwd": "#pwd#"}‘    # 这个可以是从Excel中读取出来的测试数据

def replace_string(target):
    """

    :param target:需要匹配的目标字符串
    :return:
    """
    # 首先判断根据正则是否能否匹配到
    while re.search(pattern, target):
        # 将匹配到的字符串赋值给key
        key = re.search(pattern, target).group(1)
        # 通过key来对字典中的值进行查找value
        value = my_dict[key]
        # 替换
        target = re.sub(pattern, value, target, 1)
    return target


c = replace_string(my_string)
print(c)
{"phone": "13712341234", "pwd": "123456789"}

通过打印的结果来看已经实现了我们的功能了。这样可以节省我们代码量了。是对框架中的一个优化点