此文已由做者夏鹏受权网易云社区发布。
java
欢迎访问网易云社区,了解更多网易技术产品运营经验。apache
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 这些编程语言间无缝结合的、高效的服务。api
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)