python接口自动化测试之接口数据依赖

栏目: Python · 发布时间: 5年前

内容简介:在做自动化测试时,经常会对一整套业务流程进行一组接口上的测试,这时候接口之间经常会有数据依赖,那么具体要怎么实现这个依赖呢。其中这里,首先先创建

在做自动化测试时,经常会对一整套业务流程进行一组接口上的测试,这时候接口之间经常会有数据依赖,那么具体要怎么实现这个依赖呢。

思路如下:

  1. 抽取 之前 接口的返回值存储到 全局变量 字典中。
  2. 初始化接口请求时,解析 请求头部请求参数 等信息中的 全局变量 并进行替换。
  3. 发出请求。

核心代码实现:

抽取接口的返回值存储到全局变量字典中

# 抽取接口的返回值存储到全局变量字典中

if set_global_vars and isinstance(set_global_vars, list):
    for set_global_var in set_global_vars:
        if isinstance(set_global_var, dict):
            name = set_global_var.get('name') # name 代表全局变量的名字
            query = set_global_var.get('query') # query 代表全局变量的查询语句
            value = common.dict_get(response_json, query) # response_json 代表接口的响应数据
            self.global_vars[name] = value
复制代码

其中 set_global_vars 代表的是 当前测试用例全局变量设置列表self.global_vars 则代表 测试类实例全局变量字典common.dict_get 方法的具体实现请移步方法具体实现

解析字符串中全局变量并进行替换

import re

# 解析字符串中全局变量并进行替换
def resolve_global_var(pre_resolve_var, global_var_dic, global_var_regex='\${.*?}',
                   match2key_sub_string_start_index=2, match2key_sub_string_end_index=-1):

    '''
    :param pre_resolve_var: 准备进行解析的变量<str>
    :param global_var_dic: 全局变量字典<dict>
    :param global_var_regex: 识别全局变量正则表达式<str>
    :param match2key_sub_string_start_index: 全局变量表达式截取为全局变量字典key值字符串的开始索引<int>
    :param match2key_sub_string_end_index: 全局变量表达式截取为全局变量字典key值字符串的结束索引<int>
    :return: 解析后的变量<str>
    '''

    if not isinstance(pre_resolve_var, str):
        raise TypeError('pre_resolve_var must be str!')

    if not isinstance(global_var_dic, dict):
        raise TypeError('global_var_dic must be dict!')

    if not isinstance(global_var_regex, str):
        raise TypeError('global_var_regex must be str!')

    if not isinstance(match2key_sub_string_start_index, int):
        raise TypeError('match2key_sub_string_start_index must be int!')

    if not isinstance(match2key_sub_string_end_index, int):
        raise TypeError('match2key_sub_string_end_index must be int!')

    re_global_var = re.compile(global_var_regex)

    def global_var_repl(match_obj):
        start_index = match2key_sub_string_start_index
        end_index = match2key_sub_string_end_index
        match_value = global_var_dic.get(match_obj.group()[start_index:end_index])
        return match_value if match_value else match_obj.group()

    resolved_var = re.sub(pattern=re_global_var, string=pre_resolve_var, repl=global_var_repl)
    return resolved_var
复制代码

这里,首先先创建 识别全局变量 的正则规则,然后运用 re.sub 方法进行替换。其中, re.sub 中的 repl 参数可接受 函数 作为参数。 global_var_repl 方法中,使用 global_var_dic 字典去获取匹配的值并返回。

默认参数中,将 全局变量 做了这样一个识别: ${GLOBALVAR_NAME} , 进行字典查找 替换 全局变量时,则使用了默认预设的 起止索引 参数。这种写法我感觉有些奇怪, 但是目前也没想出更好的方法,如果大家有更好的实现思路的话欢迎讨论:)

最佳实践

我们来模拟一次全局变量替换的效果:

if __name__ == '__main__':
    pre_resolve_var = 'left ${status} right, left ${data} right'
    global_var_dic = {'status': 'STATUS', 'data': 'DATA'}
    resolved_str = resolve_global_var(pre_resolve_var=pre_resolve_var, global_var_dic=global_var_dic)
    print(resolved_str)
复制代码

下面是控制台输出:

left STATUS right, left DATA right

Process finished with exit code 0
复制代码

可以看出输出还是符合预期的,将字符串中全局变量成功解析。

这次分享到此为止~ 我们有缘再见:)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Trading and Exchanges

Trading and Exchanges

Larry Harris / Oxford University Press, USA / 2002-10-24 / USD 95.00

This book is about trading, the people who trade securities and contracts, the marketplaces where they trade, and the rules that govern it. Readers will learn about investors, brokers, dealers, arbit......一起来看看 《Trading and Exchanges》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具