`

工行数据中心高级经理 李雁南:接口冒烟测试方法

阅读更多

原文出自【听云技术博客】:http://blog.tingyun.com/web/article/detail/1340

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

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

设计思路:

交换这个问题会简单一些,毕竟应用常用的接口服务类型主要就是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.jpg

主要步骤如下:

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
1
分享到:
评论

相关推荐

    共赢,科技创新重塑传统金融

    当传统金融遇上FinTech哪些技术更该被关注?工商银行李雁南:IT架构转型带来的蝴蝶效应。传统金融企业在科技创新上的“结与解”。从全面对内到稳步对外:平安科技的战略转型和技术探索。

    Simple, small knots in compression bodies

    压缩体中的简单、极小纽结,李雁南,张明星,在一个三维流形中,如果一个纽结的补中不含有闭的本质不可压缩曲面,就说这个纽结是小的纽结。在三维流形上的拓扑学的研究中,一

    纽结的(m,n)-变换

    李雁南证明了对于任意的正整数m和n,(m,n)-变换都是可平凡化变换,即它们能够将任意纽结变成平凡结。这对于纽结理论的发展具有重要意义,因为它扩展了我们对纽结变换及其结果的理解。 纽结的基本定义涉及到三维空间...

    三菱FX3G FX3S与四台E700变频器Modbus RTU通讯控制:正反转、频率设定与读取方案,三菱FX3G FX3S与四台E700变频器通讯:Modbus RTU协议实现正反转、频率设定与控制

    三菱FX3G FX3S与四台E700变频器Modbus RTU通讯控制:正反转、频率设定与读取方案,三菱FX3G FX3S与四台E700变频器通讯:Modbus RTU协议实现正反转、频率设定与控制,快速反馈与教程包含,三菱FX3G FX3S 485协议通讯四台三菱E700变频器程序资料 三菱FX3G FX3S+485bd扩展,采用modbus rtu协议,crc校验,通讯控制四台E700变频器,可以实现正反转,停止,频率的设定,频率,电流等的读取。 反馈快,使用方便,包括教程,plc和触摸屏程序,变频器参数设置和接线,别的变频器支持rtu协议也可以实现。 ,三菱FX系列PLC; 485协议通讯; 变频器E700; 通讯控制; 参数设置; 教程。,三菱PLC控制E700变频器:485协议通讯与程序设置全解

    hyphen-nl-0.20050617-10.el7.x64-86.rpm.tar.gz

    1、文件内容:hyphen-nl-0.20050617-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/hyphen-nl-0.20050617-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    西门子S7-1200PLC结构化编程在5轴伺服项目中的应用:模块化设计、触摸屏控制及电气图纸实战解析,西门子S7-1200PLC结构化编程实现多轴联动与多种伺服功能应用:CAD图纸、PLC程序和触摸屏

    西门子S7-1200PLC结构化编程在5轴伺服项目中的应用:模块化设计、触摸屏控制及电气图纸实战解析,西门子S7-1200PLC结构化编程实现多轴联动与多种伺服功能应用:CAD图纸、PLC程序和触摸屏程序协同运作。,西门子S7-1200PLC结构化编程5轴伺服项目 ,包含plc程序、威纶通触摸屏程序、cad电气图纸。 可以实现以下功能,规格有: 1.三轴机械手X轴-Y轴-Z轴联动取放料PTO脉冲定位控制台达B2伺服 2.台达伺服速度模式应用+扭矩模式应用实现收放卷 3.程序为结构化编程,每一功能为模块化设计,功能:自动_手动_单步_暂停后原位置继续运行_轴断电保持_报警功能_气缸运行及报警. 4.每个功能块可以无数次重复调用,可以建成库,用时调出即可 5.上位机采样威纶通触摸屏 6.参考本案例熟悉掌握结构化编程技巧,扩展逻辑思维。 博图14以上都可以打开 ,核心关键词:西门子S7-1200PLC; 结构化编程; 5轴伺服项目; PLC程序; 威纶通触摸屏程序; CAD电气图纸; 三轴机械手; PTO脉冲定位控制; 台达B2伺服; 速度模式应用; 扭矩模式应用; 模块化设计; 轴断电保

    情感分析算法的关键应用领域与典型实战案例

    情感分析算法在多个领域有着广泛的应用场景和丰富的案例

    基于MATLAB仿真的MMC整流站与逆变站柔性互联技术研究:快速工况仿真与环流抑制控制,基于MATLAB仿真的MMC整流站与逆变站运行分析及四端柔性互联工况仿真模拟研究,21电平MMC整流站、MMC逆

    基于MATLAB仿真的MMC整流站与逆变站柔性互联技术研究:快速工况仿真与环流抑制控制,基于MATLAB仿真的MMC整流站与逆变站运行分析及四端柔性互联工况仿真模拟研究,21电平MMC整流站、MMC逆变站、两端柔性互联的MATLAB仿真模型,4端柔性互联、MMC桥臂平均值模型、MMC聚合模型(四端21电平一分钟即能完成2s的工况仿真) 1-全部能正常运行,图四和图五为仿真波形 2-双闭环控制,逆变站PQ控制,整流站站Udc Q控制 3-最近电平逼近调制+子模块电容充电 4-环流抑制控制 ,1. 21电平MMC整流站; 2. MMC逆变站; 3. MATLAB仿真模型; 4. 两端柔性互联; 5. 桥臂平均值模型; 6. 聚合模型; 7. 双闭环控制; 8. 最近电平逼近调制; 9. 子模块电容充电; 10. 环流抑制控制。,基于柔性互联的MMC系统仿真模型:多电平控制与环流抑制研究

    有效应对网络舆情教育培训PPT.pptx

    有效应对网络舆情教育培训PPT.pptx

    高光谱解混和图片去噪 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    【轴承压力】基于matlab GUI止推轴承压力计算【含Matlab源码 12069期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    娱乐小工具微信小程序源码下载支持多种流量主.zip

    淘宝买的,直接分享给大家了,没有测试环境,也没有办法去测。但我想,他应该是可以用的

    基于A、RBFS 和爬山算法求解 TSP问题 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    ACM比赛经验分享(基础知识与算法准备等).zip

    ACM比赛经验分享(基础知识与算法准备等)

    基于matlab平台的芯片字符识别.zip

    运行GUI版本,可二开

    比例-积分-微分 (PID) 鲁棒控制及电流反馈以确保 UPS 的稳定性 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    机器学习(预测模型):包含恶意网址的数据库或数据集

    该是指包含恶意网址的数据库或数据集,它通常被用于网络安全研究、恶意软件检测、网络欺诈防范等领域。研究人员和安全专家会利用这个数据集来分析恶意网址的特征、行为模式,进而开发出相应的检测算法和防护措施,以识别和阻止恶意网址对用户设备和网络环境造成的潜在威胁。该数据集包含约 651,191 条经过标记的 URL,涵盖了四种主要类型:良性(Benign)、篡改(Defacement)、钓鱼(Phishing)和恶意软件(Malware)。其中,良性 URL 占据了约 428,103 条,篡改 URL 有 96,457 条,钓鱼 URL 为 94,111 条,而恶意软件 URL 则有 32,520 条。该数据集的显著特点是其多类别分类的全面性,不仅包括常见的恶意 URL 类型,还涵盖了大量良性 URL,使得研究人员能够更全面地理解和区分不同类型的 URL。此外,数据集以原始的 URL 形式提供,研究人员可以根据需要提取和创建特征,而不受预设特征的限制。

    集字卡v4.3.4微信公众号原版三种UI+关键字卡控制+支持强制关注.zip

    字卡v4.3.4 原版 三种UI+关键字卡控制+支持获取用户信息+支持强制关注 集卡模块从一开始的版本到助力版本再到现在的新规则版本。 集卡模块难度主要在于 如何控制各种不同的字卡组合 被粉丝集齐的数量。 如果不控制那么一定会出现超过数量的粉丝集到指定的字卡组合,造成奖品不够的混乱,如果大奖价值高的话,超过数量的粉丝集到大奖后,就造成商家的活动费用超支了。我们冥思苦想如何才能限制集到指定字卡组合的粉丝数,后我们想到了和支付宝一样的选一张关键字卡来进行规则设置的方式来进行限制,根据奖品所需的关键字卡数,设定规则就可以控制每种奖品所需字卡组合被粉丝集到的数量,规则可以在活动进行中根据需要进行修改,活动规则灵活度高。新版的集卡规则,在此次政府发布号的活动中经受了考验,集到指定字卡组合的粉丝没有超出规则限制。有了这个规则限制后,您无需盯着活动,建好活动后就无人值守让活动进行就行了,您只需要时不时来看下蹭蹭上涨的活动数据即可。 被封? 无需担心,模块内置有防封功能,支持隐藏主域名,显示炮灰域名,保护活动安全进行。 活动准备? 只需要您有一个认证服务号即可,支持订阅号借用认证服务号来做活动。如果您

    DSP28035的CAN通信升级方案:包括源码、测试固件与C#上位机开发,支持周立功USBCAN-II兼容盒及BootLoader闪烁指示,DSP28035的CAN升级方案及详细配置说明:使用新动力开

    DSP28035的CAN通信升级方案:包括源码、测试固件与C#上位机开发,支持周立功USBCAN-II兼容盒及BootLoader闪烁指示,DSP28035的CAN升级方案及详细配置说明:使用新动力开发板与C#上位机软件实现固件升级,涉及用户代码、BootLoader代码及硬件连接细节,DSP28035的can升级方案 提供源代码,测试用固件。 上位机采用c#开发。 说明 一、介绍 1、测试平台介绍:采用M新动力的DSP28035开发板,CAN口使用GPIO30\31。波特率为500K。 2、28035__APP为测试用的用户代码,ccs10.3.1工程,参考其CMD配置。 3、28035_Bootloader_CAN为bootloader源代码,ccs10.3.1工程; 4、SWJ为上位机,采用VS2013开发,C#语言。 5、测试使用的是周立功的USBCAN-II,can盒,如果用一些国产可以兼容周立功的,则更这里面的ControlCAN.dll即可。 6、升级的app工程需要生成hex去升级,具体参考我给的工程的设置。 7、BootLoader代码,只有D400这一个灯1s闪烁一

    基于Matlab的数字验证码识别系统:预处理与不变矩算法的实践应用及GUI界面构建,基于MATLAB不变矩算法的数字验证码识别系统设计与实现,基于matlab不变矩算法实现数字验证码 过程:先对验证图

    基于Matlab的数字验证码识别系统:预处理与不变矩算法的实践应用及GUI界面构建,基于MATLAB不变矩算法的数字验证码识别系统设计与实现,基于matlab不变矩算法实现数字验证码 过程:先对验证图像进行去噪、定位、归一化等预处理,然后计算待识别数字的不变矩,再进行特征匹配,得到识别结果。 以Matlab软件为开发平台来进行设计实现及仿真,并构建相应的GUI界面。 实验结果表明利用不变矩在识别数字验证码方面具有可行性。 ,关键词:Matlab;不变矩算法;数字验证码;预处理;特征匹配;GUI界面;实验验证;可行性。,Matlab实现数字验证码识别:预处理与不变矩算法的GUI仿真

Global site tag (gtag.js) - Google Analytics