mongodb - 使用 jmeter 从 mongodb 中删除记录
问题描述
我正在尝试使用以下代码删除循环中的记录。但它只是删除第一条记录并为其余记录提供成功消息,但它没有反映在 mongo dB 中。
import com.mongodb.*
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import static com.mongodb.client.model.Filters.*;
try{
MongoCollection<Document> collection=vars.getObject("collection");
Bson filter=eq("empid","${empid}");
collection.deleteOne(filter); //delete the document
return"Document deleted";
}
catch(Exception e){
SampleResult.setSuccessful(false);
SampleResult.setResponseCode("500");
SampleResult.setResponseMessage("Exception: "+e);
}
解决方案
不要将 JMeter 变量内联${empid}
到 Groovy 脚本中,因为您使用已编译的脚本缓存功能,只有第一次出现才会在后续调用中使用
JSR223 测试元素具有可以显着提高性能的特性(编译)。要从此功能中受益:
使用脚本文件而不是内联它们。如果此功能在 ScriptEngine 上可用,这将使 JMeter 编译它们并缓存它们。
或使用脚本文本并检查缓存已编译的脚本(如果有可用的属性)。
使用此功能时,请确保您的脚本代码不直接在脚本代码中使用 JMeter 变量或 JMeter 函数调用,因为缓存只会缓存第一个替换。而是使用脚本参数。
所以我相信如果你改变这条线:
Bson filter = eq("empid", "${empid}");
对此:
Bson filter = eq("empid", vars.get("empid"));
您的代码将按预期开始工作。
上面的代码片段vars
代表JMeterVariables类实例,请参阅 JavaDoc 获取可用函数列表和您应该在 Groovy 中使用的 8 个 JMeter Java 类,以了解有关可用于 JSR223 测试元素的其他 JMeter API 快捷方式的更多信息
推荐阅读
- python - 最好在 django 应用程序中返回 mongodb 的 json
- java - 在 Windows 10 机器上安装 Talend v7.0.1 时出错
- sql-server - 如何进行SQL查询以获取组中的父子数据
- javascript - 隐藏行并在搜索时显示
- javascript - D3.js,仅在节点之间的链接距离时如何在二维位置绘制
- xcode - IOKIT mac os IORegistryEntry
- typescript - PrimeNG Dropdown 值作为字符串而不是对象
- vb.net - 使用动态数组更新列表框上的值
- perl - 如何在 MySQL 中绑定 JSOn 对象
- ruby-on-rails - 检查请求是来自服务器还是浏览器