python接口自动化测试之接口数据依赖的实现方法


Posted in Python onApril 26, 2019

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

思路如下:

  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}, 用global_var_dic查找并替换全局变量时,则使用了默认预设的起止索引参数。这种写法我感觉有些奇怪, 但是目前也没想出更好的方法,如果大家有更好的实现思路的话欢迎讨论:)

最佳实践

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python基于递归算法实现的走迷宫问题
Aug 04 Python
python实现redis三种cas事务操作
Dec 19 Python
Python3 中文文件读写方法
Jan 23 Python
python时间日期函数与利用pandas进行时间序列处理详解
Mar 13 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
Pytorch之保存读取模型实例
Dec 30 Python
如何在python中执行另一个py文件
Apr 30 Python
Django REST Swagger实现指定api参数
Jul 07 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 #Python
python将视频转换为全字符视频
Apr 26 #Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 #Python
Python3.5内置模块之random模块用法实例分析
Apr 26 #Python
python3.5安装python3-tk详解
Apr 26 #Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 #Python
python实现名片管理系统项目
Apr 26 #Python
You might like
解析PHP 5.5 新特性
2013/07/02 PHP
PHP数组实例详解
2016/06/26 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
js style动态设置table高度
2014/10/21 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
在django中使用自定义标签实现分页功能
2017/07/04 Python
快速了解Python相对导入
2018/01/12 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
幼儿园秋游活动方案
2014/01/21 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
校庆标语集锦
2014/06/25 职场文书
生物工程专业求职信
2014/09/03 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书