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中的jquery PyQuery库使用小结
May 13 Python
Python中的filter()函数的用法
Apr 27 Python
python3大文件解压和基本操作
Dec 15 Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 Python
详解Django 时间与时区设置问题
Jul 23 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 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添加MySQL数据记录代码
2008/06/07 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
PHP最常用的正则表达式
2017/02/13 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
JavaScript错误处理
2015/02/03 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
python生成器推导式用法简单示例
2019/10/08 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
python程序需要编译吗
2020/06/19 Python
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
工商治理实习生的自我评价
2014/01/15 职场文书
施工材料员岗位职责
2014/02/12 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
任命书格式
2014/06/05 职场文书
环保项目建议书
2014/08/26 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
车辆管理制度范本
2015/08/05 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL