原文出自【听云技术博客】: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,通过开源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%。通过每日对这些案例进行自动化测试,发现了一些接口功能和应用环境配置的问题。
上述这种测试方法还只是从技术的角度测试,为了满足实际业务测试的需求,我们也实现一些简单的功能:比如我们提供了多维度的测试结果统计;提供基于业务关键字的报文案例和测试结果的检索功能,以便业务测试人员快速的找到自己的测试案例;允许业务测试人员手工修改报文案例库,这样就可以跳过应用前端,直接针对接口开展测试;最后我们对每一次执行时间都进行记录,形成了报文案例响应时间的基线,用于后续的接口性能评估。
总结和问题:
以上方法是一个非常简单的接口冒烟测试方法,前提是功能测试覆盖过接口案例,并且接口报文会记录在日志中。随着案例和执行结果的不断积累,接口测试覆盖会更加充分,统计结果会更加精确。如果能够从生产环境日志中获取案例,那么测试效果会更好。上述方法还有很多不成熟的地方,比如对于测试结果的利用上、在失败报文的归类和归因分析上,还应该会有更好的方法。如果全面推广实施,测试的效率,尤其是测试报文提取和分析的效率还需要进一步提升。
欢迎大家拍砖。
相关推荐
当传统金融遇上FinTech哪些技术更该被关注?工商银行李雁南:IT架构转型带来的蝴蝶效应。传统金融企业在科技创新上的“结与解”。从全面对内到稳步对外:平安科技的战略转型和技术探索。
压缩体中的简单、极小纽结,李雁南,张明星,在一个三维流形中,如果一个纽结的补中不含有闭的本质不可压缩曲面,就说这个纽结是小的纽结。在三维流形上的拓扑学的研究中,一
李雁南证明了对于任意的正整数m和n,(m,n)-变换都是可平凡化变换,即它们能够将任意纽结变成平凡结。这对于纽结理论的发展具有重要意义,因为它扩展了我们对纽结变换及其结果的理解。 纽结的基本定义涉及到三维空间...
呼伦贝尔市-鄂温克族自治旗-街道行政区划_150724_Shp数据-wgs84坐标系.rar
内容概要:本文详细介绍了用于Cruise纯电动汽车仿真的输入模板,该模板由8个表单组成,覆盖了从整车参数到计算输出的各个方面。每个表单都包含了关键参数的设置方法及其背后的逻辑,如校核清单、整车参数、电池参数、电机参数、传动系参数、制动轮胎参数、能量回收参数以及最终的计算输出。文中不仅提供了具体的参数定义和计算公式,还附有Python代码示例,帮助用户更好地理解和应用这些参数。此外,作者还分享了一些实用技巧,如防止参数遗漏的校验函数、处理电池温度效应的实际容量计算函数等。 适合人群:从事纯电动汽车仿真工作的工程师和技术人员,尤其是那些需要频繁处理复杂输入参数的人群。 使用场景及目标:① 提高纯电动汽车仿真工作的效率和准确性;② 规范参数收集流程,减少因参数错误导致的仿真失败;③ 提供详细的参数设置指导和代码实现,帮助用户更好地理解和应用Cruise仿真平台。 其他说明:本文不仅提供了一个全面的输入模板,还分享了许多实践经验,旨在帮助用户在实际工作中少走弯路,提高工作效率。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容概要:本文档是作者在bugku平台进行CTF(夺旗赛)杂项题目练习的解题思路总结,涵盖第25至33题。题目类型多样,包括但不限于隐写术、进制转换、音频分析、图像处理等。每道题都详细介绍了背景信息、解题步骤和所使用的工具,如Stegsolve用于图片隐写分析、Python脚本处理进制转换、Audacity解析音频中的摩尔斯电码等。通过这些实例,展示了如何运用各种技术手段解决实际问题,强调了理论与实践相结合的重要性。 适合人群:对信息安全、逆向工程感兴趣的读者,特别是有一定编程基础和技术积累的安全爱好者或初学者。 使用场景及目标:①学习隐写术的基本原理及其在CTF比赛中的应用;②掌握不同进制间的转换方法及其实现;③熟悉音频文件中提取摩尔斯电码的技术;④了解图像处理技巧,如调整尺寸、解析隐藏信息等;⑤掌握压缩文件的明文攻击技巧,以及如何利用已知信息破解加密文件。 阅读建议:由于每道题涉及的知识点较为独立且专业性强,建议读者根据自己的兴趣选择相关题目深入研究。同时,在学习过程中应注重动手实践,尝试复现文中提到的操作流程,并结合网络资源进一步拓展知识面。对于遇到的工具和概念,可以通过查阅官方文档或参考教程加深理解。
内容概要:本文详细介绍了如何在Qt中实现一个高效的时间标尺控件,重点讲解了时间标尺的缩放功能、刻度自动生成以及曲线绘制的技术细节。首先,通过重载wheelEvent方法,利用QGraphicsView框架实现了基于鼠标的缩放功能,确保缩放过程中鼠标位置对应的时间点不变。其次,针对不同的时间范围,采用对数分级算法自动调整刻度间隔,使刻度线既美观又实用。最后,在曲线绘制方面,使用QPainterPath进行路径构建,并通过预处理和分段绘制优化性能,确保即使面对大量数据点也能保持流畅的用户体验。 适合人群:具有一定Qt开发经验的程序员,尤其是从事数据可视化项目的开发者。 使用场景及目标:适用于需要展示时间序列数据的应用程序,如金融图表、监控系统、日志分析工具等。主要目标是提供一个响应迅速、视觉效果优秀的交互式时间标尺控件,帮助用户更好地理解和分析数据。 其他说明:文中还提到了一些性能优化的小技巧,如数据预处理、路径分段绘制等,有助于提高大型数据集的渲染速度。同时,作者强调了在时间转换函数中避免使用低效的方法,推荐自行实现高效的缓存机制。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
赤峰市-喀喇沁旗-街道行政区划_150428_Shp数据-wgs84坐标系.rar
内容概要:本文详细介绍了使用Python和LSTM(长短期记忆网络)进行时间序列预测的方法及其应用场景。首先阐述了时间序列预测的重要性,指出传统ARIMA模型在处理复杂模式和长期依赖关系时的局限性,进而引出LSTM的优势。LSTM通过引入门控机制(输入门、遗忘门、输出门)和记忆单元,有效解决了长期依赖问题,能更好地捕捉时间序列中的复杂模式。接着,文章详细讲解了LSTM的工作原理,包括各个门控机制的作用和计算流程。随后,通过股票价格预测和气温预测两个案例,逐步演示了从环境搭建、数据准备(包括数据读取、归一化处理)、模型构建(使用Keras搭建LSTM模型)、模型编译、训练与评估到预测结果可视化的全过程。最后,文章总结了LSTM的关键技术和实现要点,并展望了其在自然语言处理、计算机视觉、生物学等领域的应用前景及未来研究方向。 适合人群:具备一定编程基础,尤其是对深度学习和时间序列预测感兴趣的开发者、数据科学家和研究人员。 使用场景及目标:①帮助读者掌握LSTM的基本原理和工作流程;②提供详细的Python实现步骤,包括环境配置、数据处理、模型搭建与训练;③通过具体案例展示LSTM在时间序列预测中的应用,如股票价格预测和气温预测;④探讨LSTM在其他领域的潜在应用,如自然语言处理、计算机视觉和生物学等。 阅读建议:本文内容详尽,涵盖理论与实践两方面,建议读者在阅读过程中结合代码实践,逐步理解LSTM的工作原理和实现细节,特别是注意数据处理和模型参数的选择对预测效果的影响。
内容概要:本文详细介绍了基于三菱FX5U PLC的机床X轴和Y轴工作台定位控制系统的开发与优化过程。主要内容涵盖:使用J4-A系列伺服驱动器进行绝对位置控制,通过ST语言和结构化梯形图实现复杂的20组直线插补工序;手动模式下的点动与长按操作逻辑;MODBUS通讯协议的应用;以及详细的报警诊断和统计功能。文中展示了如何利用结构体封装参数,提高代码可读性和维护性,并通过具体案例解释了关键技术和调试经验。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉三菱PLC编程的从业者。 使用场景及目标:适用于需要深入了解三菱FX5U PLC编程技巧及其在实际工程项目中应用的人群。目标是掌握高级编程方法如结构化编程、ST语言特性、MODBUS通讯优化等,从而提升工作效率并减少调试时间。 其他说明:文章不仅提供了理论知识,还包括大量实用的编程技巧和实践经验分享,有助于读者更好地理解和应用于实际工作中。
大同市-大同市-街道行政区划_140200_Shp数据-wgs84坐标系.rar
内容概要:本文详细介绍了火电厂协调仿真机的应用及其优势,特别是在PID参数调试方面的高效性和安全性。文中通过具体的Python代码示例展示了如何构建锅炉和汽轮机的仿真模型,并解释了PID控制器的工作原理。重点讨论了PID参数调试的关键点,如响应延迟、采样时间设定以及前馈控制的叠加效果。此外,还提到了实时曲线对比、参数扫描、自整定算法等功能的实际应用,强调了仿真机在提高调试效率和降低现场调试风险方面的重要作用。 适合人群:从事火电厂自动化控制领域的工程师和技术人员,尤其是需要进行PID参数调试的专业人士。 使用场景及目标:① 提高PID参数调试效率,减少现场调试时间和成本;② 降低现场调试的安全风险;③ 实现更加精确和平稳的控制系统性能。 其他说明:文章不仅提供了理论指导,还结合了大量的实战经验和具体代码示例,帮助读者更好地理解和掌握协调仿真机的使用方法。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接使用。
学号-姓名-作业二编写程序.ipynb