JMeter我们是不是很熟悉?在接触了这么久的jmeter之后,添加Sampler这里有一个叫Java请求的按键,顾名思义这是一个处理java包的一个请求处理器,下面就是我对这个过程的一个记录。
在做这个测试前我们要了解的是他的一些核心步骤*重点内容*
1.创建一个工程(Java工程/Maven工程都可以,个人喜欢而已)
2.将Jmeter的lib目录下的Jar包文件添加到Build Path下(ApacheJMeter_core.jar(必须)、ApacheJMeter_java.jar(必须)、avalon-framework-4.1.4.jar、jorphan.jar、logkit-2.0.jar)
3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写
AbstractJavaSamplerClient有下面几种方法需要用到:
public Arguments getDefaultParameters();设置可用参数及默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
下面我是用maven工程实现的,所以创建了一个maven工程:
1,创建工程,添加所需要的依赖包
2,构建一个测试类实现数据库的插入功能:MongodbAddTest 并继承AbstractJavaSamplerClient
public class MongodbAddTest extends AbstractJavaSamplerClient {
private static String userName;
private static String province;
private static String home;
private static int age;
private static int _id;
private static String dbName = “wash_mall_bbs”;
@Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("userName", "bee");
params.addArgument("age", "25");
params.addArgument("province", "广东");
params.addArgument("home", "韶关");
params.addArgument("_id", "8");
return params;
}
// 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
@Override
public void setupTest(JavaSamplerContext arg0) {
BasicDBObject doc = new BasicDBObject();
}
public SampleResult runTest(JavaSamplerContext context) {
MongoDBDao dao = new MongoDBDaoImpl();
SampleResult sr = new SampleResult();
sr.setSampleLabel("增加数据");
userName = context.getParameter("userName");
age = context.getIntParameter("age");
province = context.getParameter("province");
home = context.getParameter("home");
_id = context.getIntParameter("_id");
sr.sampleStart();
try {
// BasicDBObject doc = new BasicDBObject();
// Map params1 = null;
Map<String, Object> params = new LinkedHashMap<String, Object>();
params.put("userName", userName);
params.put("age", age);
params.put("province", province);
params.put("home", home);
params.put("_id", _id);
boolean res = dao.inSert(dbName, "wjl2016", params);
/*
* { Map<String,Object> params = new LinkedHashMap<String,Object>();
* params.put("userName", "Bee"); params.put("age", "27");
* params.put("province", "guangdong"); params.put("home",
* "guangzhou"); params.put("_id", "10"); dao.inSert(dbName,
* "wjl2016", params); }
*/
// doc.putAll(params1);
sr.setSamplerData(params.toString());
sr.setSuccessful(true);
sr.setResponseData("结果是:" + res, "UTF-8");
} catch (Throwable e) {
// TODO Auto-generated catch block
sr.setSuccessful(false);
} finally {
sr.sampleEnd();// jmeter 结束统计响应时间标记
}
return sr;
}
public static void main(String[] args) {
Arguments params = new Arguments();
// params.addArgument("num1", "1");//设置参数,并赋予默认值1
// params.addArgument("num2", "2");//设置参数,并赋予默认值2
JavaSamplerContext arg0 = new JavaSamplerContext(params);
MongodbAddTest test = new MongodbAddTest();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
}
3,创建数据库连接池
package Mongodb.Mongodb;
import java.net.UnknownHostException;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
public class MongoDbUtil {
private static MongoClient mongoClient = null;
public static MongoClient getMongoClient(){
if (mongoClient == null) {
MongoClientOptions.Builder buide = new MongoClientOptions.Builder();
buide.connectionsPerHost(100);// 与目标数据库可以建立的最大链接数
buide.connectTimeout(1000 * 60 * 20);// 与数据库建立链接的超时时间
buide.maxWaitTime(100 * 60 * 5);// 一个线程成功获取到一个可用数据库之前的最大等待时间
buide.threadsAllowedToBlockForConnectionMultiplier(100);
// buide.maxConnectionIdleTime(0);
// buide.maxConnectionLifeTime(0);
buide.socketTimeout(0);
buide.socketKeepAlive(true);
MongoClientOptions myOptions = buide.build();
try {
mongoClient = new MongoClient(new ServerAddress(“192.168.234.28”, 27017), myOptions);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
if(null==mongoClient){
try {
throw new Exception(“link mongdb fail”);
} catch (Exception e) {
e.printStackTrace();
}
}
return mongoClient;
}
}
4,定义数据库插入接口
package Mongodb.Mongodb;
import java.util.ArrayList;
import java.util.Map;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
public interface MongoDBDao {
public DBCollection getCollection(String dbName, String collectionName);
public boolean inSert(String dbName, String collectionName, Map<> params);
}
5,实现数据库插入方法
package Mongodb.Mongodb;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.WriteResult;
/*
* mongodb数据库链接池
*/
public class MongoDBDaoImpl implements MongoDBDao {
private static String dbName = “wash_mall_bbs”;
public DBCollection getCollection(String dbName, String collectionName) {
DB db = MongoDbUtil.getMongoClient().getDB(dbName);
// return db.getCollection(collectionName);
if(!db.collectionExists(collectionName)){
return db.createCollection(collectionName, new BasicDBObject(“capped”, false).append(“size”, 10485));
}
return db.getCollection(collectionName);
}
public boolean inSert(String dbName, String collectionName, Map<> params) {
DB db = null;
db = MongoDbUtil.getMongoClient().getDB(dbName);
DBCollection dbCollection = db.getCollection(collectionName);
long num = dbCollection.count();
BasicDBObject doc = new BasicDBObject();
try {
doc.putAll(params);
dbCollection.insert(doc);
if (dbCollection.count() - num > 0) {
System.out.println("添加数据成功!!!");
return true;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(null != db){
db.requestDone(); //请求结束后关闭db
}
}
return false;
}
public static void main(String args[]) {
MongoDBDao dao = new MongoDBDaoImpl();
DBCollection dbConlle = dao.getCollection(dbName, "wjl2016");
System.out.println(dbConlle.toString());
//插入数据
// {
// Map<> params = new LinkedHashMap<>();
// params.put(“userName”, “hehe”);
// params.put(“age”, 18);
// params.put(“province”, “湖北”);
// params.put(“home”, “hb”);
// params.put(“_id”, 1);
// dao.inSert(dbName, “wjl2016”, params);
// }
}
}
6,导出Jar包(file->export->Runnerable jar file->选择要运行的类)
7,把刚导出的Jar包放到jmeter安装目录下的lib/
8,启动Jmeter
添加一个线程组、添加查看树、Java 请求、选择要测试的方法
9,设置多线程就可以做性能压力测试了