赞
踩
4.1.7 配置zookeeper地址及调用接口... 28
4.1.14 拷贝target中jar包至JMeter \lib\ext 41
4.1.15 拷贝lib中jar包至JMeter \lib. 42
4.4.5 进入任意目录上传Agent 的jar包... 62
4.4.2 同样的项目拷贝至另外一台网络相同的压力机上... 72
4.4.4 同理修改另一台压力机上的JMeter中配置文件.. 73
4.4.5 打开JMeter界面,测试可以同时压力并发.. 74
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
JMeter与LoadRunner都是非常优秀的性能测试软件,区别内容如下表格。
对比项 | JMeter | LoadRunner |
安装 | 简单,解压即可 | 复杂,LoadRunner安装包大于1GB,安装时间较长 |
录制/回放 | 支持 | 支持 |
测试协议 | 偏少,用户可自行扩展 | 较多,用户不可自行扩展 |
分布式大规模压力 | 支持 | 支持 |
IP欺骗功能 | 不支持 | 支持 |
图形报表 | 支持(较弱) | 支持(很强) |
测试逻辑控制 | 支持 | 支持 |
监控服务资源(CPU、内存) | 支持 | 支持 |
功能测试 | 支持 | 不支持 |
测试成本 | 免费开源 | 商业收费(费用很高) |
进入Oracle官网下载
注意:JMeter支持1.4或更高JDK版本。
用鼠标左键双击JDK安装包,会出现下图所示的安装界面。
其实上面那个步骤是在加载配置,为安装JDK做前期准备。之后会出现下图所示的界面。
1、完成了第一步,只是把JDK环境安装完成了。这个时候还要通过一系列的环境变量的配置才能使用JDK环境进行JAVA开发。配置环境变量包括java_home,path和classpath三个部分。
2、用鼠标右击“我的电脑”,选择“属性”->“高级”->“环境变量”->“系统变量”->“新建”。
首先,先到官网去下载maven。这里是官网的地址:http://maven.apache.org/download.cgi 请选择最新的版本下载,这里咱们下载的是apache-maven-3.1.1-bin.zip,在如图所示的红色部分
解压apache-maven-3.1.1-bin.zip,并把解压后的文件夹下的apache-maven-3.1.1文件夹移动到D:\Java下,如果没有Java这个文件夹的话,请自行创建。
右键“计算机”,选择“属性”,之后点击“高级系统设置”,点击“环境变量”,来设置环境变量,有以下系统变量需要配置:
新建系统变量 MAVEN_HOME 变量值:D:\Java\apache-maven-3.1.1
编辑系统变量 Path 添加变量值: ;%MAVEN_HOME%\bin
最后检验配置是否成功:用win键+R,来打开命令行提示符窗口,即Dos界面,输入mvn --version 若出现以下情况说明配置成功
注意事项
如果配置错误,请确保你已正确配置JDK环境变量
JDK环境变量配置参考经验:http://jingyan.baidu.com/article/ca41422fe3b7261eae99edc6.html
下载地址:Apache JMeter - Apache JMeter™
下载后解压即可使用。
安装比较简单,一直点下一步即可
【右击属性】进入安装路径
打开配置文件
最后添加-Dfile.encoding=UTF8
4.1.9 继承AbstractJavaSamplerClient类或实现JavaSamplerClient接口
方法介绍
@Override
public void setupTest(JavaSamplerContext javaSamplerContext) {
}
主要用于并发测试前的一下准备操作,一般做一些接口参数常量初始化
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
return null;
}
主要为多线程并发方法体,一般用于调用接口请求,计算响应时间及断言结果
@Override
public void teardownTest(JavaSamplerContext javaSamplerContext) {
}
主要用于并发结束后的一些操作
@Override
public Arguments getDefaultParameters() {
return null;
}
主要用于JMeter UI界面展示参数项
import com.bestpay.account.service.facade.BalanceQueryFacade;import com.bestpay.account.service.facade.model.BalanceDTO;import com.bestpay.account.service.facade.model.BalanceParamDTO;import com.bestpay.dubbo.result.Result;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 org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.UUID; /** * 压测脚本 * Created by qinjie on 2016/1/27. * 账务余额查询接口 * 场景比例 */public class JTestBalanceQueryFacade extends AbstractJavaSamplerClient{ //加载 BalanceQueryFacade private ApplicationContext context = new ClassPathXmlApplicationContext( "classpath:applicationContext.xml"); private BalanceQueryFacade balanceQueryFacade = (BalanceQueryFacade)context.getBean(BalanceQueryFacade.class); //创建余额查询参数对象 private BalanceParamDTO balanceParamDTO; //创建接口返回对象 private Result<BalanceDTO> result; /** * 重写Jmeter中getDefaultParameters方法为获取Jmeter中默认参数 * @return Arguments默认参数列表 */ public Arguments getDefaultParameters(){ //创建默认参数取值对象 Arguments arguments = new Arguments(); //账户类型 arguments.addArgument("accountType",""); //资金账户号 arguments.addArgument("accountNo",""); //账户名称(可以为空) arguments.addArgument("accountName",""); //客户账户号 arguments.addArgument("contractNo",""); //币种(可以为空) arguments.addArgument("ccy",""); //核算机构(可以为空) arguments.addArgument("settleBranch",""); //账户属性(可以为空) arguments.addArgument("accAttribute",""); //账户性质(可以为空) arguments.addArgument("accNature",""); //余额方向(可以为空) arguments.addArgument("drCrFlag",""); //状态(可以为空) arguments.addArgument("status",""); //区域码(可以为空) arguments.addArgument("areaCode",""); //会计日(可以为空) arguments.addArgument("accDate",""); return arguments; } /** * 初始化压测准备 * @param arg0 默认参数 */ public void setupTest(JavaSamplerContext arg0){ } /** * 执行压测完毕后 * @param arg0 默认参数 */ public void teardownTest(JavaSamplerContext arg0){ } /** * 执行压力测试代码 * @param javaSamplerContext 默认参数对象 * @return 响应时间等 */ @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { //实例化参数对象 balanceParamDTO = new BalanceParamDTO(); balanceParamDTO.setAccountType(javaSamplerContext.getParameter("accountType")); balanceParamDTO.setAccountNo(javaSamplerContext.getParameter("accountNo")); balanceParamDTO.setAccountName(javaSamplerContext.getParameter("accountName")); balanceParamDTO.setContractNo(javaSamplerContext.getParameter("contractNo")); balanceParamDTO.setCcy(javaSamplerContext.getParameter("ccy")); balanceParamDTO.setSettleBranch(javaSamplerContext.getParameter("settleBranch")); balanceParamDTO.setAccAttribute(javaSamplerContext.getParameter("accAttribute")); balanceParamDTO.setAccNature(javaSamplerContext.getParameter("accNature")); balanceParamDTO.setDrCrFlag(javaSamplerContext.getParameter("drCrFlag")); balanceParamDTO.setStatus(javaSamplerContext.getParameter("status")); balanceParamDTO.setAreaCode(javaSamplerContext.getParameter("areaCode")); balanceParamDTO.setAccDate(null); //创建返回对象 SampleResult sampleResult = new SampleResult(); //创建日志ID号 String tranceLogID = UUID.randomUUID().toString(); //记录调用起始时间点 sampleResult.sampleStart(); result = balanceQueryFacade.queryBalance(balanceParamDTO,tranceLogID); //记录接口返回时间点 sampleResult.sampleEnd(); //返回结果传递SampleResult sampleResult.setSuccessful(result.isSuccess()); sampleResult.setResponseMessage(result.toString()); return sampleResult; } /** * 接口联通性测试 * @param args 默认参数 */ public static void main(String[]args){ JTestBalanceQueryFacade jTestBalanceQueryFacade = new JTestBalanceQueryFacade(); JavaSamplerContext arg = new JavaSamplerContext(jTestBalanceQueryFacade.getDefaultParameters()); jTestBalanceQueryFacade.runTest(arg); jTestBalanceQueryFacade.teardownTest(arg); }}可以通过Main方法进行接口调用测试
先clean 然后进行package
开始种,运行CMD
切换至工程路径
运行mvn dependency:copy-dependencies -DoutputDirectory=lib
如果zk地址为综测地址,建议放入综测进行打开
右键创建线程组
显示自己的测试类
Samples:请求次数
Average:平均响应时间
Median:中间值
90%Line:90%响应时间
Min:最小响应时间
Max:最大响应时间
Error%:错误率
Throughput: TPS 每秒或每分钟处理交易笔数
至此Dubbo类接口测试联通成功
联通成功
nmon 工具可以帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新。这个高效的工具可以工作于任何哑屏幕、telnet 会话、甚至拨号线路。另外,它并不会消耗大量的 CPU 周期,通常低于百分之二。在更新的计算机上,其CPU使用率将低于百分之一。
上传nmon工具
键盘输入cmd 即监控cpu memory disks
远程进入172.17.162.73 用户admin/password
选择【应用程序】=》Java,命名英文的层,点【下一步】
根据实际情况,选择监控应用系统版本及JVM版本,并下一步
非初次安装直接点【下一步】
复制剪切板内容至txt文本
点击【下一步】
执行java -jar dynatrace-agent-6.2.0.1238-unix.jar
加入配置信息
日志显示监控成功
说明监控ok,双击配置名称
选择传感器,及浏览
点击刷新按钮
勾选监控的类并确定
选择【活动的并启动 PurePath】并确定
选择【Agent概述】
右击选择部署
至此dytrace部署完毕
进入bin目录修改jmeter.properties中remote_hosts,添加压力机的ip,其中localhost为本地机器也是压力机
设置1秒内,启动1个线程,循环1次
由于两台机器,所以都是2倍。即,1秒内启动2线程,各循环1次。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。