jmeter 測試dubbo接口

1团赏、Jmeter簡介

Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具松捉。用于對軟件做壓力測試,它最初被設(shè)計(jì)用于Web應(yīng)用測試馆里,但后來擴(kuò)展到其他測試領(lǐng)域隘世。 它可以用于測試靜態(tài)和動態(tài)資源可柿,例如靜態(tài)文件、Java 小服務(wù)程序丙者、CGI 腳本复斥、Java 對象、數(shù)據(jù)庫械媒、FTP 服務(wù)器目锭, 等等。JMeter 可以用于對服務(wù)器纷捞、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載痢虹,來自不同壓力類別下測試它們的強(qiáng)度和分析整體性能。另外主儡,JMeter能夠?qū)?yīng)用程序做功能/回歸測試奖唯,通過創(chuàng)建帶有斷言的腳本來驗(yàn)證你的程序返回了你期望的結(jié)果。為了最大限度的靈活性糜值,JMeter允許使用正則表達(dá)式創(chuàng)建斷言丰捷。

Apache jmeter 可以用于對靜態(tài)的和動態(tài)的資源(文件,Servlet寂汇,Perl腳本病往,java 對象,數(shù)據(jù)庫和查詢骄瓣,FTP服務(wù)器等等)的性能進(jìn)行測試停巷。它可以用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M繁重的負(fù)載來測試它們的強(qiáng)度或分析不同壓力類型下的整體性能榕栏。你可以使用它做性能的圖形分析或在大并發(fā)負(fù)載測試你的服務(wù)器/腳本/對象叠穆。

2、我們?yōu)槭裁词褂肑meter

開源免費(fèi)臼膏,基于Java編寫硼被,可集成到其他系統(tǒng)可拓展各個功能插件
支持接口測試,壓力測試等多種功能渗磅,支持錄制回放嚷硫,入門簡單
相較于自己編寫框架活其他開源工具,有較為完善的UI界面始鱼,便于接口調(diào)試
多平臺支持仔掸,可在Linux,Windows医清,Mac上運(yùn)行

3.1起暮、創(chuàng)建項(xiàng)目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.memedai</groupId>
    <artifactId>me-jmeter-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>
        <!-- jmeter  必須1-->
        <!--  <dependency>
              <groupId>org.apache.jmeter</groupId>
              <artifactId>ApacheJMeter_core</artifactId>
              <version>2.1.3</version>
          </dependency>-->
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>3.3</version>
        </dependency>

        <dependency>
            <groupId>cn.memedai</groupId>
            <artifactId>me-notification-sms-facade</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>cn.memedai.framework</groupId>
            <artifactId>me-fm-dubbo-ext</artifactId>
            <version>2.0-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>fastjson</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.12</version>
        </dependency>

        <!-- spring  必須4-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.2.RELEASE</version>
        </dependency>


        <!-- dubbo 必須5-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.1mm</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <!-- https://issues.apache.org/jira/browse/ZOOKEEPER-1371 zookeeper Remove
                    dependency on log4j in the source code. slf4j-log4j12會與log4j-over-slf4j循環(huán)依賴導(dǎo)致沖突 -->
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>

                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.fxc.rpc.impl.member.MemberProvider</mainClass>
                                </transformer>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


</project>

注意:dubbo和facade請根據(jù)自己公司使用的進(jìn)行更換 不然肯定會報(bào)錯的

package cn.memedai.util;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author hongwang.zhang
 * @version: 1.0
 * @date 2018/7/59:39
 * @see
 **/
public class DubboInit {

     private static DubboInit init = null;
     private DubboInit(){}
     private  static ApplicationContext context;
     public synchronized static DubboInit getInstance(){
          if(init == null){
               init = new DubboInit();
          }
          return init;
     }

     public   DubboInit  initApplicationContext(){
          context = new ClassPathXmlApplicationContext("classpath:/applicationContext-dubbo.xml");
          if(context==null)
          {
               throw new IllegalArgumentException("Load dubbo-client.xml fail");
          }
          return this;
     }

     public  Object getBean(String beanName) {
          return context.getBean(beanName);
     }
     public  Object getBean(Class beanName) {
          return context.getBean(beanName);
     }



}

JMeter java Sampler介紹

返回類型 方法
SampleResult getDefaultParameters() 用于獲取界面的參數(shù)
SampleResult runTest(JavaSamplerContext context) 類似于LR的Action,result.sampleStart()一個事務(wù)開始会烙,result.sampleEnd()一個事務(wù) 結(jié)束
void setupTest(JavaSamplerContext context) 初始化方法负懦,類似于LR的init和Junit中的setUp()
void teardownTest(JavaSamplerContext context) 類似于LR的end和Junit中的tearDown()
package cn.memedai.jmeter.notiectionsms.notionficationsms;

import cn.memedai.menotification.facade.sms.business.MeSmsBusiness;
import cn.memedai.util.DubboInit;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

import java.util.Map;

/**
 * @author hongwang.zhang
 * @version: 1.0
 * @date 2018/7/510:10
 * @see
 **/
public class MeSmsBusinessJmeter extends AbstractJavaSamplerClient {


     MeSmsBusiness meSmsBusiness;

     private long start = 0;//記錄測試開始時(shí)間筒捺;
     private long end = 0;//記錄測試結(jié)束時(shí)間;

     private String phoneNo;
     private String ext;

     /**
      * 初始化操作
      *
      * @param context
      */
     @Override
     public void setupTest(JavaSamplerContext context) {

          DubboInit instance = DubboInit.getInstance().initApplicationContext();
          meSmsBusiness = (MeSmsBusiness) instance.getBean("meSmsBusiness");
     }

     // 這個方法是用來自定義java方法入?yún)⒌摹?     // params.addArgument("num1","");表示入?yún)⒚纸衝um1纸厉,默認(rèn)值為空系吭。
     // 設(shè)置可用參數(shù)及的默認(rèn)值;
     @Override
     public Arguments getDefaultParameters() {
          Arguments params = new Arguments();
          params.addArgument("phoneNo", phoneNo);//未設(shè)默認(rèn)值
          params.addArgument("ext", ext);
          return params;
     }

     public SampleResult runTest(JavaSamplerContext agr0) {
          start = System.currentTimeMillis();


          SampleResult result = new SampleResult();

          phoneNo = agr0.getParameter("phoneNo");
          ext = agr0.getParameter("ext");
          Map<String, Object> stringObjectMap = null;
          try {
               stringObjectMap = meSmsBusiness.sendVerificationCode(phoneNo, ext);
               result.setSuccessful(true);
               result.setResponseData(stringObjectMap.toString(), null);
               result.setDataType(SampleResult.TEXT);
          } catch (Exception e) {
               getLogger().error("LqueryTakeRegNo response error : " + e.getMessage());
               result.setSuccessful(false);
          }
          end = System.currentTimeMillis();
          return result;
     }


     @Override
     public void teardownTest(JavaSamplerContext arg0) {
          end = System.currentTimeMillis();
          getLogger().info("    cost time: " + (end - start) + "ms");
     }

}

然后打成jar包 放在D:\tool\apache-jmeter-4.0\lib\ext 目錄下
注意最好使用和maven版本一樣的 客戶端

然后打開jmeter
選擇需要測試的類 填寫參數(shù)


image.png

點(diǎn)擊運(yùn)行

image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颗品,一起剝皮案震驚了整個濱河市肯尺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躯枢,老刑警劉巖辐益,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竭宰,死亡現(xiàn)場離奇詭異螟凭,居然都是意外死亡惕耕,警方通過查閱死者的電腦和手機(jī)劫拗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門继效,熙熙樓的掌柜王于貴愁眉苦臉地迎上來早像,“玉大人桨踪,你說我怎么就攤上這事讥巡∠颇叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵欢顷,是天一觀的道長槽棍。 經(jīng)常有香客問我,道長抬驴,這世上最難降的妖魔是什么炼七? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮布持,結(jié)果婚禮上豌拙,老公的妹妹穿的比我還像新娘。我一直安慰自己题暖,他們只是感情好按傅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胧卤,像睡著了一般唯绍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枝誊,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天况芒,我揣著相機(jī)與錄音,去河邊找鬼叶撒。 笑死绝骚,一個胖子當(dāng)著我的面吹牛耐版,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播皮壁,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椭更,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛾魄?” 一聲冷哼從身側(cè)響起虑瀑,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滴须,沒想到半個月后舌狗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扔水,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年痛侍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魔市。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡主届,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出待德,到底是詐尸還是另有隱情君丁,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布将宪,位于F島的核電站绘闷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏较坛。R本人自食惡果不足惜印蔗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丑勤。 院中可真熱鬧华嘹,春花似錦、人聲如沸法竞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爪喘。三九已至颜曾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秉剑,已是汗流浹背泛豪。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诡曙。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓臀叙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親价卤。 傳聞我的和親對象是個殘疾皇子劝萤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容