接口自动化框架设计必备利器之参数传递

news2024/11/17 2:58:22

在我们设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML)中,实现测试脚本与测试数据解耦,方便后期维护。

当涉及到业务场景接口用例时,由于接口与接口存在关联关系,需要从上游接口取出来相关字段传递给下游接口作为入参使用,比如在Excel中我们会这样做:

在这里插入图片描述

在excel中新增一列【提取响应】,将上游接口的响应字段提取出来,在下游接口当中通过标记符进行使${XXX}

在YAML中我们也会有类似的用法:

- casename: 修改用户信息
  teststeps:
    - name: 登录成功
      request:
        method: POST
        url: /login
        json:
          principal: lemon_auto
          credentials: lemon123456
          appType: 3
          loginType: 0
        headers:
          Content-Type: application/json
      extract:
        token: $.access_token
        tokentype: $.token_type
      validate:
        - eq: [status_code, 200]
        - eq: [$.nickName, "lemon_auto"]

    - name: 进入到个人中心
      request:
        method: GET
        url: /p/user/userInfo
        queryparam: null
        headers:
          Authorization: ${tokentype}${token}
      validate:
        - eq: [status_code, 200]
        - eq: [$.nickName, "lemon_auto"]

【extract】代表要提取的响应字段信息,在下游接口中同样通过${XXX}用法进行引用

参数传递替换实现

在框架中关键实现是需要识别到标记符并且进行参数的替换,一般的思路我们采用正则表达式识别标记符,并且配合环境变量取出对应的字段值再使用replace进行替换,整个的操作封装相比复杂性会比较高。

在python中提供了Template类,它能够非常简单的通过模块替换你想要的字符串。Template类中默认的替换模板就是${XXX}标记符,具体用法如下:

将要替换的原始字符串作为参数初始化Template对象

使用substitute方法,传递需要替换的内容from string import Template

# 原始数据
data = '''
{
  "address": "XX省XX市城XX区XXX镇",
  "communityName": "XXX小区",
  "nearbyLandmarks": "${mark}",
  "userId": ${userId}
}
'''
# 这里是需要替换的内容,字典类型
dict = {'userId':123456,'mark':"王府井"}

print(Template(data).substitute(dict))

替换之后的结果为:

{
  "address": "XX省XX市XX区XX小镇",
  "communityName": "XX小区",
  "nearbyLandmarks": "王府井",
  "userId": 123456
}

可以看到使用非常简单,通过substitute即可将字典中的数据替换到原始数据中。

那如果原始数据中的标记符和替换的内容不对应会有什么情况?

比如这里我的替换内容只有userId:

from string import Template
data = '''
{
  "address": "XX省XX市XX区XXX镇",
  "communityName": "XXXX小区",
  "nearbyLandmarks": "${mark}",
  "userId": ${userId}
}
'''

dict = {'userId':123456}

print(Template(data).substitute(dict))

此时会报KeyError的错误,找不到mark这个key,如果不想要报错你可以使用safe_substitutefrom string import Template

data = '''
{
  "address": "XX省XX市XX区XXX镇",
  "communityName": "XXX小区",
  "nearbyLandmarks": "${mark}",
  "userId": ${userId}
}
'''

dict = {'userId':123456}

print(Template(data).safe_substitute(dict)
)

此时的输出结果为:

{
  "address": "XX省XX市XX区XX小镇",
  "communityName": "XX小区",
  "nearbyLandmarks": "${mark}",
  "userId": 123456
}

我们可以看到safe_substitute不会报错,并且只会替换和标记符匹配的数据,不匹配的则保持原样。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:


这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5步掌握Python Django开发办公管理系统核心技巧

🎓 作者:计算机毕设小月哥 | 软件开发专家 🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 🛠️ 专业服务 🛠️ 需求定制化开发源码提…

Unity实现棋盘方格

本文参考:p1_哔哩哔哩_bilibili 一、精要提炼 1、Button自带的白色底图是圆角的,Image组件自带的白色底图是方角的。 2、2D中Instantiate指定的位置为屏幕坐标系的位置,左下角为(0,0) 3、求某个组件的位置:xx.transform.posi…

(javaweb)事务管理+AOP

目录 1.spring事务管理 2.rollbackFor(异常回滚属性) 3.propagation(事物传播行为) AOP基础 1.AOP概述 AOP快速入门 AOP核心概念 APO进阶 1.通知类型 2.通知顺序 3.切入点表达式 4.连接点 5.AOP案例 1.spring事务管理…

谷歌浏览器翻译不了网页怎么解决

谷歌浏览器的网页翻译功能因其便捷性和高效性,成为了许多用户跨语言浏览的重要工具。然而,有时候用户可能会遇到无法使用谷歌浏览器翻译网页的情况。接下来将为大家分析为何谷歌浏览器翻译不了网页以及解决方法,希望对你有所帮助。&#xff0…

从dxf文件中提取spline曲线

1.使用的工具 libDxf-负责解析dxf文件,提取图形元素 open_Nurbs-负责spline曲线的计算 2.效果如下 左图是CAD绘制的spline曲线,右图是程序中显示的曲线,红色点是在CAD中作图时鼠标点击的拟合点。 3.main.cpp代码 #include"zmDXF.h&…

【香橙派系列教程】(十五) VSCode SSH远程连接开发板,以香橙派为例

【十五】VSCode远程连接香橙派 文章目录 【十五】VSCode远程连接香橙派第一步:安装vscode第二步:安装Remote Development第三步:字体设置第四步:配置远程连接第五步:配置远程目录 第一步:安装vscode 之前发…

SuperMap WebGPA外部大数据集群部署实践

SuperMap WebGPA外部大数据集群部署实践 特别说明:部署前准备: 1.安装包说明2. 许可配置3. 机器情况部署过程说明: 1.设置ip主机名映射(主机ip需要固定ip)2. 查看防火强状态,关闭防火墙3. 新建用户&#…

dll修复工具下载:dll文件丢失问题?一键解决系统难题!

dll修复工具是Windows电脑必不可少的一款系统修复软件 电脑的使用频率很高,不可避免的会遇到丢失dll文件的情况。因此,dll修复工具也是能够解决的dll文件缺失的方法之一。那么如何使用dll修复工具解决缺失dll文件问题呢?本文将为您详细介绍电…

基于单片机的一氧化碳报警系统的设计与实现

摘 要: 一氧化碳对人体有害,尤其超标时会影响人们的健康 。 因此文章设计了一款基于单片机的一氧化氮报警器设计。 论文通过传感器检测一氧化碳浓度,经过 AD 转换,再把检测信号传递给单片机,经过分析处理&#xff0c…

graphRAG原理解析——基于微软graphRAG+Neo4j llm-graph-builder

知识图谱生成 llm-graph-builder(以下简称 LGB)也使用了最新的 graph RAG 的思路,使用知识图谱来加持RAG,提供更加准确和丰富的知识问答。知识图谱的生成上,利用大模型的泛化能力来自动生成和构建知识图谱&#xff0…

企事业单位数据资料防外泄如何实现?这5个小技巧等你来掌握!

企事业单位的数据资料防外泄是一项重要的任务,它关乎企业的核心竞争力和信息安全。 以下是五个实用的小技巧,可以帮助企事业单位有效地防止数据外泄: 1. 数据加密 技巧说明:通过对敏感数据进行加密处理,即使数据被非…

Python的10个构建桌面应用的技巧

Python以其简洁的语法和强大的库支持,成为开发桌面应用的热门选择。无论是创建简单的工具还是复杂的图形界面程序,Python都能大显身手。下面,我们将通过10个实用技巧,逐步引导你进入Python桌面应用开发的世界。 如果你对Python感兴…

服务器内存占用陡增,部分应用程序无故被停,docker-cache罪魁祸首

一、背景 告警提示:服务器内存占用陡增,部分应用程序无故被停。 查看内存占用,发现只剩下几百M了。 [rootnb003 ~]# free -htotal used free shared buff/cache available Mem: 30G 28G …

初识 Go 语言,环境配置有问题

你好,我是沐爸,欢迎点赞、收藏、评论和关注。个人知乎 Go 也称 Golang, 是由 Google 开发的一种开源的、静态类型、编译型、并发型,并具有垃圾回收功能的编程语言。它以其简洁的语法、强大的标准库和高效的并发模型而广受欢迎。今…

C++学习笔记——保留3位小数的浮点数

一、题目描述 二、代码 #include <iostream> #include <iomanip> using namespace std; int main() {double a;cin >> a;cout << fixed << setprecision(3)<<a<<endl;return 0; }

无人机遥控器显示屏的重要性!!!

无人机遥控器的显示屏在无人机操作中扮演着至关重要的角色&#xff0c;它提供了无人机状态、飞行参数、设置选项以及实时图像&#xff08;对于带屏遥控器&#xff09;等重要信息 显示飞行参数&#xff1a; 显示屏上可以实时显示无人机的高度、距离、坐标、速度、方向等关键飞行…

Buildroot构建Qt根文件系统-思维导图-学习笔记-基于正点原子阿尔法开发板

Buildroot构建Qt根文件系统 获取 Buildroot 源码 Buildroot 源码下载地址&#xff0c;https://buildroot.org/ 本次下载的是长期支持版本 移动至ubuntu后解压 tar xf buildroot-2022.02.3.tar.gz 解压后的 Buildroot 源码 配置 Buildroot 安装显示图形菜单需要的库 sudo…

Linux中库的概念,动态库,静态库

1.什么是库 库在Linux中是一个二进制文件&#xff0c;它是由.cpp文件&#xff08;不包含卖弄函数&#xff09;编译而来&#xff0c;其他程序如果想要使用该源文件中的函数时&#xff0c;只需在编译生成可执行程序时&#xff0c;链接上该源文件生成的库文件即可。库中存储的是二…

【香橙派系列教程】(十六) 语音模块与阿里云结合

【十六】语音模块与阿里云结合 本小节实现功能使用语音模块和摄像头在香橙派上做垃圾智能分类识别。 大致流程&#xff1a;说出“识别垃圾类型”口令&#xff0c;语音模块接收到之后通过串口发送字符串指令&#xff0c;随后进行拍照&#xff08;请确保香橙派已经驱动起来了摄…

2024/8/25 Nacos本机配置

目录 一、nacos下载 二、修改配置文件 2.1、配置数据库 2.2、配置鉴定密钥 2.3、配置启动脚本 三、nacos启动 3.1、启动运行脚本 3.2、新增配置 3.3、服务列表 记录一下本机nacos2.2.3配置全过程 一、nacos下载 下载地址&#xff1a;https://github.com/alibaba/nacos/r…