接口冒烟测试方法

接口冒烟测试方法

今年遇到了几个问题,与接口的功能和性能相关,恰巧最近公司也在组织以冒烟测试为主题的活动,于是乎突发奇想,寻思着能否将接口测试与冒烟测试结合起来,发掘一些新的接口测试思路与方法。

平时对接口测试关注的比较少,大部分接口功能都是通过应用前段的功能测试案例覆盖了,并没有单独安排针对接口安排测试案例,因此真正到了实施时,我才发现对于接口测试还缺乏一个准确的定义。求助度娘,百度知道上的定义如下:接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。这个定义与我们之前的理解并没有太大差异,简而言之,开放平台应用通过接口服务实现应用间消息和数据交换,因此我们的测试重点就聚焦在消息和交换两个问题上了。

设计思路:

交换这个问题会简单一些,毕竟应用常用的接口服务类型主要就是HTTP和SOCKET两种,而针对这两种类型服务的测试方法也很多,百度一下会有很多相关测试方法和框架。对于我们这些不懂编程的小白,python自然是首选。python提供了最基本的request和httplib2库实现报文的发送和接收,当然对于HTTP类型接口还会区分为post和get,这个在request库中也都有对应的方法,我们通过一张接口登记表来记录每一个接口的类型、地址和方法,这些信息都可以从配置管理系统中获得。

消息可以简单的视为接口测试案例,比交换问题复杂很多,需要考虑很多因素,我们总结为以下四个主要问题 :

1、消息获取的途径有哪些;

2、消息是否能够覆盖所有的程序分支;

3、如何判断返回结果的正确性;

4、测试效率问题。

下面我将逐一介绍我们的解决方案:

1、消息获取的途径问题:

传统的接口测试方法主要采用手工编辑接口报文的方法,这种方法只要按照接口文档的描述构造测试报文就OK了,虽然简单,但是有失高效。于是这个方法有了升级版本,就是通过参数化报文中的关键字段,批量生成测试案例,这也是接口性能测试的主要方法之一。这个方法虽然解决了获取报文的效率问题,但是并不能很好解决覆盖率的问题,毕竟报文是人工构造出来的,并不能非常真实的体现实际的业务交易场景,实际测试结果也印证了这一观点。于是,我们想既然传统的接口测试是在正常的业务交易测试中覆盖了,那么我们干脆去直接捕获前段发起交易产生的接口消息报文。非常幸运,公司绝大部分的开发部门都是严格按照LOG4J格式记录应用交易日志的,因此我们只要按照一定的规则去分析应用的交易日志,就能够提取出我们所需要的内容。

2、消息是否能够覆盖所有的程序分支问题:

根据消息内容的不同,应用程序会选择不同的程序逻辑分支,如何能够覆盖所有的分支,传统方法只有通过白盒测试实现,但是验收测试更偏重于黑盒或灰盒测试,因此过去经常因为测试案例不全面,导致某一个未覆盖分支的程序问题流入生产环境。我们目前想到的方法,是通过在系统中导入存量的接口测试案例,并通过日志中捕获的测试案例,经过一段时间的积累,逐渐形成一个较为完整的接口测试案例库。如果能够旁路一台生产环境应用服务器日志,效果会更好,毕竟生产的交易种类和场景是最全面的,当然这里还要解决生产数据脱敏等问题,对于金融行业还要面对很多制度流程的问题。

3、如何判断消息返回结果的正确性问题:

每一个应用对于接口报文的设计都是遵照一定的规范和习惯,我们只需要梳理出标记交易成功状态的字段就可以了。某些交易不包含这个字段,我们就需要进行人工判断,并对成功的结果进行格式化(比如timestamp,流水号等),提取MD5特征值,作为判断接口后续测试结果正确性的依据。不过,状态字段是成功并不代表接口测试通过,毕竟返回结果中还包含了很多业务数据字段需要验证。如果这些字段值变化比较规律(比如一直不变、持续增加或减少),我们准备定义一些模型规则去判断它们。而那些上蹿下跳的数据,那就留给人去判断了。其实,对于冒烟测试而言,我们认为并不需要苛求去判断每一笔交易的正确性,只需要统计大量测试案例结果的成功率,并与前期成功率进行比较,以判断测试结果是否正常。

4、执行效率的问题

我们理解的冒烟测试是要在尽可能短的时间内,对新的版本或测试环境进行一个准入测试,以判断其是否具有开展后续是验收及适应性测试的条件,因此冒烟测试的效率至关重要。我们的策略是通过异步小批量作业的方式不间断的扫描日志处理报文,每日定时并发的方式去执行测试案例,执行时间取决于版本安装时间或测试任务的需要,目前2万笔测试案例,基本可以控制在10分钟之内。

实现方案:

实现架构非常简单,就是一套开源的ELK日志采集架构,加上python开发的接口测试框架和结果统计功能,如下图所示:

 主要步骤如下:

1,通过开源ELK实现应用日志的采集与管理。在客户端部署logstash agent,并配置日志采集策略;日志记录以key-value的格式上送REDIS内存数据库,这个设计主要是为了在client和server之间做一个缓冲,保证了日志记录的0丢失;ELSTICSEARCH提供了日志的全文检索功能,并提供了API服务用来外部调用

2,利用python的pyes库调用ELSATICSEARCH的API服务,根据特征字段抓取xml和json格式的接口报文。

3,对采集到的接口报文进行格式化处理,格式化日期、流水号或时间戳等字段,并对格式化后的报文做MD5的校验。

4,利用python的http和socket接口库实现接口测试案例,这里可能要根据不同应用做一些客户化,尽量通过通用的方式实现。

5,对于异常的测试案例进行自动退出。为了保证案例集的可用性,我们这里做了一个简单的接口退出规则,如果执行超过三次且每次都失败的接口案例,会被系统自动定义为失效案例。

6,对案例的执行结果进行成功率分析和错误归因分析,最终发现存在的接口问题。这里不再关注每一个测试案例返回的成功和失败,而是针对每一类接口的成功率、失败率和错误类型进行统计,从数值和数量变化的角度去发现问题。

7,接口定义平台提供了一个web的接口定义模块,帮助业务测试人员根据接口文档编辑接口要素,并拼装成接口报文进行测试。对于复杂的交易场景(比如流程长或交互次数多),可以在平台上编排接口的调用顺序和前后项逻辑关系,实现一个比较复杂场景的接口测试。虽然这个功能更偏重于自动化测试,但是这个功能帮助我们实现了无法通过应用前段功能测试覆盖的接口测试,是非常好的补充。

通过上述方法,我们在一周的时间里,在3个应用进行了试验,发现了30多个接口,接近2万笔报文案例,案例的有效性可以达到了97%。通过每日对这些案例进行自动化测试,发现了一些接口功能和应用环境配置的问题。

上述这种测试方法还只是从技术的角度测试,为了满足实际业务测试的需求,我们也实现一些简单的功能:比如我们提供了多维度的测试结果统计;提供基于业务关键字的报文案例和测试结果的检索功能,以便业务测试人员快速的找到自己的测试案例;允许业务测试人员手工修改报文案例库,这样就可以跳过应用前端,直接针对接口开展测试;最后我们对每一次执行时间都进行记录,形成了报文案例响应时间的基线,用于后续的接口性能评估。

总结和问题:

以上方法是一个非常简单的接口冒烟测试方法,前提是功能测试覆盖过接口案例,并且接口报文会记录在日志中。随着案例和执行结果的不断积累,接口测试覆盖会更加充分,统计结果会更加精确。如果能够从生产环境日志中获取案例,那么测试效果会更好。上述方法还有很多不成熟的地方,比如对于测试结果的利用上、在失败报文的归类和归因分析上,还应该会有更好的方法。如果全面推广实施,测试的效率,尤其是测试报文提取和分析的效率还需要进一步提升。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

canoe 以太网配置

canoe vn5620 以太网配置 首先电脑连接上VN5620,配置了License才能进行端口设置 从开始菜单中打开Vector Hardware Configuration 进入到配置页面,会出现VN5620,选择进行右击,点击第一个选项Ethernet device configuration ca…

TCP协议 及 重要机制

目录 1.TCP 协议报文格式 1.1.端口号 1.2 首部长度 和 选项 1.3 保留位 1.4 检验和 1.5 32位序号和确认序号 2. TCP的重要机制 2.1 确认应答 2.2 超时重传 2.3 连接管理 2.3.1 三次握手 2.3.2 四次挥手 2.4 滑动窗口 2.5 流量控制 2.6 拥塞控制 2.7 延时应答 2…

el-transfer 穿梭框

用到了jquery&#xff0c;所以需要下载jquery包&#xff0c;"jquery": "^3.6.0" <template><div>选中的{{result}}---数据<el-transfer v-model"result" :data"transferData" filter-placeholder"冷冻盒编号&qu…

全网最详细介绍如何实现图片存储阿里OSS实现资源持久化存储

什么是阿里云OSS 阿里云OSS&#xff08;Object Storage Service&#xff0c;对象存储服务&#xff09;是阿里云提供的一种存储服务&#xff0c;它支持任意类型的数据存储&#xff0c;如图片、视频、日志文件等。OSS以对象&#xff08;Object&#xff09;的形式组织数据&#x…

【深度学习】手动实现RNN循环神经网络

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; 目录 01 回顾 02 RNN神经网络原理 03 RNN神经网络实现 04 RNN神经网络实验 RNN的特别结构使得RNN具备了短期记忆能力&#xff0c;使其能够学习部分语义信息…

Teamcenter自定义Send To命令列表

需求 在TC中&#xff0c;选中目标后&#xff0c;右击&#xff0c;出现"Send To"&#xff0c;有时候需要对其进行添加或删减。以隐藏“Validation Manager”为例。 技术细节 进入“Command Suppression”应用。 设置需要隐藏的命令&#xff0c;以隐藏“Validation…

全栈的自我修养 ———— 微信小程序开发电脑测试api请求正常,移动端请求异常!!

小编今天也是在电脑测试时候发送请求http到服务器是可以通的&#xff0c;但是到了手机端就不可以了&#xff0c;经过小编仔细钻研&#xff0c;终于发现了以下问题&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff0…

数据库学习之关系数据库与关系

2.1关系数据库与关系 1. 什么是数据模型&#xff1f;什么是关系数据模型 数据模型是对现实世界物体的一种抽象&#xff0c;是严格定义的一组概念的集合&#xff0c;这些概念精确描述了物体的静态特性&#xff0c;动态特性和完整性约束。 静态特性&#xff1a;数据结构 动态特…

Java - 数组 Array

一、概念 结构是一种线性表&#xff08;元素排列成直线的结构&#xff09;&#xff0c;创建数组会开辟一块连续的内存空间&#xff0c;长度固定无法更改&#xff0c;元素可以重复且只能是同一种类型&#xff08;Object类型数组除外&#xff09;。优点查询快&#xff1a;由于元…

二手手机回收平台系统|基于JSP技术+ Mysql+Java+ B/S结构的二手手机回收平台系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

代码中加了@ApiModelProperty注解,swagger不显示注释?

前言 今天接了一个需求&#xff0c;因为只是涉及到字段内容的更改&#xff0c;就把以前的接口copy过来&#xff0c;只改了一个sql。结果后面和前端联调的时候&#xff0c;前端告诉我swagger返回的字段没有注释&#xff0c;我寻思我家里swagger的注解&#xff0c;为什么没显示呢…

类和对象详解

目录 1.面向对象 1.1什么是面向对象 1.2与面向过程的比较 2类的定义和使用 2.1简单认识类 2.2类的定义格式 2.3类的实例化 2.3.1什么是实例化 2.3.2类和对象的说明 2.3.3this关键字 2.3.4什么是this引用 2.3.5this引用的特性 3.对象的构造和实例化 3.1对象的初始化…

AIOCR:AI文字识别web集成系统@Kylin+RISCV

基于kotti_ai的AI文字识别web集成系统 AIOCR项目目标&#xff1a; 在KylinRISCV搭建一个kotti_ai构架的网站&#xff0c;提供AI OCR文字识别web服务。 二期目标&#xff1a;在AIOCR的基础上提供chatgpt和文心一言等大模型调用&#xff0c;建立综合大模型应用平台。 功能&am…

【链表】算法例题

目录 八、 链表 57. 环形链表 ① 58. 两数相加 ② √ 59. 合并两个有序链表 ① √- 60. 随机链表的复制 ② 61. 反转链表II ② 62. K个一组翻转链表 ③ 63. 删除链表的倒数第N个结点 ② √- 64. 删除排序链表中的重复元素II ② √- 65. 旋转链表 ② √- 66. 分隔链…

腾讯云服务器如何购买省钱?2024年优惠券和优惠活动整理

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

基于torch.compile和gptfast代码风格实现ChatGLM模型推理加速

目录 一、ChatGLM模型代码重构迁移 二、推理的代码重构 三、效果分析对比 参考文章 torch2.0发布以后模型训练和推理可以实现一行代码加速&#xff0c;试用之后发现效果并不明显。随后gptfast项目也发布&#xff0c;表明它确实是可以实现模型推理的加速&#xff0c;看来之前…

c/c++ 深拷贝和浅拷贝

深拷贝与浅拷贝 深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是对象复制的两种不同方式&#xff0c;它们涉及到对象成员数据的复制方式和内存管理。 浅拷贝&#xff08;Shallow Copy&#xff09;&#xff1a; 浅拷贝是指将一个对象的…

投资400亿美元!人工智能或将诞生超级大国

据外媒报道&#xff0c;沙特阿拉伯政府计划设立约 400 亿美元的基金来投资人工智能&#xff0c;如此规模的基金将成为迄今为止全球最大的专注于人工智能发展的基金之一。 据知情人士透露&#xff0c;该基金长期以来一直被硅谷用来为科技初创企业提供资金&#xff0c;甚至一度是…

在线教育话术(1W字精选)

产品结构图 Nginx实现代理 问&#xff1a;我们在本机的host文件中配置了域名映射&#xff0c;都是同一个服务器。我们只需要输入对应的域名就可以到对应的界面&#xff0c;这是怎么实现的&#xff1f; 答&#xff1a;主要就是通过Nginx反向代理来实现的&#xff0c;Nginx会先…

【go语言开发】性能分析工具pprof使用

本文主要介绍如何在项目中使用pprof工具。首先简要介绍pprof工具的作用&#xff1b;然后介绍pprof的应用场景&#xff0c;主要分为工具型应用和服务型应用。最后数据分析项目&#xff0c;先采集项目信息&#xff0c;再可视化查看 文章目录 前言应用场景工具型应用服务型应用 数…