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笔记(9)--JDBC Request的使用
JDBC Request可以向数据库发送一个JDBC(Java Data Base Connectivity)请求(sql语句),获取返回的数据库数据进行操作.它需要和JDBC Connection ...
- jmeter笔记7
一.脚本录制(Jmeter): Jmeter 脚本(.jmx)为 xml 格式,树形结构,由元件组成,使用“取样器”产生请求. 在“工作台”添加“HTTP 代理服务器” 端口: 代理服务器的端口,默认 ...
- jmeter笔记5
性能测试是任何分布式或Web应用程序测试计划的重要组成部分.在计划和开发周期中进行性能评价,可以保证交付给客户的应用程序满足客户对于高负载.可用性和可伸缩性的要求.提前确定软件的负载限制可以为适当地进 ...
- jmeter笔记4
软件测试中使用JMeter测试Web应用 JMeter作用领域 JMeter可以用于测试静态或者动态资源的性能(文件.Servlets.Perl脚本.java对象.数据库和查询.ftp服务器或者其他 ...
- jmeter笔记3
1. 使用JMeter做性能测试(Windows) 1.1. 启动JMeter 下载JMeter的安装包,点击安装包\jakarta-jmeter-2.3RC4\bin下的jmeter.bat文件即 ...
- jmeter笔记2
使用jmeter它来完成最常用的三种类型服务器,即 Web 服务器.数据库服务器和消息中间件,压力测试的方法.步骤以及注意事项. 讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即常说的功能测 ...
- jmeter笔记1
使用 JMeter 分布式性能测试 作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的, 所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用 ...
- JMeter笔记4:测试结果-聚合报告的字段说明
1.Lable :定义 HTTP 请求名称2.Samples :表示这次测试中一共发出了多少个请求3.Average :平均响应时长---默认情况下是单个Request的平均响应时长,当使用Trans ...
- JMeter笔记3:聚合报告之90%Line参数说明
看看JMeter 官网是怎么说的? 90% Line - 90% of the samples took no more than this time. The remaining samples a ...
随机推荐
- 11个让你吃惊的 Linux 终端命令
原文:http://linux.about.com/od/commands/tp/11-Linux-Terminal-Commands-That-Will-Rock-Your-World.htm 作者 ...
- WINCE+6410 拨号上网
我们现在的模块用的是USB接口,然后模拟成一个COM6进行通信,在CE的: 控制面板->网络连接 里要新建一个连接,选择"拨号连接"然后设置好区域代码,还有附加解调器命令+C ...
- BZOJ 3514 Codechef MARCH14 GERALD07加强版
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3514 题意:给出一个图m条边.每次询问只加入编号在区间[L,R]之内的边有多少连通 ...
- [CF724B]Batch Sort(暴力,思维)
题目链接:http://codeforces.com/contest/724/problem/B 题意:给出n*m的数字阵,每行数都是1-m的全排列,最多可以交换2个数一次,整个矩阵可以交换两列一次. ...
- windows下安装zabbix_agents_2.2.0
下载与解压 下载zabbix_agents_2.2.0 http://www.zabbix.com/downloads/2.2.0/zabbix_agents_2.2.0.win.zip 解压到C盘下 ...
- VS2008中开发智能设备程序的一些总结
原文链接:http://blog.csdn.net/citybug_nj/article/details/2598705 程序中包括四个部分: 系统配置 这个部分用来配置系统中的相关参数,参数包括数据 ...
- Android 测试工具
有时候会发现给手机烧入的信息里少了某一些文件,比如一个图标,或者一个mp3文件之类的等等,为此做了一个小工具检查指定手机里面是否包含相应的文件. 通过程序执行手机的命令来操作手机,感觉还挺有意思的. ...
- LTE Module User Documentation(翻译1)——背景、使用概述、基本的仿真程序和配置LTE模型参数
LTE用户文档 (如有不当的地方,欢迎指正!) 1.背景 假定读者已经熟悉 ns-3 simulator ,能运行一般的仿真程序.如果不是的话,强烈推荐读者参考 [ns3tutorial]. 2. ...
- iOS - UITabBarController
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITabBarController : UIViewController <UITabBarDelegate ...
- web设计经验<一> 提升移动设备响应式设计的8个建议
今天看到一些关于web设计的一些建议和设计经验,拿出来分享分享. 第一篇: 提升移动设备响应式设计的8个建议 一.直观性和易用性 在使用移动设备时,对于杂乱.复杂或者不直观的设计造成的混乱不佳的用户体 ...