技术标签: 接口 restful 开发工具 软件测试 # 测试工具
Insomnia,一款开源的、跨平台的、桌面应用级的Rest client。
与Postman、Apifox是一类工具,用于接口管理、测试。主要支持http-based协议。
虽然网上上关于Insomnia这款工具的使用教程挺少的,但是其基础功能与常见的接口工具基本相同,因此也不是很难上手。所以我也偷个懒,想了解基础功能使用的朋友们,可以去官网看看,基本上面都有些,包括一些进阶的教程,如Templates tags、request chain之类的。下面我也提供了一篇可以参考的文章,写得挺详细的。
成熟的接口测试工具非常多,诸如Postman、Jmeter、国内的Apifox,这些工具的功能都十分完善、生态也比较丰富,为什么我们要用偏冷门的Insomnia呢?每个团队在做技术选型时,需要考虑的东西很多,例如:易用性、契合度、技术成本、经济成本、是否易于二次开发等等。易用性方面,Insomnia与同类工具类型,都非常容易上手,相关文章虽少,但官网内容比较全面;成本方面,Insomnia免费版就能很好的通过Git进行团队协作,而同样的功能在Postman、apifox(不花钱只有sass版,不太适用)都是需要付费的,节约成本也是老板最喜欢看到的;二次开发方面,Insomnia的相关插件可以使用Nodejs编写,难度也不是太高;
总结一下,Insomnia这款软件,免费版基础功能强大、支持团队协作、方便二开。
作为测试人员,刚接触这款软件时,更多的是使用Debug、Test模块,Design使用得很少。软件原话写的是:“Supported version fields are swagger:‘2.0’ and those that match openapi:3.0.n”。简而言之,Design模块中可以导入swagger、openapi用于共享api规范。
我这以导入swagger为例:
打开swagger网页后,点击图上框出来的连接,会显示Json格式的swagger,直接复制到Design模块就导入完成了。
如果swagger报错的话,导入后Insomnia同样也会显示相关的错误信息,我们可以通过提供的details定位到错误的地方
导入后,面临数量众多的接口,我们可以通过左侧的path进行手动点击查找或者搜索
这里我只记录一些总结的进阶用法。
Insomnia的environment分为base和sub两种,base则是针对整个工作区的环境,sub则是用户在base基础上自己新建的。因此我们可以将一些工作区内公用的、稳定的variables定义在base environment中,而一些自定义的、常变化的则可定义在sub environment中。
其次,sub environment中还包含普通的和private两种,private的特点是“will not be exported or synced”,导出以及上传git时,private environment是不会包含在里面的。
在做接口测试时,我们最常遇到的就是接口依赖。与自己编写代码相比,使用工具实现接口依赖以及相关自动化就没那么灵活。同样,在使用Insomnia实现接口自动化时,也有一些坑,这个稍后再提。
在Insomnia中,我们通常使用template tags来解决接口之间的依赖问题。tag可以说是这个软件的一大特色,功能比较强大,除了前面提到解决接口依赖,他还提供了一下功能:
如图中的hash、uuid、各种类型的时间戳,除此之外,我们还可以二开自定义一些tag,例如一定范围的随机数。
回到接口依赖问题,如果我们要将一系列的接口串联起来,我们就需要选择图中的Response Function。这个功能可以让下游接口去获取上游接口的response body的单个属性、整个response body、response header、请求的url。
我们最常用的就是获取response body的单个属性,在tag里,我们可以通过Jsonpath或Xpath来对response body进行筛选(用哪种方法筛选取决于返回的是Json还是XML)。筛选完成后,我们可以在Live Preview里预览筛选结果。最后我们需要在Trigger Behavior中设置,下游接口何时去请求上游接口,Insomnia提供了4个方案。
(1)Never resend request,顾名思义,永不重新请求,以最初的为准
(2)No History – resend when no responses present
在Insomnia中,请求完成后,会生成response history,用户可以查看history、删除当前response、清除所有response history。
(3)When Expired – resend when exsting response has expired
设置一个过期时间,一旦过期则重新请求。
(4)Always resend,顾名思义
如何设置,需要参考接口需要调用的参数的特性。如果是一个删除接口,tag里需要去获取一个id,这里就需要保证这个每次返回的id都是存在的,且状态是可以删除的。选择前两个则无法很好的保证接口返回值正确。
这个模块测试人员用得较多,可以通过创建一些测试套件、测试用例、编写一些断言,实现接口的自动化。
支持Js编写断言,语法也比较简单,具体可以参考: Chai Assertion Library.
在用例里输入"send",则会弹出发送请求的窗口,在编写断言需要其他接口支持时,这个功能比较有用。
开源软件是一座围城,外面的人想进去,里面的人想出来。
Insomnia这款软件真是让我又爱又恨。我爱她简洁又不是格调的外表,爱她能为我的boss节约经费,爱她模块明确、功能健全,但世上没有完美的软件,就像青春总是充满着遗憾。
虽说template tag是insomnia最具特色的功能,没有之一,但成也萧何,败也萧何。
比如:上游接口返回数据
{
"records":[
{
...
"id" = "123",
"state" = 1,
...
},
{
...
"id" = "456",
"state" = 0,
...
}
{
...
"id" = "789",
"state" = 0,
...
}
]
}
此时,下游接口需要state为0的数据的id,如果使用template tag,并用如下JsonPath进行筛选:
$.records[?(@.state==0)].id
筛选结果是个array,并无法进一步选择:
[
"456", "789"
]
template tag显示 :
Returned more than one result: $.records[?(@.state==0)].id
issue里已经有兄弟伙提过这个问题了,奈何官方貌似兴趣不高。。。本人也是暂时没有想出替代方法。
例如:在编写一些高级查询的单测时,需要校验请求的参数与响应的结果是否相符。
但在unit test里,没有找到能获取request参数的api;也无法像postman一样,将查询的条件存在环境变量中,并通过pm.getEnvrionment()这样的api来获取,并做断言校验。
在做接口自动化时,由于接口之间有依赖关系,因此哪个接口先跑,哪个接口后跑是需要精心设计的,这样才能保证整个接口自动化的成功率。但是Insomnia貌似不支持调整创建好的用例的顺序。因此后期迭代时,修改用例就比较痛苦了。
文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大
文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码
文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版
文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗
文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程
文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0
文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader
文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型
文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写
文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录
文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点
文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文