1.JMeter Java Sampler介绍 setupTest做些初始化的工作,每个线程只执行一次 teardownTest做些清理工作,每个线程只执行一次

  1.JMeter Java Sampler介绍

  setupTest做些初始化的工作,每个线程只执行一次

  teardownTest做些清理工作,每个线程只执行一次

  runTest具体的测试执行工作,每个并发每次循环都将执行一次

  SampleResult记录测试结果,result.sampleStart()一个事务开始,result.sampleEnd()一个事务结束

  main方法用于调试

01  package  com . xxx . yyy . perf;
02
03 import org.apache.jmeter.config.Argument;
04 import org.apache.jmeter.config.Arguments;
05 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
06 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
07 import org.apache.jmeter.samplers.SampleResult;
08 import org.springframework.context.ApplicationContext;
09 import org.springframework.context.support.ClassPathXmlApplicationContext;
10
11 import com.xxx.udb.client.PersonService;
12 import com.xxx.udb.client.result.PersonResult;
13
14 /**
15 *
16 * @author flynewton
17 */
18 public class GetPersonByLongId extends AbstractJavaSamplerClient {
19 private static final ApplicationContext ctx = new ClassPathXmlApplicationContext(
20 "spring-udb.xml");
21 private static PersonService personService = null;
22 private static final String loginId = "00000sb";
23 private static final String siteId = "CN";
24
25
26 @Override
27 public void setupTest( JavaSamplerContext context) {
28 super . setupTest( context);
29 personService = ( PersonService) ctx . getBean( "personServiceClient");
30 }
31
32 @Override
33 public void teardownTest( JavaSamplerContext context) {
34 super . teardownTest( context);
35 }
36
37 public SampleResult runTest( JavaSamplerContext arg0) {
38 SampleResult result = new SampleResult();
39 PersonResult personResult = null;
40
41 result . setSampleLabel( "result");
42
43 try {
44 result . sampleStart();
45 personResult = personService . getPersonByLongId( siteId , loginId);
46 result . sampleEnd();
47 } catch ( Throwable t) {
48 this . getLogger (). error( "Exception:" + t);
49 return null;
50 }
51
52 if ( personResult != null && personResult . getCode() == 0) {
53 result . setSamplerData( personResult . toString());
54 result . setSuccessful( true);
55 } else {
56 result . setSuccessful( false);
57 }
58
59 return result;
60 }
61
62 static void printResult( SampleResult res) {
63 System . out . println( "test is success:" + res . isSuccessful() + " used:"
64 + ( res . getEndTime() - res . getStartTime()) + "ms " + " result:"
65 + res . getSampleLabel() + ":" + res . getSamplerData());
66 }
67
68 public static void main( String [] args) {
69 GetPersonByLongId service = new GetPersonByLongId();
70 JavaSamplerContext context = new JavaSamplerContext( null);
71 service . setupTest( context);
72 SampleResult res1 = service . runTest( context);
73 printResult( res1);
74 service . teardownTest( context);
75 System . exit( 0);
76 }
77
78 }

  2.多接口性能测试

  按照上面的方法进行测试,每个需要测试的接口和场景都需要写一个这样的测试类,对于有些具有相似初始化,清理等工作,只有具体的那行事务代码不一样的情况,会有很多重复的工作。如下:可以考虑采用反射的方式来解决这个问题,尤其是业务非常类似的接口和场景。当然,反射会带来压力机的性能消耗,但是这个可以通过调整JMeter的JVM参数和增加JMeter实例来解决。

  1)利用反射后的结构如下:

  2)AbstractServiceClient是一个抽象基类

package  com . xxx . yyy . perf . base;
import java.lang.reflect.Method;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
/**
* Comment of AbstractServiceClient
* @author flynewton
*/
public abstract class AbstractServiceClient extends AbstractJavaSamplerClient {
public Object invokeTest( String testName , JavaSamplerContext context ,SampleResult sample) {
Method [] methods = this . getClass (). getMethods();
for ( Method m : methods) {
if ( m . getName (). equalsIgnoreCase( testName)) {
try {
return m . invoke( this , context , sample);
} catch ( Throwable t) {
this . getLogger (). error( "execute method:" + testName + " falied" , t);
}
}
}
return null;
}
}

3)GetPersonTest为某一类具有相似业务场景的测试类 其中 getDefaultParameters方法设置默认参数:test传入具体要执行的 测试方法 ;info传入日志级别,利用main方法

  3)GetPersonTest为某一类具有相似业务场景的测试类

  其中 getDefaultParameters方法设置默认参数:test传入具体要执行的测试方法;info传入日志级别,利用main方法进行调试时设置为true,真正进行性能测试的时候设置为false

package  com . xxx . yyy . perf;
import org.apache.jmeter.config.Argument;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.xxx.udb.client.PersonService;
import com.xxx.udb.client.result.MultiPersonResult;
import com.xxx.udb.client.result.PersonResult;
import com.xxx.udb.perf.base.AbstractServiceClient;
/**
* Test get person
* @author flynewton
*/
public class GetPersonTest extends AbstractServiceClient {
private static final ApplicationContext ctx = new ClassPathXmlApplicationContext(
"spring-udb.xml");
private static PersonService personService = null;
private static String loginIdCache = "00000sb";
private static String loginIdWithoutCache = "01haytham";
private static String siteIdCache = "CN";
private static String siteIdWithoutCache = "IN";
private static String alimailCn = "gchg2008@zzgcchen.cn";
private static String alimailUdb = "000001@lvcuinm.com.cn";
private static String uidCache = "300113578";
private static String uidWithoutCache = "in5002997";
private static String emailCache = "00000sb@alibaba-test.com";
private static String emailWithoutCache = "5002997@alibaba-inc.com";
@Override
public void setupTest( JavaSamplerContext context) {
super . setupTest( context);
personService = ( PersonService) ctx . getBean( "personServiceClient");
}
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params . addArgument( "test" , "testMethod");
params . addArgument( "info" , "false");
return params;
}
@Override
public void teardownTest( JavaSamplerContext context) {
super . teardownTest( context);
}
public Object testGetPersonByLongIdViaCache( JavaSamplerContext arg0 ,
SampleResult sample) {
PersonResult personResult = null;
try {
sample . sampleStart();
personResult = personService . getPersonByLongId( siteIdCache , loginIdCache);
sample . sampleEnd();
} catch ( Throwable t) {
this . getLogger (). error( "Exception:" + t);
return null;
}
return personResult;
}
public Object testGetPersonByLongIdWithoutCache( JavaSamplerContext arg0 ,
SampleResult sample) {
PersonResult personResult = null;
try {
sample . sampleStart();
personResult = personService . getPersonByLongId( siteIdWithoutCache , loginIdWithoutCache);
sample . sampleEnd();
} catch ( Throwable t) {
this . getLogger (). error( "Exception:" + t);
return null;
}
return personResult;
}
public Object testGetPersonByAlimailCN( JavaSamplerContext arg0 ,
SampleResult sample) {
PersonResult personResult = null;
try {
sample . sampleStart();

接口性能测试--JMeter的更多相关文章

  1. 【原创】相对完整的一套以Jmeter作为工具的性能测试教程(接口性能测试,数据库性能测试以及服务器端性能监测)

    准备工作 jmeter3.1,为什么是3.1,因为它是要配合使用的serveragent所支持的最高版本,下载链接 https://pan.baidu.com/s/1dWu5Ym JMeterPlug ...

  2. JMeter之Http协议接口性能测试

    一.不同角色眼中的接口 1.1,开发人员眼中的接口    1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...

  3. jmeter简单的接口性能测试

    原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ...

  4. Jmeter Http接口性能测试

    Jmeter Http接口性能测试 1.      启动Jmeter Jmeter下载解压即可使用,Jmeter启动,点击D:\ProgramFiles\jmeter\apache-jmeter-2. ...

  5. JMeter之Http协议接口性能测试--基础

    一.不同角色眼中的接口 1.1,开发人员眼中的接口    1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...

  6. 【技术博客】 利用Postman和Jmeter进行接口性能测试

    利用Postman和Jmeter进行接口性能测试 作者:ZBW 版本:v1.1 在Phylab的开发过程中,对于生成报告接口的性能考量十分重要.原有的Latex接口虽然生成的报告美观,但编译Latex ...

  7. jmeter实现服务器端后台接口性能测试

    实现目的 在进行服务器端后台接口性能测试时,需要连接到Linux服务器端,然后通过命令调用socket接口,这个过程就需要用到jmeter的SSH Command取样器实现了. 脚本实现 设置CSV ...

  8. jmeter接口性能测试【CSV文件读取+接口关联+设置集合点】

    一.前言 周计划上安排了个接口性能测试的任务,便开始了职业生涯的第一个接口性能测试... 接口进行压测之前,首先需要调通脚本.有两种方式,一种是通过抓包工具(如fiddler)抓取业务接口:另一种是通 ...

  9. 老李分享:接口测试之jmeter

    老李分享:接口测试之jmeter   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.移动端自动化测试很多人把他仅仅理解成appu ...

随机推荐

  1. 如何直接在ftp里编辑文件

    首先要连接ftp,如何链接ftp,这个我已经分享过,如果还有不懂的,可以查看下经验分享,打开ftp,并连接你要修改的站点!   下载安装代码编辑器,比如EditPlus.sublime text等,随 ...

  2. GridView,Repeater增加自动序号列

    有三种实现的方式, 第一种方式,直接在Aspx页面GridView模板列中.这种的缺点是到第二页分页时又重新开始了. <Columns> <asp:TemplateField Hea ...

  3. JS 点击弹出图片/ 仿QQ商城点击左右滚动幻灯片/ 相册模块,点击弹出图片,并左右滚动幻灯片

    1, 点击弹出图片 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  4. python与正则表达式

    匹配一个字符: . 任意非\n字符 [...] \d \D digit \s \S space \w \W word 匹配前一个字符的多个: * 0->> + 1->> ? 0 ...

  5. DOS 命令For精解示例

    最基本形态: 在cmd 窗口中:for %I in (command1) do command2 在批处理文件中:for %%I in (command1) do command2 在批处理中,FOR ...

  6. 原来 laravel 路由 参数可以为可选。。。 很灵活

    基本路由 您的应用程序的绝大多数路由将在 app/routes.php 文件中定义.Laravel 中最简单的路由由一个 URI 和一个闭包调用组成. 基本 GET 路由 复制代码代码如下: Rout ...

  7. 转-HttpClient4.3 连接管理

    转 http://www.yeetrack.com/?p=782 2.1.持久连接 两个主机建立连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并且也很耗时间.Http连接需要的三次握手开销很大 ...

  8. H5+微信支付报-1问题

    1.检查发起支付的参数,全部设置为小写: WxPayData jsApiParam = new WxPayData(); jsApiParam.SetValue("appid", ...

  9. 月四 周2 ii

    今日通过色鸟鸟 以此纪念 不是很想玩红鸟鸟 简单来说因为红鸟鸟结束后,五彩斑斓系列就和我没关系了= = 珍惜为每一部作品感伤的每一刻吧

  10. jQuery jQuery对象与dom对象的转换

    jQuery对象本质上是一个构造函数,主要作用是返回jQuery对象的实例. jQuery选择器返回的是一个类似数组的对象,用下标运算取出的对象如$('body')[0],是dom对象,对此jquer ...