groovy 脚本调用 MongoDB
groovy 语言,它是一种类 Java 语言,具体可以查阅下百度。
步骤1:下载mongo-java-driver驱动
官方驱动:MongoDB Java Drivers
Maven:https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver (建议谷歌浏览器访问)
我用的目前是最新的jmeter5.6,点击下载3.12.14
选择jar包。
把mongo-java-driver-3.12.14包拷贝至apache-jmeter-5.6\lib\ext目录下。
注意:这里有坑了,我们检查apache-jmeter-5.6\lib目录下是否存在驱动mongo-java-driver-xxx,不然会报错,如果有就移除。以亲测多次的确低版本的驱动是无法支撑的。
步骤2:我们需要用JSR223 Sampler(采样器),此采样器是在 jmeter.properties (是在jmeter安装bin目录下)文件中屏蔽掉的,我们可以打开该文件搜索“not_in_menu”,MongoDB相关的元件都是屏蔽掉。我们修改如下。如图:
步骤3:打开jmeter,右击我们可看见
注意:我这里提供了简单的增、删、改、查的java脚本,并对其他元件进行整体讲述。
步骤4:新增-线程组-CSV数据文件设置,用户定义的变量,查看结果树。如图:
csv数据文件设置:是我们提供外部文件,供我们链接数据库后进行增、删、改、查
标记进行说明,
用户定义变量:是我们提前预置的变量,方便链接数据库配置的变量。如图:
我们可以通过navicat15连接查看userone库下的uesr的集合,是没有任何数据的。如何通过navicat连接本地服务可点击参考我的文章。
步骤5:我们可新增4个(修改名称:增、删、改、查)JSR223 Sampler采样器
注意:一定要选择,如图:
增:
import com.mongodb.client.*;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
// 建立数据库连接
MongoClient mongoClient = MongoClients.create(${mongoHost});
// 连接 数据库 databaseName为数据库名
MongoDatabase database = mongoClient.getDatabase(${databaseName});
// 连接 数据集 collectionName为数据集名
MongoCollection<Document> collection = database.getCollection(${collectionName});
// 构造数据
Document doc = new Document("_id", ${a})
.append("username", "${b}")
.append("password", ${c})
// 插入1条数据
collection.insertOne(doc);
//写入响应
def RpData=""
doc.each
{
RpData=RpData+it.toString()
}
SampleResult.setResponseData(RpData)
注意:插入的过程是需要时间,一定要记得,可添加定时器
把上方的代码拷贝至脚本编辑框内:
运行截图(我在线程组里面设置了循环10次):
改:
import static com.mongodb.client.model.Filters.eq;
import org.bson.Document;
import com.mongodb.client.*;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.result.UpdateResult;
import java.util.ArrayList;
import java.util.List;
// 建立数据库连接
MongoClient mongoClient = MongoClients.create(${mongoHost});
// 连接 数据库 databaseName为数据库名
MongoDatabase database = mongoClient.getDatabase(${databaseName});
// 连接 数据集 collectionName为数据集名
MongoCollection<Document> collection = database.getCollection(${collectionName});
// 更改
collection.replaceOne(eq("username","张三2"),Document.parse("{username:'张三2',password:1001}"));
// 查询
MongoCursor<Document> doc = collection.find().iterator()
//写入响应
def RpData=""
doc.each
{
RpData=RpData+it.toString()
}
SampleResult.setResponseData(RpData)
注意:该代码的通过replaceOne寻找相等的数据,并修改。
运行后查看数据库如图:
查:
import com.mongodb.client.*;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
// 建立数据库连接
MongoClient mongoClient = MongoClients.create(${mongoHost});
// 连接 数据库 databaseName为数据库名
MongoDatabase database = mongoClient.getDatabase(${databaseName});
// 连接 数据集 collectionName为数据集名
MongoCollection<Document> collection = database.getCollection(${collectionName});
// 查询
MongoCursor<Document> doc = collection.find().iterator()
//写入响应
def RpData=""
doc.each
{
RpData=RpData+it.toString()
}
SampleResult.setResponseData(RpData)
运行截图:
删:
import static com.mongodb.client.model.Filters.eq;
import org.bson.Document;
import com.mongodb.client.*;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.result.UpdateResult;
import java.util.ArrayList;
import java.util.List;
// 建立数据库连接
MongoClient mongoClient = MongoClients.create(${mongoHost});
// 连接 数据库 databaseName为数据库名
MongoDatabase database = mongoClient.getDatabase(${databaseName});
// 连接 数据集 collectionName为数据集名
MongoCollection<Document> collection = database.getCollection(${collectionName});
//删除
collection.deleteOne(eq("username","张三11"));
// 查询
MongoCursor<Document> doc = collection.find().iterator()
//写入响应
def RpData=""
doc.each
{
RpData=RpData+it.toString()
}
SampleResult.setResponseData(RpData)
运行截图:
在进行性能测试之前,需要考虑许多因素,包括身份验证等。对于测试环境或本地环境,建议取消身份验证,因为在实际生产环境中,数据库通常不会为每个线程(用户)建立数据库连接。因此,性能测试通常针对测试环境或本地环境进行,而不是在正式生产环境中进行。即使在对正式环境进行性能测试时,也需要谨慎处理,并确保取消各种服务器上的安全策略或将测试机器的IP添加到白名单中。这样可以避免因大量请求而触发安全机制,导致被屏蔽访问。
这4个代码片段是一个简单的增删改查,亲测是可运行的,当然该文章的阐述只是讲解了如何连接MongoDB数据库。后续文章会讲解如何写性能测试报告。