查看: 54|回覆: 0

JMeter压测MongoDB

[複製鏈接]

3

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2009-8-18
發表於 2020-2-1 23:58:00 | 顯示全部樓層 |閲讀模式

1 原生方法:

vim /usr/local/jmeter/apache-jmeter-5.1.1/bin/jmeter.properties

编辑JMeter配置文件

在最后一行加入not_in_menu =

 重新启动JMeter

在配置元件添加MongoDB Source Config (DEPRECATED)

在取样器添加MongoDB Script (DEPRECATED)

 

 

但是此元器件存在严重的性能问题,

会在访问数据库时锁定一个链接,

故在3.0以后的版本里被抛弃!

 

2 JSR223取样器:

2.1 下载mongo-java-driver驱动

官方驱动:

https://mongodb.github.io/mongo-java-driver/

或者Maven:

https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver

<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.2</version>
</dependency>

把mongo-java-driver-3.8.2.jar放到/usr/local/jmeter/apache-jmeter-5.1.1/lib/ext目录下

rm -rf mongo-java-driver-2.11.3.jar

# 删除/usr/local/jmeter/apache-jmeter-5.1.1/lib目录旧版本的mongo-java-driver jar包

 

2.2 在MongoDB中创建jmeter_test库与blazemeter_tutorial集合

 

2.3 编写脚本,采用JSR223 Sampler

名称
mongoHost 192.168.1.111
mongoPort 27017
databaseName jmeter_test
collectionName blazemeter_tutorial

 

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

import org.bson.Document;

import java.util.Arrays;

try {
	MongoClientSettings settings = MongoClientSettings.builder()
		.applyToClusterSettings {builder -> 
			builder.hosts(Arrays.asList(new ServerAddress(vars.get("mongoHost"),vars.get("mongoPort").toInteger())))}
		.build();
	
	MongoClient mongoClient = MongoClients.create(settings);
	
	MongoDatabase database = mongoClient.getDatabase(vars.get("databaseName"));
	MongoCollection<Document> collection = database.getCollection(vars.get("collectionName"));
	
	vars.putObject("collection", collection);
	
	return "Connected to " + vars.get("collectionName");
}
catch (Exception e) {
	SampleResult.setSuccessful(false);
	SampleResult.setResponseCode("500");
	SampleResult.setResponseMessage("Exception: " + e);
}

 

import com.mongodb.client.MongoCollection;

import org.bson.Document;

import java.util.Arrays;

try {
	MongoCollection<Document> collection = vars.getObject("collection");
	
	Document document = new Document("firstName", "Expert")
		.append("lastName", "Protocolson")
		.append("age", 37)
		.append("occupation", "DevOps")
		.append("skills", Arrays.asList("System Administration", "Linux"))
		.append("adress", new Document("city", "Systemberg")
			.append("street", "Data Line")
			.append("house", 42));
	
	collection.insertOne(document);

	return "Document inserted";
}
catch (Exception e) {
	SampleResult.setSuccessful(false);
	SampleResult.setResponseCode("500");
	SampleResult.setResponseMessage("Exception: " + e);
}

 

import com.mongodb.client.MongoCollection;
import static com.mongodb.client.model.Filters.*;

import org.bson.Document;
import org.bson.types.ObjectId;

try {
	MongoCollection<Document> collection = vars.getObject("collection");
	
	Document result = collection.find(eq("firstName", "Expert")).first();

	vars.put("exampleDocumentId", result.get("_id").toString());
	
	return "Document with id=" + result.get("_id") + " found";
}
catch (Exception e) {
	SampleResult.setSuccessful(false);
	SampleResult.setResponseCode("500");
	SampleResult.setResponseMessage("Exception: " + e);
}

 

import com.mongodb.client.MongoCollection;
import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;

import org.bson.Document;
import org.bson.types.ObjectId;

try {
	MongoCollection<Document> collection = vars.getObject("collection");
	
	collection.updateOne(
		eq("_id", new ObjectId(vars.get("exampleDocumentId"))),
		combine(set("occupation", "Project Manager"), set("adress.city", "New Codeshire"), currentDate("lastModified")));

	return "Document with id=" + vars.get("exampleDocumentId") + " modified";
}
catch (Exception e) {
	SampleResult.setSuccessful(false);
	SampleResult.setResponseCode("500");
	SampleResult.setResponseMessage("Exception: " + e);
}

 

import com.mongodb.client.MongoCollection;
import static com.mongodb.client.model.Filters.*;

import org.bson.Document;

try {
	MongoCollection<Document> collection = vars.getObject("collection");
	
	collection.deleteOne(eq("occupation", "Project Manager"));

	return "Document deleted";
}
catch (Exception e) {
	SampleResult.setSuccessful(false);
	SampleResult.setResponseCode("500");
	SampleResult.setResponseMessage("Exception: " + e);
}

 

 

2.4 补充说明:

MongoClient mongoClient = MongoClients.create("mongodb://mongohost:27017");
// 不带用户名与密码的链接方式

MongoClient mongoClient = MongoClients.create("mongodb://user:password@mongohost/?authSource=userdb&ssl=true");
// 带用户名与密码的链接方式

 



来源:https://www.cnblogs.com/yjlch1016/p/12250782.html
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部