qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          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

          <2013年11月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 肇东市| 达日县| 桂林市| 花莲市| 永和县| 隆安县| 遂川县| 西丰县| 侯马市| 连城县| 临洮县| 萍乡市| 纳雍县| 吉木乃县| 当涂县| 岳西县| 漠河县| 上蔡县| 灵川县| 宜阳县| 宜都市| 岳西县| 军事| 离岛区| 久治县| 华安县| 盖州市| 凤冈县| 会理县| 庆元县| 贡山| 永兴县| 彭水| 南靖县| 边坝县| 寿光市| 旬阳县| 宁武县| 金湖县| 宜都市| 荣成市|