此文已由作者夏鹏授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

Apache Jmeter是基于Java开发的性能测试工具,支持多种协议的测试,包括:Web(HTTP/HTTPS)、SOAP、FTP、Database(JDBC)、LDAP、Mail(POP3/IMAP)、JAVA;还提供了多种性能数据统计报表,使用简单方便简直是性能测试中居家旅行杀人越货之必备;但是~本次性能测试需求是Thrift服务接口,并不在Jmeter支持的协议范围内,继续用钟意的Jmeter完成Thrift服务的接口压测就需要进行二次开发来实现,以下简单介绍一下通过Jmeter进行扩展协议二次开发以支持Thrift服务接口的压测需求的过程。

Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

Thrift也支持Java就好办了~

1.Java测试代码编写

1-1测试项目

rec包是Thrift服务类

ThriftClientTest是测试类

1-2引入依赖

1-3测试代码

测试类需要继承Jmeter的AbstractJavaSamplerClient类,然后重写以下方法:

①public void setupTest(JavaSamplerContext context);初始化方法,用于初始化性能测试的每个线程,每个线程前都会执行一次。

初始化Thrift客户端

②public Arguments getDefaultParameters();设置入参,已设置的参数会显示在jmeter GUI的参数列表中。

设置本次测试接口需要参数化的参数user_id

③public SampleResult runTest(JavaSamplerContext context);性能测试的线程运行体,测试执行主体,从context中获取参数,并调用被测方法,完成与服务器的交互。该方法是java Sampler实现的重点,执行次数取决于线程数和循环次数。

设置请求属性以及具体的调用逻辑

sampleStart()开始统计响应时间标记、sampleEnd()结束统计响应时间标记,两个时间戳之差就是一次java请求的响应时间,单位是ms。

System.out输出会显示在启动JMeter时的命令窗口内,有助于监控结果但过多的输出会影响性能的准确性。

④public void teardownTest(JavaSamplerContext context);测试结束时调用,每个线程执行一次。setupTest和teardownTest方法不需要时可以不写。

关闭相关的资源

所有重写方法执行的先后顺序为:

getDefaultParameters() --> setupTest(JavaSamplerContext context) --> runTest(JavaSamplerContext context) --> teardownTest(JavaSamplerContext context)

1-4集成到Jmeter

com.netease.rec包和ThriftClientTest测试类分别打成jar、Thrift中的jar包 libthrift-0.9.3.jar, slf4j-api-1.7.12.jar放到apache-jmeter-2.13/lib/ext下

2.Jmeter建立测试计划

2-1重新启动Jmeter。新建Thread Group, 在Thread Group下,Thread Group -> Add -> Sampler -> Java Request,在Classname下选择新做的plugin的类名。

2-2最后,配置相应的线程数,循环次数,添加聚合报告就可以进行Thrift服务接口的压力测试了

网易云免费体验馆,0成本体验20+款云产品!

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 Android事件分发机制浅析(3)

Jmeter压测Thrift服务接口的更多相关文章

  1. 性能工具之Jmeter压测Thrift RPC服务

    概述 Thrift是一个可互操作和可伸缩服务的框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, ...

  2. jmeter压测tcp协议接口:java.net.SocketException: Software caused connection abort: socket write error

    tcp接口,试压过程中,部分请求报如下错误: java.net.SocketException: Software caused connection abort: socket write erro ...

  3. 性能工具之Jmeter压测Hprose RPC服务

    概述 Hprose(High Performance Remote Object Service Engine),国人开发的一个远程方法调用的开源框架.它是一个先进的轻量级的跨语言跨平台面向对象的高性 ...

  4. jmeter 压测duobbo接口,施压客户端自己把自己压死了

    jmeter 压测duobbo接口,jmeter代码不合理,导致每执行一次请求,会调用一次消耗内存的实例化.导致越压越慢,请求发不出去.这个时候需要考虑修改代码了. 截图中,tps越来越少. 原来初始 ...

  5. jmeter压测学习1-window环境准备与案例

    前言 最近用jmeter做一些接口的压力测试,记录下使用过程中遇到的一些问题. 在使用window机器做并发压测的时候,发现并发数设置100的时候,会出现报错:java.net.SocketExcep ...

  6. 一文揭秘测试平台中是如何将测试用例一键转化Jmeter压测脚本

    ​    ​接上篇,一键转化将接口测试平台测试用例转化成Jmeter压测脚本思路,这里我首先在java 上面做了一个简单的实验,看看 转化的中间遇到的问题,这里呢,我只是给了一个简单的demo 版本, ...

  7. jmeter压测参数设定(转)

    jmeter压测参数设定 一.基本公式 线程数 = QPS * time: 注:QPS--每秒完成请求的个数:time--每个请求响应完成平均需要时间: 故QPS * time就是所有请求完成响应所需 ...

  8. jmeter压测、操作数据库、分布式linux下运行、webservice接口测试、charles抓包

    一.jmeter压测 在线程组中设置好,然后添加http请求,t添加聚合报告查看压力测试结果,如图: 一般压测时间10-15分钟,如果是稳定性测试,一般n*12小时,这些并发用户一直在请求. tps: ...

  9. jmeter压测之添加负载机

    jmeter压测基本介绍一般基准测试(基准测试时间一般为5分钟)后压测的时间是10-15分钟: 实施测试之前要拿到测试指标 例如:tps要达到多少响应时间要达到多少并发数要达到多少TPS :服务端每秒 ...

随机推荐

  1. iOS 混合变换旋转 CGAffineTransform

    在ios 中, Core Graphics 提供了一系列的函数可以在一个变换的基础上做深层次的变换,如果做一个既要缩放又要旋转的变换,以下的方法比较实用. CGAffineTransformScale ...

  2. eclipse 修改Java代码 不用重新启动tomcat

    例子: 1.在tomcat server.xml文件配置加上这句话: <Context debug="0" docBase="C:\Users\admin\Desk ...

  3. 最长上升子序列(LIS)长度的O(nlogn)算法

    最长上升子序列(LIS)的典型变形,熟悉的n^2的动归会超时.LIS问题可以优化为nlogn的算法.定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则记录最小的那个最末元素 ...

  4. Java面试题总结之Java基础(二)

    Java面试题总结之Java基础(二) 1.写clone()方法时,通常都有一行代码,是什么? 答:super.clone(),他负责产生正确大小的空间,并逐位复制. 2.GC 是什么? 为什么要有G ...

  5. nginx.org与nginx.com有什么区别(Nginx与Nginx Plus)

    nginx.org是开源社区,管理着Nginx开源版. nginx.xom是商业社区,管理着Nginx Plus商业版. 商业版和开源版是有很大区别的,服务还加更强大的功能,当然依托开源社区加载第三方 ...

  6. Java重写equals方法和hashCode方法

    package com.ddy; public class User {     private Integer id;     private String name;     private St ...

  7. html5 拖拽元素

    利用html5实现元素的拖拽,让拖动元素在指定的容器中拖动. 注意点:1.被拖元素要设置拖动属性.draggable="true" 2.容器元素要设置阻止默认事件处理 实现效果图如 ...

  8. 找中位数O(n)算法

    题目描写叙述: 给定一个未排序的整数数组,找到当中位数. 中位数是排序后数组的中间值,假设数组的个数是偶数个.则返回排序后数组的第N/2个数. 例子 给出数组[4, 5, 1, 2, 3], 返回 3 ...

  9. ganglia监控自己定义metric实践

    Ganglia监控系统是UC Berkeley开源的一个项目,设计初衷就是要做好分布式集群的监控.监控层面包含资源层面和业务层面,资源层面包含cpu.memory.disk.IO.网络负载等,至于业务 ...

  10. hdoj-2090-算菜价(水题)

    算菜价 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...