jmter接口測試
1.JMeter Java Sampler介紹
setupTest做些初始化的工作,每個線程只執(zhí)行一次
teardownTest做些清理工作,每個線程只執(zhí)行一次
runTest具體的測試執(zhí)行工作,每個并發(fā)每次循環(huán)都將執(zhí)行一次
SampleResult記錄測試結(jié)果,result.sampleStart()一個事務開始,result.sampleEnd()一個事務結(jié)束
main方法用于調(diào)試
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.多接口性能測試
按照上面的方法進行測試,每個需要測試的接口和場景都需要寫一個這樣的測試類,對于有些具有相似初始化,清理等
工作,只有具體的那行事務代碼不一樣的情況,會有很多重復的工作。如下:
可以考慮采用反射的方式來解決這個問題,尤其是業(yè)務非常類似的接口和場景。當然,反射會帶來壓力機的性能消耗,
但是這個可以通過調(diào)整JMeter的JVM參數(shù)和增加JMeter實例來解決。
1)利用反射后的結(jié)構(gòu)如下:
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為某一類具有相似業(yè)務場景的測試類
其中 getDefaultParameters方法設置默認參數(shù):test傳入具體要執(zhí)行的測試方法;info傳入日志級別,利用main方法進行調(diào)試時設置為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(); |
posted on 2013-11-07 11:12 順其自然EVO 閱讀(383) 評論(0) 編輯 收藏 所屬分類: jmeter and badboy