jmeter

转载请注明文章来源:http://write.blog.csdn.net/postedit/51735531

1、增加线程组


2、配置线程


3、添加报告

4、添加JAVA请求程序

5、添加参数

点击保存按键,存储配置文件java请求.jmx

6、使用随机数

选项-》函数助手


点击生成

生成${__Random(11111,22222,)}

7、把第6步生成的Java请求.jmx中找到定义的变量,把变量的value替换成${__Random(11111,22222,)}

8、代码编写

AbstractJavaSamplerClient继承接口JavaSamplerClient

public void setupTest(JavaSamplerContext context)

public voidteardownTest(JavaSamplerContext context)

public ArgumentsgetDefaultParameters()

 

JavaSamplerClient接口定义如下方法:

    public abstract void setupTest(JavaSamplerContextjavasamplercontext);

   public abstractSampleResult runTest(JavaSamplerContextjavasamplercontext);

   public abstract voidteardownTest(JavaSamplerContextjavasamplercontext);

   public abstract ArgumentsgetDefaultParameters();

 

编写的代码必须重写

@Override

public SampleResult runTest(JavaSamplerContextarg0)

 

#调整几次线程组的线程数目的控制,我们会发现我们的这个自定义类中的teardowntest和 setupuptest方法都是正对线程组中的某一个线程来执行的,线程组中线程的调用数目其实就是指runtest方法的运行次数。

 

//代码如下

package com.tydic.beijing.jmeter;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

importorg.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

importorg.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

 

public class OracleWRextendsAbstractJavaSamplerClient {

private static Connectionconn=null;

private static PreparedStatementpstmt =null;

private static PreparedStatementsel_stmt =null;

 

public void setupTest(JavaSamplerContextarg0) {

String sel = "select * fromtest_db_wr where balance_id = ?";

String sql = "updatetest_db_wr set real_balance = real_balance - ? where balance_id = ?";

String url = "jdbc:oracle:thin:@172.168.1.246:1521:bssgx";

String userName = "newbilling";

String passWord = "newbilling";

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

conn = DriverManager.getConnection(url,userName,passWord);

pstmt =conn.prepareStatement(sql);

sel_stmt =conn.prepareStatement(sel);

} catch (ClassNotFoundException | SQLException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

}

 

@Override

public SampleResult runTest(JavaSamplerContextarg0) {

 

booleansuccess =true;

SampleResult results = newSampleResult();

results.sampleStart();//事务的起点

 

longbalance =arg0.getLongParameter("balance");

String balance_id = String.valueOf(arg0.getLongParameter("balanceId"));

System.out.println("balance_id["+balance_id +"]balance[" +balance

+ "]");

try {

sel_stmt.setString(1,balance_id);

ResultSet rs = sel_stmt.executeQuery();

if (rs.next()){

pstmt.setLong(1,balance);

pstmt.setString(2,balance_id);

pstmt.execute();

conn.commit();

}

} catch (SQLException e){

success =false;

//TODO Auto-generated catch block

e.printStackTrace();

} finally {

results.sampleEnd();//事务的终点

results.setSuccessful(success);// 设置本次事务成功或失败

}

returnresults;

}

}

9、命令行模式运行Jmeter

jmeter -n -t Java请求.jmx -l listener.jtl

 这里是我们使用非GUI 模式运行测试脚本时可以使用的一些命令:

  • -h 帮助 -> 打印出有用的信息并退出
  • -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
  • -t 测试文件 -> 要运行的 JMeter 测试脚本文件
  • -l 日志文件 -> 记录结果的文件
  • -r 远程执行 -> 启动远程服务
  • -H 代理主机 -> 设置 JMeter 使用的代理主机
  • -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号

10、结果如下

tail -f jmeter.log 

 

11.Jmeter的分布式测试(优缺点)(转自JMeter入门教程

下面是分布式测试的使用方法,即使用一台机器控制多台机器给目标机器产生压力。由于Linux和Windows上的方法有些不一样,这里说下Linux下是怎么来配置的。

首先总控的机器我们叫master,产生压力的肉鸡我们叫JmeterServer,待我们测试的系统我们叫Target.

第一步:启动JmeterServer。我们可以找到Jmeter/bin目录下的jmeter-server这个脚本,运行即可,当然如果你需要调整这个测试负载产生服务器的内存等性能参数的话,我们修改这个脚本jmeter中的内存参数。

第二步 :修改Master机器上jmeter/bin目录下的jmeter.properties文件,修改remote_hosts=localhost:1099,localhost:2010这个为你自己的JmeterServer的实际IP,如果有多台可以用逗号分开。

第三步 : 启动master jmeter,运行测试脚本的时候选:运行--> 远程运行 --> 选择IP 或者 运行所有远程。JmeterServer就会运行Master机器上设定的运行脚本了。

问题 :我在实际使用中发现使用这种模式下的Jmeter在Master观测实际测试结果,发现TPS远远低于使用传统的一台Jmeter来测试所能达到的TPS,我感觉可能是由于Jmeter这种多机器协作中传递信息是使用RMI技术,可能这种技术本身还对Jmeter的性能产生了影响导致压力上去的很慢。该问题还没有得到完全认证,所以我现在如果在一台机器测试产生的压力不够的情况下我直接使用多台机器测把TPS加起来就是结果,比较傻,期待大侠指点迷津。

 

12、聚合报告(转自理解 JMeter 聚合报告(Aggregate Report)

AggregateReport  JMeter 常用的一个 Listener,中文被翻译为聚合报告。今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅。

如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在AggregateReport中,会显示一行数据,共有10个字段,含义分别如下。

Label:每个 JMeter  element(例如 HTTPRequest)都有一个 Name 属性,这里显示的就是 Name 属性的值

#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 TransactionController 时,也可以以Transaction 为单位显示平均响应时间

Median:中位数,也就是 50 用户的响应时间

90%Line90 用户的响应时间

Note:关于 50  90 并发用户数的含义,请参考下文

http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request perSecond),当使用了 TransactionController 时,也可以表示类似 LoadRunner  Transactionper Second 

KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

 

 

资料引用:

JMeter入门教程

使用非 GUI 模式运行 JMeter 压力测试

理解 JMeter 聚合报告(AggregateReport)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值