JMETER接口性能测试方案
JMETER简介
         JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源)。 JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。你可 以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。
场景介绍
         被测dubbo服务:
         com.alifi.adapter.service.AdminPortalService
         场景描述:
         当以上服务被调用时,服务会去adminportal查询对应的数据.并返回结果给测试服务器.
         工具原理:
         利用JMETER调用测试脚本去调用dubbo上的服务.并记住每次调用并获取反馈值的响应时间.计算成功率.
JMETER性能测试环境准备
         工具:
jakarta-jmeter-2.3.2
         将ZIP压缩包解压缩在你很容易找到的地方,本文放在C盘根目录下.
Eclipse
         需要安装testNG插件,maven环境.
JMETER主要目录结构分析
 
         JMETER主要的文件夹有:
         %Jmeter_home/lib
                   该文件夹中主要存放测试JAR文件运行时需要依赖的JAR包.
         %Jmeter_home/lib/ext
                   该文件夹中主要存放带有main函数的测试JAR文件.只有将测试JAR包放在该目录下,才会被JMETER工具识别.
         后续会有相应的介绍.
 
JMETER性能测试步骤及监控
JMETER做简单的UI性能测试及脚本录制:
         (http://www.ibm.com/developerworks/cn/java/l-jmeter/)
         操作很简单.这里不做介绍.
JMETER做接口性能测试用例步骤:
         前提:带有main函数的JAR包及其运行所以来的JAR包都对应的放入JMETER文件夹中.
步骤一,新建一个测试用例:
         在%Jmeter_home/bin中找到Jmeter.bat文件.双击打开Jmeter程序:
 
         在[文件]选项中可以选择以往处理过的脚本.现在以新增一个测试用例为例.
步骤二.在[测试计划]中添加一个线程:
 
         右键[测试用例],依次选择[添加]—[线程组];得到如下视图:
 
         线程数(Number of Threads): 设置发送请求的用户数目.
         Ramp-up period: 每个请求发生的总时间间隔,单位是秒。比如你的请求数目是5,而这个参数是10,那么每个请求之间的间隔就是10/5,也就是2秒 .
         循环次数(Loop Count): 请求发生的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复 指定的次数,如果输入0,那么请求将执行一次。
         在[调度器]中可以选择启动时间,结束时间等.
步骤三,在线程租种添加一个动作:
         右键[线程组]—[sampler]—[java请求],如下图:
 
         我们得到一个JAVA请求的动作:
 
         在[类名称]中选择我们要测试的类;在这里,我们被测服务为:
                   com.sane.remote.adapter.AdapterForAdminPortal
步骤四,为线程组添加一个监控:
 
         这里我们可以选择图形结果,聚合报告等监听器.我才去的是聚合报告,当然可以选择多种监控控件.
         注意:这里的监视器结果需要我们单独在被测服务器上做监控配置才能获取到.
 
         这里可以监控到错误率,最高响应时间,I/0值.每个监视器的功能不一样.大家可以摸索摸索.
步骤五:运行及结果监控.
         注意:为了验证我们的JAR是否执行成功,我推荐打开被测目标的日志,检查是否被调用.
 
         以下是我的简单的运行结果:
 
         Error结果为0%.表明我执行的过程中没有报错.
 
         被测服务器的日志有打印,调用成功.
JMETER性能测试脚本编写
测试工程目录结构介绍
 
被测工程:
         Adapter工程,我们主要关注的是
                   adapter.service.api/src/main/java/com.alifi.adapter.service
         里面包含了我们所有注册在dubbo上的所有服务.拿adminPortalService为例:
 
         我们可以看到整个类需要传入String类型的bankcode,dateStr及int类型的page,并反馈给一个Result.具体的实现方式我们并不关心.
         这三个参数决定了我们在测试脚本中不管是引入变量还是写死固定的变量值.
 
测试工程
 
         Src/main/java中包含了我们测试JAVA.
         Src/main/resources中包含了一些我们需要的配置文件;这里我主要存放dubbo的配置文件(dubbo.properties)及引入的dubbo服务设置(dubbo_config.xml).
         Src/test/java用来存放对一些方法的单元测试(testNG).
POM.XML文件介绍
         配置文件中主要引用的有:
         对adapter服务的引用:
         <dependency>
         <groupId>com.alifi.adapter</groupId>
         <artifactId>adapter.service.api</artifactId>
         <version>1.1.0-SNAPSHOT</version>
      </dependency>
    对dubbo的引用
      <dependency>
         <groupId>com.alibaba.dubbo</groupId>
         <artifactId>dubbo.core.service</artifactId>
       <version>${dubbo-version}</version>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>com.alibaba.dubbo</groupId>
         <artifactId>dubbo.core.registry.default</artifactId>
       <version>${dubbo-version}</version>
         <scope>test</scope>
      </dependency>
         对Jmeter的调用:
              <dependency>
      <groupId>com.alibaba.external</groupId>
      <artifactId>apache.jmeter</artifactId>
      <version>2.3</version>
</dependency>
引用单元测试:
      <dependency>
        <groupId>com.alifi.aliloan.common</groupId>
        <artifactId>common.test</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>test</scope>
      </dependency>
引用Spring
      <dependency>
            <groupId>com.alibaba.external</groupId>
            <artifactId>sourceforge.spring</artifactId>
            <version>2.5.6</version>
            <type>jar</type>
         </dependency>
         将依赖包导出项目的方法(mvn clean package -DskipTests=true -Denforcer.skip=true)
  <build>
       <plugins>
           <plugin>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>2.1</version>
              <executions>
                  <execution>
                     <id>copy-dependencies</id>
                     <phase>prepare-package</phase>
                     <goals>
                         <goal>copy-dependencies</goal>
                     </goals>
                  </execution>
              </executions>
              <configuration>
                  <includeTypes>jar</includeTypes>
                  <overWriteSnapshots>true</overWriteSnapshots>
                  <type>jar</type>
                  <outputDirectory>D:\remote\lib</outputDirectory>
              </configuration>
           </plugin>
           
       </plugins>
    </build>
    D:\remote\lib是我用来存放依赖包的文件夹,用命令打包出来后全部丢入%Jmeter_home/lib文件夹中.
命令: (mvn clean package -DskipTests=true -Denforcer.skip=true)
Dubbo配置文件介绍
Dubbo_config
<beans default-autowire="byName"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://repo.alibaba-inc.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://repo.alibaba-inc.com/schema/dubbo 
    http://repo.alibaba-inc.com/schema/dubbo/dubbo-component.xsd">
 
    <dubbo:reference id="adminPortalService"    interface="com.alifi.adapter.service.AdminPortalService" version="1.0.0" />  <!--  定义dubbo的服务.-->
</beans>
    主要是将"com.alifi.adapter.service.AdminPortalService"引入bean容易中方便主函数中引用.大家可以改成自己需要测试的服务目标.
    id="adminPortalService"这里的id可以自己随便定义,相当于一个别名.
Dubbo.properties
         这个就不过多介绍了,就是dubbo的配置文件.主要是修改dubbo的注册地址及测试服务名称.
    dubbo.application.name=adapter
    dubbo.registry.address=10.249.198.180:9090
    dubbo.monitor.address=N/A
    dubbo.service.server.port=20880
    dubbo.service.console.port=30880
    dubbo.service.server.weight=10
    dubbo.service.min.thread.pool.size=10
    dubbo.service.max.thread.pool.size=300
    dubbo.service.thread.keep.alive.seconds=300
    dubbo.service.shutdown.wait.seconds=10
    dubbo.logging.level=INFO
    dubbo.logging.root=/logs
    dubbo.logging.file=adapter.log
JMETER代码格式及注意事项
         所有的代码注意事项已经在脚本中用注释形式全部展现.请阅读adminportalForAadminPortal.java源码.
         注意事项,在编写完main函数之后,有必要进行testng单元测试.
         在Cmd环境下找到工程目录,获取依赖的JAR文件.和Jmeter需要调用的带有MAIN函数的JAR文件.
JMETER性能测试心得
         关于JMETER调用接口时候传入参数的方式还没有研究透.
         正在努力地在脚本中添加日志结构,方便跟跟踪到错误信息.
         JMETER对借口测试的方便在于,对dubbo的服务可以可以配置话,或者架设在ci上进行可配置话的远程性能测试.

jmeter笔记8的更多相关文章

  1. jmeter笔记(9)--JDBC Request的使用

    JDBC Request可以向数据库发送一个JDBC(Java Data Base Connectivity)请求(sql语句),获取返回的数据库数据进行操作.它需要和JDBC Connection ...

  2. jmeter笔记7

    一.脚本录制(Jmeter): Jmeter 脚本(.jmx)为 xml 格式,树形结构,由元件组成,使用“取样器”产生请求. 在“工作台”添加“HTTP 代理服务器” 端口: 代理服务器的端口,默认 ...

  3. jmeter笔记5

    性能测试是任何分布式或Web应用程序测试计划的重要组成部分.在计划和开发周期中进行性能评价,可以保证交付给客户的应用程序满足客户对于高负载.可用性和可伸缩性的要求.提前确定软件的负载限制可以为适当地进 ...

  4. jmeter笔记4

     软件测试中使用JMeter测试Web应用 JMeter作用领域 JMeter可以用于测试静态或者动态资源的性能(文件.Servlets.Perl脚本.java对象.数据库和查询.ftp服务器或者其他 ...

  5. jmeter笔记3

     1. 使用JMeter做性能测试(Windows) 1.1. 启动JMeter 下载JMeter的安装包,点击安装包\jakarta-jmeter-2.3RC4\bin下的jmeter.bat文件即 ...

  6. jmeter笔记2

    使用jmeter它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项. 讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测 ...

  7. jmeter笔记1

    使用 JMeter 分布式性能测试       作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的, 所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用 ...

  8. JMeter笔记4:测试结果-聚合报告的字段说明

    1.Lable :定义 HTTP 请求名称2.Samples :表示这次测试中一共发出了多少个请求3.Average :平均响应时长---默认情况下是单个Request的平均响应时长,当使用Trans ...

  9. JMeter笔记3:聚合报告之90%Line参数说明

    看看JMeter 官网是怎么说的? 90% Line - 90% of the samples took no more than this time. The remaining samples a ...

随机推荐

  1. Android设备唯一性判断

    前段时间项目需要一个功能,就是在操作完某一个逻辑之后返回给客户一个红包,安全校验团队需要我们提供android设备的唯一标示,起初直接通过获取设备的imei号传给了server端,后台公司云迹监控发现 ...

  2. Cheatsheet: 2015 03.01 ~ 03.31

    Web The Architecture of Algolia's Distributed Search Network No promises: asynchronous JavaScript wi ...

  3. Metasploit辅助模块

    msf > show auxiliary Auxiliary ========= Name                                                  Di ...

  4. zoj 1010 (线段相交判断+多边形求面积)

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=10 Area Time Limit: 2 Seconds      Mem ...

  5. 即时定位与地图构建SLAM(Simultaneous Localization and Mapping)

    SLAM 即时定位与地图构建SLAM(Simultaneous Localization and Mapping) 参考链接: 视觉SLAM漫谈,http://www.cnblogs.com/gaox ...

  6. 常用ADB命令

    adb devices          查看当前已与pc端连接的设备序列号 adb install -r   +apk名称     安装应用程序(带-r参数表示强制安装,可以覆盖安装) adb un ...

  7. mysql获得自增字段下一个值

    初次研究: 表: sql: show table status from carsale_db LIKE 'tb_car' 结果: 想办法取得这其中的值.... 在Internet上找到这个资料: M ...

  8. Linux内核OOM机制的详细分析(转)

    Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...

  9. Spring的自动扫描与管理

    通过在classpath自动扫描方式把组件纳入spring容器中管理 前面的例子我们都是使用XML的bean定义来配置组件.在一个稍大的项目中,通常会有上百个组件,如果这些这组件采用xml的bean定 ...

  10. jQuery细节总结

    1.mouseover和mouseenter 区别 mouseenter指鼠标进入元素时触发,鼠标在元素子元素上不触发. mouseover指鼠标进入元素时触发,在元素进入子元素会触发. 在此引用一个 ...