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 ...
随机推荐
- 第六课 SQLite
总结:SQLite 1.SQLite的数据类型: NULL(空值).INTEGER(整型值).READL(浮点值).TEXT(字符串值).BLOB(二进制对象); 2.SQLite的应用 2.1 SQ ...
- AES加密算法-128位高安全,高速度
网上资料显示,下一代加密技术会围绕着AES技术进行.初出茅庐,学习编写了加密代码,如下所示 package com.bao.tools.encryption; import java.security ...
- 基础!winForm客户端最常用的几个基本属性
客户端应用程序 - 是需要安装在用户电脑上才可以使用的程序特点:不需要联网也可以打开使用部分功能但是现在的情况是许多功能依然需要互联网的支持 代码部分在用户电脑上执行 WinForm常用窗体属性: 布 ...
- R 给data.frame(dataframe)添加一列
x<-data.frame(apple=c(1,4,2,3),pear=c(4,8,5,2)) x # apple pear # 1 1 4 # 2 4 8 # 3 2 5 # 4 3 2 x$ ...
- Python命令行解析argparse常用语法使用简介
查看原文:http://www.sijitao.net/2000.html python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块.argp ...
- Servlet与Tomcat
Web应用不仅局限于展示在服务器上的静态页面,更多的是根据用的请求动态的生成页面信息,还可以从数据库中提取数据,生成页面返回给用户. 第一种方法:遵循HTTP协议实现一个服务器端软件 第二种方法:利用 ...
- 字符串表达式String Expressions
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- servlet&jsp高级:第二部分
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 软/硬链接指令:ln
语法: ln [选项] 原文件 目标文件 选项: -s 创建软连接(创建软链接时,若所在文件夹不一致,原文件要使用绝对路径) 硬链接特征: 1.拥有相同i节点和存储block块,可以看成是同一个 ...
- observer观察者模式
观察者模式(有时又被称为发布-订阅Subscribe>模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,让 ...