APP下载

基于JMeter的接口拨测系统设计

2024-04-14黄鹏高雅濛程小贤

机电信息 2024年7期
关键词:健康检查任务调度

黄鹏 高雅濛 程小贤

摘要:随着网络应用数量的持续增长,服务质量已经成为决定用户体验的核心因素。面对网络环境下应用质量保障的挑战,确保网络应用的稳定性以支持其顺畅运行显得尤为重要。通过实时监测和快速故障诊断,能够迅速定位并解决问题,缩短故障的持续时间,从而增强应用的稳定性。鉴于此,全面介绍了拨测系统的背景、理论基础以及接口测试工具的选择比较;然后引入JMeter的相关知识,为自主研发拨测系统的架构和模块设计提供了理论支撑,并详尽描述了自研拨测系统的设计流程;最后对自研系统的优点进行阐述,通过接口拨测实现对Web应用可用性的监控,证明了该系统具有很高的实用价值。

关键词:JMeter工具;接口测试;健康检查;拨测系统;任务调度

中图分类号:TP319    文献标志码:A    文章编号:1671-0797(2024)07-0026-04

DOI:10.19514/j.cnki.cn32-1628/tm.2024.07.007

0    引言

随着网络技术的快速发展,采用B/S架构应用成为企业信息化主流。但网络应用也存在服务无法访问、异常等问题,造成用户体验不佳等。现在应用缺少监测手段,故障发现周期长,进而解决缓慢,甚至有些情况下会导致业务受影响中断,但无告警产生,直到用户投诉大量产生时,系统故障才被发现。

因此,监控保障应用稳定性变得尤为重要。拨测系统扮演着关键角色,相比于传统人工接收故障工单反馈,它能在提升应用稳定性方面发挥重要作用,通过对网络应用的实时测量,帮助用户快速识别问题,快速响应处理并解决问题,缩短故障的持续时间,减小影响范围。

1    拨测系统原理

与被动模式相反,拨测系统[1]采用主动模式,它通过内部触发接口调用判断和监控应用的正确性来监控保障应用的稳定性。业务应用程序对外暴露接口,拨测系统通过模拟客户端或者Web浏览器向应用程序发送请求,应用程序接收请求后对接收到的数据做处理,同时向拨测系统返回请求应答,然后拨测系统解析响应体是否符合预期,判断应用程序是否正常,是否对外正常提供服务,可以帮助确保应用程序的质量和可靠性。

通常判断响应体是否符合预期有以下两种方式:

1)判断响应状态码[2]:应用程序默认请求成功会返回状态码200;假如请求错误返回400、404、500等状态码,则意味着Web应用出错。

2)判断响应数据:通过相等、包含、正则表达式等手段检查数据特性是否正确与完整,从而判断应用程序的正确性。

2    接口测试工具对比

拨测系统底层采用接口测试方式实现。市面上有很多测试工具可供选择,下面就常见的三种方式进行介绍:

1)编程方式:使用开源社区封装的Http客户端工具包,通过编写程序方式调用接口,接收响应,判断检测结果。此方式灵活性、定制化程度高,但耦合性也同樣高,后续修改可能大,不利于扩展。

2)Postman工具[3]:它是一款轻量级接口测试工具,主要测试RESTful[4]接口,其特点包括简单易用、界面简洁、快速上手;专注于Http请求,功能相对简单,响应断言支持不够。它适合作为一个独立工具,在开发、自测阶段供程序员使用。

3)JMeter工具[5]:它是Apache基金会开发的一款功能全面的性能测试工具,既支持性能测试,也支持接口测试。纯Java跨平台工具,支持Windows、Linux多平台;功能强大,支持编程式的前置后置处理,灵活度高;可作为独立工具使用,也提供开发库方便程序使用。

通过上述接口测试工具的对比可知,JMeter工具既可作为独立工具做接口测试和排错,又可被程序调用使用,功能强大,扩展能力强,自研系统将基于JMeter脚本设计拨测系统。

3    自研拨测系统

3.1    创建JMeter脚本步骤

自研拨测系统以JMeter脚本为核心,围绕Jmx脚本上传、执行、结果解析、告警构建业务系统,因此在详细介绍系统设计之前,有必要就如何创建JMeter脚本做简要介绍。按照下述步骤创建Jmx脚本:

1)启动JMeter应用:进入JMeter_Home下的bin目录,双击jmeter.bat文件启动程序界面;

2)创建测试计划:打开JMeter后,首先创建测试计划,选中“测试计划”,右键选择添加“线程组”,在线程组界面根据需要设置线程数、启动时间、循环次数等参数;

3)添加采样器:在线程组处右键,选择添加“HTTP Request”采样器,在HTTP采样器界面上填写服务器IP、端口、路径、请求方式、参数等信息;

4)添加配置元素:根据需要,可以在线程组和采样器上添加配置元素,比如添加Http Cookie管理器、Http请求头管理器、默认配置等内容;

5)添加预处理和后处理器:在线程组和采样器上增加处理器,用于对采样器发送请求前的拦截处理、响应后的数据处理;

6)添加断言:在采样器上添加断言,用于验证服务器响应是否符合预期;

7)添加监听器:在线程组上添加各类监听器,对线程组下所有采样器的执行数据进行收集、分析和展示。

通过上述步骤,完成对第三方接口的测试配置,点击“运行”按钮测试接口正确性,这样就完成了一个JMeter脚本的编写,最后点击“保存”按钮会生成一个Jmx脚本文件,自研拨测系统利用Jmx文件实现应用的拨测功能。

3.2    架构设计

自研拨测系统采用程序加JMeter脚本方式设计实现。图1展示了整个系统的设计图,整个系统分为三个部分:

第一部分生成Jmx文件,利用前面小节的JMeter创建步骤,编写、调试并生成Jmx脚本,保证Jmx正确实现对第三方应用程序的接口调用。

第二部分是自研拨测系统,它由多个模块组成,模块相互配合,完成Jmx脚本的保存/执行、结果的解析、异常告警的触发。

第三部分为第三方应用服务,它们对外开放暴露接口,方便拨测系统检测服务状态。

3.3    模块设计

依据拨测系统架构设计,拨测系统共分为6个模块,分别为Upload配置模块、调度器模块、JMeter引擎模块、日志模块、告警模块、查询模块。

3.3.1    Upload配置模块

该模块提供JMeter脚本文件的配置维护功能,负责将JMeter脚本文件从本地上传到业务服务器上。在用户界面上使用“文件上传”组件,同时录入脚本文件的相关信息,例如:脚本描述、告警接收人、告警接收人邮箱、抄送人邮箱、脚本的时间调度表达式。该模块除持久化脚本文件数据外,还会根据调度表达式调用调度器模块。

3.3.2    调度器模块

调度器模块采用任务方式管理维护,用户使用上传配置模块完成脚本文件上传后,调度器模块会新建一个周期任务。周期任务可以按秒、分钟、小时、天、周、月等时间周期执行。服务端的调度框架有很多,这里采用Spring的TaskSchedule[6]实现,它是一个轻量级的任务调度器,允许开发者轻松地安排和管理周期性任务,如定时统计数据、定时清理缓存等。它是Spring自带的调度框架,开发者无须引入额外的第三方类库,无须安装额外的第三方服务,集成方便;无须编写复杂的代码,易于使用;支持多种任务执行策略,灵活度高。当任务触发时间到达后,调度器模块会调用JMeter引擎模块。

3.3.3    JMeter引擎模块

JMeter引擎模块用来调用JMeter脚本文件,生成测试报告。制作脚本文件使用JMeter图形化界面方式,而这里利用JMeter程序开发库实现。在自研拨测系统里引入开发库,导入并使用已定义的类和方法完成脚本文件的执行。

3.3.4    日志模块

JMeter脚本的运行结果是Html报告文件,日志模块会将Html报告整体打包压缩,保存在对象服务器Minio中;同时解析报告文件夹中的JSON数据,判断本次拨测结果。如果运行成功,仅仅将日志记录持久化到数据库,后续为查询模块提供数据。如果运行失败,通知告警模块进行处理,并将日志记录持久化到数据库中。

3.3.5    告警模块

该模块用于发送通知,當JMeter脚本运行失败时,根据上传脚本时预先设置的发送人邮箱、抄送人邮箱,给责任人发送邮件告警,同时邮箱附件包括Html报告。最后将日志记录状态从未处理更新为已处理。

3.3.6    查询模块

该模块提供灵活的查询条件,方便用户根据需要筛选和查询日志。例如根据日志状态查询历史日志数据,便于对问题进行回溯和分析。同时,将调度器模块的能力暴露给用户,用户可以查询调度任务,查看正在运行的调度任务并针对任务进行手动启动、停止、删除操作。

3.4    数据库设计

根据拨测系统的模块设计,提取业务概念名词抽象出数据库实体表,Upload配置模块对应script表,调度器模块对应task表,日志模块对应log_record表,告警模块对应alarm_record表。系统里一个JMeter脚本上传配置完成后,script表新增一条脚本记录,task表也新增一条对应任务记录,log_record和alarm_record表随着脚本被定时调度以及告警触发与清除在对应表里新增若干记录。

下面详细介绍四张表拥有的字段含义:

1)script表记录脚本信息,包含脚本名称、脚本描述、脚本文件所在地址、触发时间cron表达式、脚本告警接收人邮箱、告警抄送人邮箱列表信息。

2)task表记录任务信息,task_id是任务主键,script_id是外键,指向script表,task和script一对一关系,每当新增一条script记录,就会同步新增一条task任务,同时在程序内存里的调度器模块会新增一个任务对象,用于等待触发任务执行。

3)log_record表记录脚本运行日志数据。script_id是外键,指向script表。task每运行一次,log_record就新增一条记录。status字段表示本次运行结果成功还是失败;report_url字段表示本次运行产生的报告文件地址;process_flag字段针对失败状态时有效,标记是否已经处理发送告警。

4)alarm_record表存储发送告警的数据记录。log_record_id是外键,指向log_record表,表示当前告警来源于哪一个日志记录。script_id字段是外键,冗余字段,方便快速找到告警对应的脚本信息数据。alarm_type字段是告警类型,可选值有上报告警和清除告警两种。valid字段表示当前告警有效性,用于实现发送清除告警功能。

4    自研拨测系统的优点

自研的拨测系统采用程序和JMeter脚本方式,具有很多优点。

1)程序和脚本耦合低:意味着它们之间的依赖较少,互相影响较小。这样的设计有助于降低系统复杂性,提高代码的可维护性和可读性。通过模块化封装,可以将程序和脚本分离,使得职责和功能更为清晰。

2)扩展容易:程序和脚本分离的设计使得系统具有较好的可扩展性。当需要新增功能和修改现有功能时,可以在不影响其他部分的前提下独立对脚本进行调整。

3)调试方便灵活:程序和脚本耦合低、职责分明的情况下,排查和调试问题变得更加容易。当出现问题时,可以快速定位故障边缘和故障源,并通过脚本进行调试验证。

4)支持丰富:依托JMeter的接口类型多样性能力,还可以支持数据库、Dubbo等形式的接口测试,提供多样的拨测能力,但程序调用方式固定不变。

总之,程序和脚本方式耦合度低、职责分明、扩展容易、调试方便灵活,有助于提高软件的质量、可靠性和可维护性,同时降低了开发和运维的难度。

5    结束语

本文介绍了拨测系统的重要性、应用价值、基本工作原理以及各种接口测试工具的差异,然后展示了JMeter脚本的创建步骤,接着详细说明了自研拨测系统的设计与实施过程,最后对自主研发的拨测系统架构的优点进行了阐述。

[参考文献]

[1] 钟鼎,郭志林,邓琼,等.一种面向互联网质量监控的拨测系统[J].信息通信,2014(3):247-248.

[2] 高文辉.软件测试中接口测试概述与实践[J].数字技术与应用,2020,38(3):112.

[3] 陈晓阳.基于Java反射自动生成Postman接口测试文件的方法[J].电脑编程技巧与维护,2021(9):27-28.

[4] 陈锐,何华军,王辰.基于RESTful接口的基础数据对接设计[J].电脑编程技巧与维护,2022(9):122-124.

[5] 张亿军.JMeter测试应用研究[J].信息技术与信息化,2021(10):61-64.

[6] 丁振凡,李馨梅.Spring的任务定时调度方法的研究比较[J].智能计算机与应用,2012,2(4):55-56.

收稿日期:2023-12-14

作者简介:黄鹏(1985—),男,陕西人,助理工程师,研究方向:DevOps工具链和Web开发。

猜你喜欢

健康检查任务调度
成都市13468名育龄男性孕前优生健康检查分析
孕前优生健康检查中护理健康教育的作用分析
浅谈孕前优生健康检查的重要性
基于PEPA的云计算任务调度性能分析
基于改进NSGA-Ⅱ算法的协同制造任务调度研究
基于时间负载均衡蚁群算法的云任务调度优化
基于小生境遗传算法的相控阵雷达任务调度
云计算环境中任务调度策略
云计算中基于进化算法的任务调度策略
陕西省旬阳县孕前优生健康检查结果分析及预防研究