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. java 反射实践

    /** * * @author yuxg */ import coreJava.javaFile; import javaClassStudy.Student; import javaClassStu ...

  2. sketchup

    1. clean start 1. 删除中间人物 2. windows---style 3. Windows---Model Info 2. 好的建模习惯 1. 正面朝镜头 View---ToolBa ...

  3. ios 实现自定义状态栏StatusBar 和 导航栏navigationBar 的状态和颜色

    很多app中可以看到不同与导航栏的状态栏的颜色,他妈的真绕嘴. 一.更改状态栏颜色 (StatusBar) 就是比如导航栏是红色的状态栏是绿色的. 要实现这样的效果其实很简单,就是添加一个背景view ...

  4. 扫描内网活跃的ip

    网段内活跃的ip:nmap -sP 10.10.30.0/24|grep for|awk '{print $5}'

  5. 完成对数据库的CRUD操作

    PS:查询相对复杂,要处理结果集,增删改则不用. package it.cast.jdbc; import java.sql.Connection; import java.sql.ResultSet ...

  6. IConfigurationSectionHandler 使用~

    读取webconfig中自定义的xml  处理对特定的配置节的访问. webconfig <configSections> <section name="NopConfig ...

  7. 总结-computer

    常见问题 1.任务栏位置:%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar 2.锁定到任务栏的图标不见了: ...

  8. GCD死锁 多线程

    NSLog("); dispatch_sync(dispatch_get_main_queue(), ^{ // sync同步 main串行 // 同步,异步--线程 同步-主线程 // m ...

  9. PerformSelector

    PerformSelector 1. 执行和取消 //执行 [self performSelector:@selector(showMessage) withObject:nil afterDelay ...

  10. UNIX中的文件类型

    Unix的文件类型信息包含在stat结构的st_mode成员中可以用宏确定文件类型: 普通文件(S_ISREG()):包含某种形式数据的常用文件类型 目录文件(S_ISDIR()):这种文件包含其他文 ...