接口性能测试--JMeter

1.JMeter Java Sampler介绍

2.多接口性能测试

=================================================================================================

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 . setSuccessfultrue); 
55          }  else  { 
56              result . setSuccessfulfalse); 
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 . exit0); 
76      } 
77  
78 
 }

 

 

2.多接口性能测试

按照上面的方法进行测试,每个需要测试的接口和场景都需要写一个这样的测试类,对于有些具有相似初始化,清理等

工作,只有具体的那行事务代码不一样的情况,会有很多重复的工作。如下:

可以考虑采用反射的方式来解决这个问题,尤其是业务非常类似的接口和场景。当然,反射会带来压力机的性能消耗,

但是这个可以通过调整JMeterJVM参数和增加JMeter实例来解决。

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

2)AbstractServiceClient是一个抽象基类

16  package  com . xxx . yyy . perf . base
17  
18  import  java.lang.reflect.Method
19  
20  import  org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient
21  import  org.apache.jmeter.protocol.java.sampler.JavaSamplerContext
22  import  org.apache.jmeter.samplers.SampleResult
23  
24  /** 
25  * Comment of AbstractServiceClient 
26   @author flynewton 
27  */ 
28  
29  public  abstract  class  AbstractServiceClient  extends  AbstractJavaSamplerClient { 
30  
31      public  Object  invokeTestString  testName ,  JavaSamplerContext  context ,SampleResult  sample)  { 
32          Method []  methods  =  this . getClass (). getMethods(); 
33          for ( Method  m  :  methods)  { 
34              if ( m . getName (). equalsIgnoreCasetestName))  { 
35                  try  { 
36                      return  m . invokethis ,  context , sample); 
37                  }  catch ( Throwable  t)  { 
38                      this . getLogger (). error"execute method:"  +  testName  +  " falied" ,  t); 
39                  } 
40              } 
41  
42          } 
43          return  null
44      } 
45  }

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

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

 

016  package  com . xxx . yyy . perf
017  
018  import  org.apache.jmeter.config.Argument
019  import  org.apache.jmeter.config.Arguments
020  import  org.apache.jmeter.protocol.java.sampler.JavaSamplerContext
021  import  org.apache.jmeter.samplers.SampleResult
022  import  org.springframework.context.ApplicationContext
023  import  org.springframework.context.support.ClassPathXmlApplicationContext
024  
025  import  com.xxx.udb.client.PersonService
026  import  com.xxx.udb.client.result.MultiPersonResult
027  import  com.xxx.udb.client.result.PersonResult
028  import  com.xxx.udb.perf.base.AbstractServiceClient
029  
030  /** 
031  * Test get person 
032  * @author flynewton 
033  */ 
034  public  class  GetPersonTest  extends  AbstractServiceClient  { 
035      private  static  final  ApplicationContext  ctx  =  new ClassPathXmlApplicationContext
036              "spring-udb.xml"); 
037      private  static  PersonService  personService  =  null
038      private  static  String  loginIdCache  =  "00000sb"
039      private  static  String  loginIdWithoutCache  =  "01haytham"
040      private  static  String  siteIdCache  =  "CN"
041      private  static  String  siteIdWithoutCache  =  "IN"
042      private  static  String  alimailCn  =  "gchg2008@zzgcchen.cn"
043      private  static  String  alimailUdb  =  "000001@lvcuinm.com.cn"
044      private  static  String  uidCache  =  "300113578"
045      private  static  String  uidWithoutCache  =  "in5002997"
046      private  static  String  emailCache  =  "00000sb@alibaba-test.com"
047      private  static  String  emailWithoutCache  =  "5002997@alibaba-inc.com"
048  
049      @Override 
050      public  void  setupTestJavaSamplerContext  context)  { 
051          super . setupTestcontext); 
052          personService  = ( PersonService)  ctx . getBean"personServiceClient"); 
053      } 
054  
055      public  Arguments  getDefaultParameters()  { 
056          Arguments  params  =  new  Arguments(); 
057          params . addArgument"test" ,  "testMethod"); 
058          params . addArgument"info" ,  "false"); 
059          return  params
060      } 
061  
062      @Override 
063      public  void  teardownTestJavaSamplerContext  context)  { 
064          super . teardownTestcontext); 
065      } 
066  
067      public  Object  testGetPersonByLongIdViaCacheJavaSamplerContext  arg0 , 
068              SampleResult  sample)  { 
069          PersonResult  personResult  =  null
070          
071          try  { 
072              sample . sampleStart(); 
073              personResult  =  personService . getPersonByLongIdsiteIdCache , loginIdCache); 
074              sample . sampleEnd(); 
075          }  catch ( Throwable  t)  { 
076              this . getLogger (). error"Exception:"  +  t); 
077              return  null
078          } 
079          return  personResult
080      } 
081      
082      public  Object  testGetPersonByLongIdWithoutCacheJavaSamplerContext  arg0 , 
083              SampleResult  sample)  { 
084          PersonResult  personResult  =  null
085          
086          try  { 
087              sample . sampleStart(); 
088              personResult  =  personService . getPersonByLongIdsiteIdWithoutCache , loginIdWithoutCache); 
089              sample . sampleEnd(); 
090          }  catch ( Throwable  t)  { 
091              this . getLogger (). error"Exception:"  +  t); 
092              return  null
093          } 
094          return  personResult
095      } 
096  
097      public  Object  testGetPersonByAlimailCNJavaSamplerContext  arg0 , 
098              SampleResult  sample)  { 
099          PersonResult  personResult  =  null
100  
101          try  { 
102              sample . sampleStart();

接口性能测试--JMeter

5人收藏此文章我要收藏发表于2年前(2011-01-06 11:58) , 已有1913次阅读,共0个评论

主要内容有:

1.JMeter Java Sampler介绍

2.多接口性能测试

=================================================================================================

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 . setSuccessfultrue); 
55          }  else  { 
56              result . setSuccessfulfalse); 
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 . exit0); 
76      } 
77  
78 
 }

 

 

2.多接口性能测试

按照上面的方法进行测试,每个需要测试的接口和场景都需要写一个这样的测试类,对于有些具有相似初始化,清理等工作,

只有具体的那行事务代码不一样的情况,会有很多重复的工作。如下:

可以考虑采用反射的方式来解决这个问题,尤其是业务非常类似的接口和场景。当然,反射会带来压力机的性能消耗,但是

这个可以通过调整JMeterJVM参数和增加JMeter实例来解决。

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

2)AbstractServiceClient是一个抽象基类

16  package  com . xxx . yyy . perf . base
17  
18  import  java.lang.reflect.Method
19  
20  import  org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient
21  import  org.apache.jmeter.protocol.java.sampler.JavaSamplerContext
22  import  org.apache.jmeter.samplers.SampleResult
23  
24  /** 
25  * Comment of AbstractServiceClient 
26   @author flynewton 
27  */ 
28  
29  public  abstract  class  AbstractServiceClient  extends  AbstractJavaSamplerClient { 
30  
31      public  Object  invokeTestString  testName ,  JavaSamplerContext  context ,SampleResult  sample)  { 
32          Method []  methods  =  this . getClass (). getMethods(); 
33          for ( Method  m  :  methods)  { 
34              if ( m . getName (). equalsIgnoreCasetestName))  { 
35                  try  { 
36                      return  m . invokethis ,  context , sample); 
37                  }  catch ( Throwable  t)  { 
38                      this . getLogger (). error"execute method:"  +  testName  +  " falied" ,  t); 
39                  } 
40              } 
41  
42          } 
43          return  null
44      } 
45  }

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

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

 

016  package  com . xxx . yyy . perf
017  
018  import  org.apache.jmeter.config.Argument
019  import  org.apache.jmeter.config.Arguments
020  import  org.apache.jmeter.protocol.java.sampler.JavaSamplerContext
021  import  org.apache.jmeter.samplers.SampleResult
022  import  org.springframework.context.ApplicationContext
023  import  org.springframework.context.support.ClassPathXmlApplicationContext
024  
025  import  com.xxx.udb.client.PersonService
026  import  com.xxx.udb.client.result.MultiPersonResult
027  import  com.xxx.udb.client.result.PersonResult
028  import  com.xxx.udb.perf.base.AbstractServiceClient
029  
030  /** 
031  * Test get person 
032  * @author flynewton 
033  */ 
034  public  class  GetPersonTest  extends  AbstractServiceClient  { 
035      private  static  final  ApplicationContext  ctx  =  new ClassPathXmlApplicationContext
036              "spring-udb.xml"); 
037      private  static  PersonService  personService  =  null
038      private  static  String  loginIdCache  =  "00000sb"
039      private  static  String  loginIdWithoutCache  =  "01haytham"
040      private  static  String  siteIdCache  =  "CN"
041      private  static  String  siteIdWithoutCache  =  "IN"
042      private  static  String  alimailCn  =  "gchg2008@zzgcchen.cn"
043      private  static  String  alimailUdb  =  "000001@lvcuinm.com.cn"
044      private  static  String  uidCache  =  "300113578"
045      private  static  String  uidWithoutCache  =  "in5002997"
046      private  static  String  emailCache  =  "00000sb@alibaba-test.com"
047      private  static  String  emailWithoutCache  =  "5002997@alibaba-inc.com"
048  
049      @Override 
050      public  void  setupTestJavaSamplerContext  context)  { 
051          super . setupTestcontext); 
052          personService  = ( PersonService)  ctx . getBean"personServiceClient"); 
053      } 
054  
055      public  Arguments  getDefaultParameters()  { 
056          Arguments  params  =  new  Arguments(); 
057          params . addArgument"test" ,  "testMethod"); 
058          params . addArgument"info" ,  "false"); 
059          return  params
060      } 
061  
062      @Override 
063      public  void  teardownTestJavaSamplerContext  context)  { 
064          super . teardownTestcontext); 
065      } 
066  
067      public  Object  testGetPersonByLongIdViaCacheJavaSamplerContext  arg0 , 
068              SampleResult  sample)  { 
069          PersonResult  personResult  =  null
070          
071          try  { 
072              sample . sampleStart(); 
073              personResult  =  personService . getPersonByLongIdsiteIdCache , loginIdCache); 
074              sample . sampleEnd(); 
075          }  catch ( Throwable  t)  { 
076              this . getLogger (). error"Exception:"  +  t); 
077              return  null
078          } 
079          return  personResult
080      } 
081      
082      public  Object  testGetPersonByLongIdWithoutCacheJavaSamplerContext  arg0 , 
083              SampleResult  sample)  { 
084          PersonResult  personResult  =  null
085          
086          try  { 
087              sample . sampleStart(); 
088              personResult  =  personService . getPersonByLongIdsiteIdWithoutCache , loginIdWithoutCache); 
089              sample . sampleEnd(); 
090          }  catch ( Throwable  t)  { 
091              this . getLogger (). error"Exception:"  +  t); 
092              return  null
093          } 
094          return  personResult
095      } 
096  
097      public  Object  testGetPersonByAlimailCNJavaSamplerContext  arg0 , 
098              SampleResult  sample)  { 
099          PersonResult  personResult  =  null
100  
101          try  { 
102              sample . sampleStart();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值