
JMeter性能测试工具性能测试工具——JMeter-CSDN博客JMeter下载入口Apache JMeter - Apache JMeter™一、Jmeter 简介Jmeter是由Apache公司开发的一个纯Java开源项目即可以用于做接口测试也可以用于做性能测试具备高移植性和扩展性可以实现跨平台运行可以实现分布式负载。采用多线程允许通过多个线程并发取样或通过独立的线程对不同的功能同时取样。使用 Jmeter 一般用于以下两种类型的性能测试基本能覆盖绝大多数的性能测试需求负载测试通过测试系统在资源超负荷情况下的表现以发现设计上的错误或验证系统的负载能力。压力测试测试系统能承受的最大负载能力。目的在于发挖掘出目标服务系统可以处理的最大负载。Jmeter 进行性能测试的基本过程新增线程组创建测试线程组并设置线程数量及线程初始化启动方式。新增 JMeter 元组创建各种默认元组及测试元组填入目标测试静态资源请求和动态资源请求参数及数据。新增监听器创建各种形式的结果搜集元组以便在运行过程及运行结束后搜集监控指标数据。运行查看结果调试运行分析指标数据挖掘性能瓶颈、评估系统性能状态。二、Jmeter进行接口测试在聊jmeter如何进行性能测试之前我们先简单介绍-下jmeter如何进行接口测试的1、获取接口文档使用Jmeter进行接口测试之前需要拿到api接口文档对接口信息进行分析用于接口脚本的设计准备。通常我们可以跟项目对应开发同学获取开发接口设计文档类如Java后端项目使用Swagger进行接口文档维护除此之外我们Web页面可以在开发者选项中获取相应的接口调用信息移动端可通过Fiddler工具抓包得到相应的接口请求入参和返回信息。有了接口文档后我们还需要熟悉接口业务接口地址鉴权方式出参入参错误码等.....下面我们以12306网站为例分别获取Get类型接口和Post接口进行演示a、在12306的车次查询页面获取Get类型接口例如上面的接口我们可以得到的信息如下请求 URLhttps//kyfw.12306.cn/otn/leftTicket/queryZleftTicketDTO.train_date2023-01-24leftTicketDTO.from_stationSHHleftTicketDTO.to_stationBJPpurpose_codesADULT请求方法 GET请求头...Connectionkeep-aliveCookie_uab_collina****** JSESSIONID****** guidesStatusoff highContrastModedefaltMode cursorStatusoff _jc_save_fromStation%u4E0A%u6D77%2CSHH _jc_save_wfdc_flagdc RAIL_EXPIRATION1673539455343 RAIL_DEVICEID****** BIGipServerpassport****** _jc_save_toStation%u5317%u4EAC%2CBJP _jc_save_toDate2023-01-10 BIGipServerindex1104740618.43286.0000 route6f50b51faa11b987e576cdb301e545c4 BIGipServero******4545.0000 current_captcha_typeC _jc_save_zwdch_fromStation%u4E0A%u6D77%2CSHH _jc_save_zwdch_cxlx1 fofcwi8s6jfgcquajch3UNhkI-pbzTa1PopuXw-4vLSsFwS******JLLAo4MZvmDbZL-yoEDOuNWhUau7y5bnrdhvGOKaoer_Dg3VT8******0pIcw6-5Bjgg _jc_save_fromDate2023-01-24Hostkyfw.12306.cn...b、在12306首页中获取Post类型接口例如上面的接口我们可以得到的信息如下请求 URLhttps//kyfw.12306.cn/otn/logsdk/getInfo请求方法POST请求头1...Connectionkeep-aliveContent-Typetext/plaincharsetUTF-8Hostkyfw.12306.cn...POST接口请求参数可在负载中进行查看Chrome则在载荷中进行查看不同浏览器查看tab标签名称不一致2、配置接口请求a、添加线程组b、添加HTTP请求填充Get接口请求信息填充Post接口请求信息c、添加HTTP信息头管理器维护接口请求头信息d、添加观察结果树3、进行接口测试a、执行接口请求b、查看接口返回信息4、进行接口返回信息验证JMeter以及Postman等接口测试工具他们都是基于协议进行工作的使用这些工具进行发送请求当请求发送成功的时候即协议发送成功在查看结果树中请求样本显示绿色。比如协议状态码是200就是成功也是仅仅代表协议发送成功但是业务不一定成功。有可能是协议发送成功了但是业务没有成功但是JMeter默认不做判断。那么想要校验业务成功还是失败就得需要进行断言断言根据接口的响应进行断言一般主要断言业务状态码以及messege等信息。a、添加响应断言并设置要校验的字段信息b、添加JSON断言并设置要校验的字段信息c、添加断言结果d、查看验证返回信息断言结果中只会展示错误的断言信息若请求的接口正常返回值且返回信息中的字段断言信息符合期望值则不会展示断言信息若请求的接口返回信息中的字段断言信息有误断言结果中会输出对应的验证结果信息查看结果树中也可在对应的接口请求下查看错误的断言信息5、Jmeter也支持文件上传/下载接口测试这部分我们后续单独进行介绍挖坑6、常见的接口依赖、接口公共参数配置、参数化等在另外的章节中展开介绍持续挖坑...三、Jmeter并发测试上面我们简单介绍了Jmeter如何进行接口测试的下面我们更进一步在接口功能测试完善的基础上开展接口的另外一个层面的性能测试工作。线程组设置线程组概念通俗的讲一个线程组可以看做一个虚拟用户组线程组中的每个线程都可以理解为一个虚拟用户。多个用户同时去执行相同的一批次任务。每个线程之间都是隔离的互不影响的。一个线程的执行过程中操作的变量不会影响其他线程的变量值。线程数线程数也就是并发数每个线程将会完全独立的运行测试计划互不干扰。多个线程用于模仿对服务器的并发访问。设置ramp-upramp-up 用于设置启动所有线程所需要的时间。有人称之为启动时间有人说是准备时长看个人喜好如果选择了10个线程并且ramp-up 是100秒那么JMeter将在100秒内使10个线程启动并运行。每个线程将在前一个线程启动后10100/10秒后启动。当这个值设置的很小、线程数又设置的很大时在刚开始执行时会对服务器产生很大的负荷。设置循环次数该项设置线程组在结束前每个线程循环的次数如果次数设置为1那么JMeter在停止前只执行测试计划一次。假设线程数nRamp-UpT循环次数a若每个循环运行时间是 t当时间到 S T- T/n时最后一个线程启动若要使所有线程同时运作则需要在最后一个线程启动的时候第一个线程仍未关闭为达到这个要求需满足 a·t S及a S/t每一个线程运行时间既是R a·t此处的a是大于S/t的某一值则第一个线程在时间点为R 的时候停止整个测试理论运行时间则是 S R 1-1/n·T a·t总结测试中变量是 线程数 n 每个循环时间 t 是个实践值循环次数 a 只是为了延长单个线程的运行时间从而保证当最后一个线程启动时所有线程都在运行中达到压测效果。举个大栗子模拟50个用户每人在抢票时不停的刷新了100次页面查看余票信息1、设置线程数为50 我们的并发用户量就是50个用户同时登录2、添加定时器同步定时器Synchronizing Timer--用来设置集合点其作用是阻塞线程直到指定的线程数量到达后再一起释放可以瞬间产生很大的压力3、设置集合点当用户数量达到20个的时候再同时请求进行登录操作1模拟用户的数量即指定同时释放的线程数数量若设置为0等于设置为线程组中的线程数量2超时时间即超时多少毫秒后同时释放指定的线程数如果设置为0该定时器将会等待线程数达到了设置的线程数才释放若没有达到设置的线程数会一直死等。如果大于0那么如果超过超时时间中设置的最大等待时间后还没达到设置的线程数Timer将不再等待释放已到达的线程。4、添加聚合报告5、执行脚本6、查看压测结果聚合报告即压测过程结束时对每次请求及对整体请求的一次总结报告聚合报告中参数释意LabelHTTP Request name属性值。样本测试的过程中一共发出了多少个请求即总线程数如果模拟50个用户每个用户迭代100次这里就显示5000对应图形报表中的样本数目。平均值单个Request的平均响应时间计算方法是总运行时间除以发送到服务器的总请求数对应图形报表中的平均值。中位数50%用户的响应时间。90%百分数90%用户的响应时间。最小值服务器响应的最短时间。最大值服务器响应的最长时间。异常%本次测试中出错率请求的数量/请求的总数。吞吐量默认情况下表示每秒完成的请求数。接受KB/Sec每秒从服务器接收到的数据量即每秒钟请求的字节数时间单位均为ms。7、其他结果展示元件a、响应时间图b、图形结果总结在本篇中我们对JMeter工具作了简单的介绍且分别从接口测试以及接口并发测试的层面进行了图文介绍。对于接口性能测试方面应当还涉及到相应的服务器性能监控以及性能监控时需要观测的性能点尤其是在开展性能测试之前需要进行性能测试的需求分析、制定测试计划、编写和调试测试脚本、收集测试结果、分析测试数据整合性能测试报告诸多流程中涉及到很多细节都是我们需要去通过不断地学习和实践的。