ApiChain-编写迭代单测用例

news2024/11/25 2:08:47

项目地址:ApiChain 项目主页

写单测用例,就像画一幅有向不循环的图,图中的每个节点是这个单测用例的每一个步骤,连线代表着数据的流向,这幅图通常有一个或者多个起点,但通常只有一个终点。起点的数据来源于 环境变量、内置函数或者固定数据,经过特定环境、特定项目的接口“加工”后,输出新的数据。这幅有向不循环的图其他节点的数据来源,相对于起点节点,可以引用前面执行过的那些步骤使用过或者输出来的数据,也就是引用前面步骤的 路径变量、参数、头部、主体、返回值 的数据。

Snipaste_2024-11-21_16-37-50.png

如上图所示的单测用例,上传制品包会返回制品id,可以根据制品id拿到制品的30分钟有效期的下载token,根据制品token可以下载制品,单测用例正是将这套流程涉及的一系列接口调用固定下来,称为可重复执行某个业务目标的利器。

Snipaste_2024-11-21_16-49-42.png

如上图 查询制品 的步骤传参,需要使用第一个 上传ios包 返回的制品id作为数据,同时他还是用了一个全局环境变量 appSessionId 作为参数。引用上一个步骤的参数的方式如下图所示:

Snipaste_2024-11-21_16-53-25.png

数据源选择 步骤参数/返回值,步骤选择 上传鸿蒙包 ,使用上面步骤的 response 中的数据中的某个内容作为当前接口的传参,下面会贴心的给出这个数据源数据格式的一个demo。(没错,来自于接口文档的demo)。用 点号 (.)语法找出json路径,这里是 data.artifactId。

每一个执行步骤都肩负着一个重要“使命”,就是校验整个单测用例是否是可靠的,是否有必要继续执行接下来的用例流程。也就是拿当前步骤的执行结果与前面某个步骤的返回数据进行“对照”,一个最基本的校验方式是要求当前接口返回的code必须是成功的(非返回json格式数据的接口可以不做校验,默认通过)。所以每个接口可以有1个或多个的校验整个单测是否成功的“门禁”。

Snipaste_2024-11-21_17-01-31.png

校验结果与上面填充数据的区别,一个是可以有多个校验规则,他们之间是且的关系,任何一个门禁没通过,整个单测失败。另一个点是 每个填充只有一个数据,而校验则是一个等式或者不等式,会有左右两个数据源,左边数据源通常从当前步骤的执行结果取数据,右边数据源从前面步骤或者环境变量或者固定数据。

单测特有的内置函数

由于单测需要使用前面步骤的数据作为当前步骤的参数或者整个单测流程是否成功的校验依据,这往往涉及到能够对前面的数据做处理,产生出新的满足我们用途的新数据。目前提供了以下三个仅用于单测的内置函数:

*first()

针对前面的数据源的数据包含json数组的情况,我们需要取数组的第一个数据(通常是一个对象),在这个对象的基础上,继续我们的json path,直到最终取到目标数据为止,一下是一个demo:

*{{current_step.response.data.first().target}} 这个取当前步骤的response这个json的data数组的第一个json对象的target 字段的值。

*random()

为了使用单测独特的 随机性 特征,让单测具备通用性,有时候需要取前面步骤 json path 下的一个数组的任意一个对象,取对象中的数据,比如我们查询天气预报这个示例,从城市列表接口任意取一个城市查询当前天气就是这样。*result.random().city

*eval()

以上两个函数都是针对数组生效的,下面那个函数是针对字符串生效的,也更强大、更难用。 比如前面步骤返回了类似 https://rf-uat-dmz.xxx.xxxurl.cn/rx/hmInstall?artid=dsfdsfd&token=sdfsfd 这样的数据,我们后面步骤需要从这个步骤中的这个返回中提取出token这个有特殊意义的的数据,可以使用下面的数据***{{__pointed_step__54b05acd-6a86-4bce-93e1-ca884b610486.response.data.locationUrl.eval(‘split(“?”)[1].split(“&”)[1].split(“=”)[1]’)}}**。

eval隐式的左侧数据源是待处理的字符串,内部的处理过程以字符串的形式自己写js代码,处理过程就是用点号(.)作为这个字符串的分割,迭代处理原始字符串。相信作为程序员的你很快就会学会使用这个万能的字符串处理函数 eval 函数的。

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

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

相关文章

九、FOC原理详解

1、FOC简介 FOC(field-oriented control)为磁场定向控制,又称为矢量控制(vectorcontrol),是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最佳选择…

企业OA管理系统:Spring Boot技术实现与案例研究

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了企业OA管理系统的开发全过程。通过分析企业OA管理系统管理的不足,创建了一个计算机管理企业OA管理系统的方案。文章介绍了企业OA管理系统的系统分析部…

【tensorflow的安装步骤】

创建一个虚拟环境 conda create -n tensorflow python3.6激活虚拟环境 conda activate tensorflow使用镜像源下载 pip install tensorflow1.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/特别特别重要的点!!! 别用WiFi或者校园网下…

网络安全-web架构-nginx配置

1. nginx访问: 访问的是index.html, 访问ip访问的资源就是在/usr/share/nginx/html中; 当nginx不认识,浏览器认识的话,浏览器会自动渲染。 当nginx认识,浏览器不认识的话,浏览器会把它加载成…

ES6 模块化语法

目录 ES6 模块化语法 分别暴露 统一暴露 ​编辑 默认暴露 ES6 模块化引入方式 ES6 模块化语法 模块功能主要由两个命令构成:export 和 import。 ⚫ export 命令用于规定模块的对外接口(哪些数据需要暴露,就在数据前面加上关键字即可…

基于Java Springboot高校洗浴管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

stm32如何接收舵机的控制信号(而不是控制舵机)

看到很多如何stm32用pwm信号控制舵机的文章,老生常谈了 我来写一个stm32接收pwm信号的例子 ,这个pwm信号是用来控制舵机的 背景: 我需要接收航模接收机的,用来控制舵机的pwm信号, 得到这个信号后,做其他事情. 初版代码 pwm.h#ifndef _pwm_H #define _pwm_H#include "s…

Postman之pm.test断言操作

系列文章目录 1.Postman之安装及汉化基本使用介绍 2.Postman之变量操作 3.Postman之数据提取 4.Postman之pm.test断言操作 5.Postman之newman Postman之pm.test断言操作 1.断言方法2.连接符3.条件判断符 用于验证请求的响应数据是否符合预期 1.断言方法 pm.test():…

MySQL面试题补

内连接和外连接的区别: ○1.功能和用法不同:内连接是连接两表都满足情况的数据;而外连接是以一边的表为主表,另一个表只显示匹配的行; ○2.用途:内连接一般是用于检索不同表需要根据共同的列值进行匹配的&a…

查看浏览器的请求头

爬虫时用到了请求头,虽然可以用网上公开的,但是还是想了解一下本机浏览器的。以 Edge 为例,其余浏览器通用。 打开浏览器任一网页,按F12打开DevTools;或鼠标右键,选择“检查”。首次打开界面应该显示在网页…

小R的二叉树探险 | 模拟

问题描述 在一个神奇的二叉树中,结构非常独特: 每层的节点值赋值方向是交替的,第一层从左到右,第二层从右到左,以此类推,且该二叉树有无穷多层。 小R对这个二叉树充满了好奇,她想知道&#xf…

蓝牙定位|三维空间情况下的仿真例程(四个蓝牙基站的情况,附源代码)MATLAB程序

这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关系。 文章目录 蓝牙定位…

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计

概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术,选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发,搭载了先进的勘智 K230D 芯片。 K230…

Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能

网站部署在华为云服务器上,Debian系统,使用DjangoNginxuwsgi搭建。最终效果如下图所示。 一、响应逻辑顺序 1. 聊天页面请求 客户端请求/chat/(输入聊天室房间号界面)和/chat/room_name(某个聊天室页面)链…

TransFormer--整合编码器和解码器

TransFormer--整合编码器和解码器 下图完整地展示了带有编码器和解码器的Transformer架构。 在图中,N表示可以堆叠N个编码器和解码器。我们可以看到,一旦输入句子(原句),编码器就会学习其特征并将特征发送给解码器&…

短视频矩阵矩阵,矩阵号策略

随着数字媒体的迅猛发展,短视频平台已经成为企业和个人品牌推广的核心渠道。在这一背景下,短视频矩阵营销策略应运而生,它通过高效整合和管理多个短视频账号,实现资源的最优配置和营销效果的最大化。本文旨在深入探讨短视频矩阵的…

Apple Vision Pro开发002-新建项目配置

一、新建项目 可以选择默认的,也可以选择Universal 3D 二、切换打包平台 注意选择Target SDK为Devices SDk,这种适配打包到真机调试 三、升级新的Input系统 打开ProjectSettings,替换完毕之后引擎会重启 四、导入PolySpatial 修改上图红…

【StarRocks】starrocks 3.2.12 【share-nothing】 多Be集群容器化部署

文章目录 一. 集群规划二.docker compose以及启动脚本卷映射对于网络环境变量 三. 集群测试用户新建、赋权、库表初始化断电重启扩容 BE 集群 一. 集群规划 部署文档 https://docs.starrocks.io/zh/docs/2.5/deployment/plan_cluster/ 分类描述FE节点1. 主要负责元数据管理、…

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具,支持多种模型和训练方法,包括预训练、监督微调、强化学习等,同时提供量化技术和实验监控,旨在提高训练速度和模型性能。 官方开源地址:https://github.com/hiyouga/L…

Java基础面试题01-请描述Java中JDK和JRE的区别?

什么是 JDK? JDK 全称 Java Development Kit,中文叫“Java 开发工具包”。 它是给 Java 开发者用的工具箱,里面有一切写代码、编译代码、调试代码所需要的工具。 JDK 包括什么? Java 编译器(javac)&…