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 异常处理实例详解
Mar 12 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
Python中new方法的详解
Jan 15 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
python判断变量是否为列表的方法
Sep 17 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
Python pandas求方差和标准差的方法实例
Aug 04 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获取文件后缀名的三个函数
2012/10/15 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
json2.js的初步学习与了解
2011/10/06 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
python版本的仿windows计划任务工具
2018/04/30 Python
python和shell获取文本内容的方法
2018/06/05 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
对numpy中的transpose和swapaxes函数详解
2018/08/02 Python
使用Python 统计高频字数的方法
2019/01/31 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
杭州联环马网络笔试题面试题
2013/08/04 面试题
《寓言两则》教学反思
2014/02/27 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
公证委托书大全
2014/04/04 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
市场总监岗位职责
2015/02/11 职场文书
小学生运动会广播
2015/08/19 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android