zoukankan      html  css  js  c++  java
  • Jmeter学习之-dubbo接口测试

    背景:公司的h5和APP都需要调用许多非http的服务,需要对服务的性能和自动化测试

    工具:IDEA ,maven,Jmeter

    参考文档:

    第一步:创建一个maven项目,可自己百度,不多做描述,创建完成大概结构如下

    第二步:配置相关文件

    1. 配置pom文件(配置完成后reimport即可)
        1 <?xml version="1.0" encoding="UTF-8"?>
        2 <project xmlns="http://maven.apache.org/POM/4.0.0"
        3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        5     <modelVersion>4.0.0</modelVersion>
        6 
        7     <groupId>JmeterDemo</groupId>
        8     <artifactId>JmeterDemo</artifactId>
        9     <version>1.0-SNAPSHOT</version>
       10 
       11     <properties>
       12         <spring.version>3.2.4.RELEASE</spring.version>
       13         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       14     </properties>
       15 
       16 <!--配置镜像,加快下载jar包的速度(这里配置公司的私服,根据公司不同配置)-->
       17     <repositories>
       18         <repository>
       19             <id>public</id>
       20             <name>Public Repositories</name>
       21             <url>
       22                 http://nexus.guahao-inc.com/nexus/content/groups/public
       23             </url>
       24         </repository>
       25     </repositories>
       26     <pluginRepositories>
       27         <pluginRepository>
       28             <id>public</id>
       29             <name>Public Repositories</name>
       30             <url>
       31                 http://nexus.guahao-inc.com/nexus/content/groups/public
       32             </url>
       33         </pluginRepository>
       34     </pluginRepositories>
       35 <!--配置依赖包-->
       36     <dependencies>
       37 
       38         <!--dubbo依赖包-->
       39         <dependency>
       40             <groupId>com.alibaba</groupId>
       41             <artifactId>dubbo</artifactId>
       42             <version>2.5.3</version>
       43             <exclusions>
       44                 <exclusion>
       45                     <groupId>org.springframework</groupId>
       46                     <artifactId>spring</artifactId>
       47                 </exclusion>
       48             </exclusions>
       49         </dependency>
       50 
       51         <!--Jmeter需要的jar包,!!!注意,这里的版本号需要和使用的Jmeter的版本号一致,否则到jmeter上会报各种错-->
       52         <dependency>
       53             <groupId>org.apache.jmeter</groupId>
       54             <artifactId>ApacheJMeter_core</artifactId>
       55             <version>5.0</version>
       56         </dependency>
       57 
       58         <dependency>
       59             <groupId>org.apache.jmeter</groupId>
       60             <artifactId>ApacheJMeter_java</artifactId>
       61             <version>5.0</version>
       62         </dependency>
       63 
       64         <!--spring核心pom依赖-->
       65         <dependency>
       66             <groupId>org.springframework</groupId>
       67             <artifactId>spring-beans</artifactId>
       68             <version>${spring.version}</version>
       69         </dependency>
       70         <dependency>
       71             <groupId>org.springframework</groupId>
       72             <artifactId>spring-expression</artifactId>
       73             <version>${spring.version}</version>
       74         </dependency>
       75         <dependency>
       76             <groupId>org.springframework</groupId>
       77             <artifactId>spring-core</artifactId>
       78             <version>${spring.version}</version>
       79         </dependency>
       80         <dependency>
       81             <groupId>org.springframework</groupId>
       82             <artifactId>spring-web</artifactId>
       83             <version>${spring.version}</version>
       84         </dependency>
       85         <dependency>
       86             <groupId>org.springframework</groupId>
       87             <artifactId>spring-context</artifactId>
       88             <version>${spring.version}</version>
       89         </dependency>
       90         <dependency>
       91             <groupId>org.springframework</groupId>
       92             <artifactId>spring-context-support</artifactId>
       93             <version>${spring.version}</version>
       94         </dependency>
       95         <dependency>
       96             <groupId>org.springframework</groupId>
       97             <artifactId>spring-orm</artifactId>
       98             <version>${spring.version}</version>
       99         </dependency>
      100         <!-- Spring AOP -->
      101         <dependency>
      102             <groupId>org.springframework</groupId>
      103             <artifactId>spring-aop</artifactId>
      104             <version>${spring.version}</version>
      105         </dependency>
      106 
      107         <!-- consult-service依赖包,即要测试的接口依赖-->
      108         <dependency>
      109             <groupId>com.greenline.consult</groupId>
      110             <artifactId>greenline-consult-service-share</artifactId>
      111             <version>2.3.94-SNAPSHOT</version>
      112         </dependency>
      113     </dependencies>
      114 <!--打包需要的-->
      115     <build>
      116         <plugins>
      117             <!--复制jar包插件,将使用到的jar包,复制到target/lib中-->
      118             <plugin>
      119                 <groupId>org.apache.maven.plugins</groupId>
      120                 <artifactId>maven-dependency-plugin</artifactId>
      121                 <executions>
      122                     <execution>
      123                         <id>copy-dependencies</id>
      124                         <phase>prepare-package</phase>
      125                         <goals>
      126                             <goal>copy-dependencies</goal>
      127                         </goals>
      128                         <configuration>
      129                             <outputDirectory>${project.build.directory}/lib</outputDirectory>
      130                             <overWriteReleases>false</overWriteReleases>
      131                             <overWriteSnapshots>false</overWriteSnapshots>
      132                             <overWriteIfNewer>true</overWriteIfNewer>
      133                         </configuration>
      134                     </execution>
      135                 </executions>
      136             </plugin>
      137 
      138             <plugin>
      139                 <groupId>org.codehaus.mojo</groupId>
      140                 <artifactId>build-helper-maven-plugin</artifactId>
      141                 <version>1.8</version>
      142                 <executions>
      143                     <execution>
      144                         <id>add-resource</id>
      145                         <phase>generate-resources</phase>
      146                         <goals>
      147                             <goal>add-resource</goal>
      148                         </goals>
      149                         <configuration>
      150                             <resources>
      151                                 <resource>
      152                                     <directory>src/main/resources</directory>
      153                                     <includes>
      154                                         <include>*</include>
      155                                     </includes>
      156                                 </resource>
      157                             </resources>
      158                         </configuration>
      159                     </execution>
      160                 </executions>
      161             </plugin>
      162 
      163             <plugin>
      164                 <artifactId>maven-assembly-plugin</artifactId>
      165                 <version>2.4</version>
      166                 <configuration>
      167                     <descriptorRefs>
      168                         <descriptorRef>jar-with-dependencies</descriptorRef>
      169                     </descriptorRefs>
      170                     <archive>
      171                         <manifest>
      172                             <mainClass>TestMain.Main</mainClass>
      173                         </manifest>
      174                     </archive>
      175                 </configuration>
      176                 <executions>
      177                     <execution>
      178                         <id>make-assembly</id>
      179                         <phase>package</phase>
      180                         <goals>
      181                             <goal>single</goal>
      182                         </goals>
      183                     </execution>
      184                 </executions>
      185             </plugin>
      186         </plugins>
      187     </build>
      188 </project>
      View Code
    2. 配置dubbo-config.xml文件(在resources文件夹下新建一个文件dubbo-config.xml,配置内容如下) 
       1 <?xml version="1.0" encoding="UTF-8"?>
       2 <beans xmlns="http://www.springframework.org/schema/beans"
       3        xmlns:context="http://www.springframework.org/schema/context"
       4        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       5        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       6        xsi:schemaLocation="http://www.springframework.org/schema/beans
       7     http://www.springframework.org/schema/beans/spring-beans.xsd
       8     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
       9     http://code.alibabatech.com/schema/dubbo
      10     http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
      11 
      12     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
      13     <dubbo:application name="consult-service" />
      14 
      15     <!-- 测试的dubbo服务的信息-->
      16     <dubbo:reference id="consultOrderService"
      17                      interface="com.greenline.consult.hessian.share.consultorder.service.ConsultOrderService"
      18                      timeout="650000" url="dubbo://192.168.1.103:11006/consultOrder"   />
      19 </beans>
      View Code

              这里的http://code.alibabatech.com/schema/dubbo/dubbo.xsd" 已经停止服务了,会导致文件不能读取,需要从网上下载该文件,或者从dubbo-2.5.3.jar META-INF 目录下导出,然后设置一下引用本地资源,参考https://blog.csdn.net/qq_36654870/article/details/80603302dubbo.xsd

    第三步:开始写代码,需要继承Jmeter的AbstractJavaSamplerClient 类,并实现runTest方法

    TestQueryConsultOrderReplyList
     1 import com.greenline.consult.hessian.share.consultorder.request.ConsultOrderReplyPageListReq;
     2 import com.greenline.consult.hessian.share.consultorder.response.ConsultOrderReplyListResult;
     3 import com.greenline.consult.hessian.share.consultorder.service.ConsultOrderService;
     4 import org.apache.jmeter.config.Arguments;
     5 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
     6 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
     7 import org.apache.jmeter.samplers.SampleResult;
     8 import org.slf4j.Logger;
     9 import org.slf4j.LoggerFactory;
    10 import org.springframework.context.ApplicationContext;
    11 import org.springframework.context.support.ClassPathXmlApplicationContext;
    12 
    13 public class TestQueryConsultOrderReplyList extends AbstractJavaSamplerClient{
    14 
    15         private static final ApplicationContext context = new ClassPathXmlApplicationContext("dubbo-config.xml");
    16         private static ConsultOrderService consultOrderService;
    17         private static final Logger logger = LoggerFactory.getLogger(TestQueryConsultOrderReplyList.class);
    18 
    19         @Override
    20         public Arguments getDefaultParameters() {
    21             Arguments params = new Arguments();
    22             params.addArgument("orderKey", "");
    23             return params;
    24         }
    25 
    26         /**
    27          * 每个线程测试前执行一次,做一些初始化工作
    28          * 获取输入的参数,赋值给变量
    29          *
    30          * @param arg0
    31          */
    32         @Override
    33         public void setupTest(JavaSamplerContext arg0) {
    34             consultOrderService = (ConsultOrderService) context.getBean("consultOrderService");
    35         }
    36 
    37         public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
    38             SampleResult sr = new SampleResult();
    39             /*获取之前的请求参数*/
    40             String orderKey = javaSamplerContext.getParameter("orderKey");
    41             sr.setSamplerData("请求参数orderKey:" + orderKey);
    42 
    43             try {
    44                 // jmeter 开始统计响应时间标记
    45                 sr.sampleStart();
    46 
    47                 // 该类是dubbo接口需要的参数
    48                 ConsultOrderReplyPageListReq consultOrderReplyReq = new ConsultOrderReplyPageListReq();
    49                 consultOrderReplyReq.setOrderKey(orderKey);
    50 
    51                 //该类是dubbo接口的返回
    52                 ConsultOrderReplyListResult response = consultOrderService.queryConsultOrderReplyList(consultOrderReplyReq);
    53                 System.out.println("响应结果: " + response);
    54 
    55                 if (response != null && response.getResultCode().equals("0")) {
    56                     // 返回正确
    57                     sr.setSuccessful(true);
    58                     sr.setResponseData("code : " + response.getResultCode() + "message: " + response.getResultDesc(), "utf-8");
    59                 } else {
    60                     sr.setSuccessful(false);
    61                 }
    62                 // jmeter 结束统计响应时间标记
    63                 sr.sampleEnd();
    64 
    65             } catch (Exception e) {
    66                 e.printStackTrace();
    67             }
    68             return sr;
    69         }
    70 
    71         public void teardownTest(JavaSamplerContext arg0) {
    72             logger.info("方法调用结束");
    73         }
    74 }
    View Code
    使用main方法调试,调试成功后再放入Jmeter中运行
     1 import org.apache.jmeter.config.Arguments;
     2 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
     3 
     4 public class TestMain {
     5     public static void main(String[] args) {
     6         Arguments params = new Arguments();
     7         //  设置参数
     8         params.addArgument("orderKey", "p90xb3z3gy181107090819856");
     9         JavaSamplerContext arg0 = new JavaSamplerContext(params);
    10         TestQueryConsultOrderReplyList test = new TestQueryConsultOrderReplyList();
    11         test.setupTest(arg0);
    12         test.runTest(arg0);
    13         test.teardownTest(arg0);
    14     }
    15 }

    调试过程遇到的报错及解决方案:

    ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2                                                                                                                                                                                      

    解决方法:在classpath下(即resources)添加log4j2.xml文件,内容如下,添加log4j2.xml 文件后运行成功

    第四步:打jar包,然后在Jmeter下运行 ,

    •  打jar包                                                                                                       

            

    • 打包完成在target目录下生成两个jar文件,将后缀为-jar-with-dependencies.jar的文件(即下图所示文件)复制到jmeter的 lib/ext路径下

          

    • 运行Jmeter,输出接口的参数,即可运行
  • 相关阅读:
    libeXosip2(1-2) -- How-To initiate, modify or terminate calls.
    libeXosip2(1-1) -- How-To initialize libeXosip2.
    libeXosip2(1) -- Modules
    麦田的守望者背景与分析
    statfs函数说明
    c++ 14
    c++ 13
    URAL 2078~2089
    2018 Multi-University Training Contest 1
    Codeforces Round #502
  • 原文地址:https://www.cnblogs.com/mysummary/p/10232951.html
Copyright © 2011-2022 走看看