使用Jmeter对MongoDB进行压测

1.介绍
2.使用groovy编写MongoDB查询操作代码 进行压测
3.通过BeanShell取样器去执行本地的Python脚本
4.资源地址

1.介绍
- 1.需求介绍:
   - 通过MongoDB的key进行查询操作的压测

- 2.压测方法:

  - 方法1(推荐):
    - 通过 JSR223取样器 中的groovy语言去编写代码,编写MongoDB查询操作 
  
  - 方法2:
    - 通过 BeanShell 取样器 去执行 本地的Python脚本
    - Python脚本里面写有MongoDB查询操作
    - 执行完Python脚本,如果Jmeter想要知道执行结果,可以获取脚本的内容,然后把获取到的内容存储起来
    - 使用JSR223 Sampler 把结果输出到查看结果树中

  - 方法3 (不推荐):
    - 使用JSR223取样器 中的python语言去执行MongoDB查询操作 
    (只能使用python2.7语法,没有python3.x的jar包,因为python2.X版本已经不维护,很多第三方库已经无法安装) 
    
- 3. JSR223 Sampler 介绍:
    
    "JSR223" 是指 Java 规范请求(Java Specification Request)第223号。
    允许使用各种脚本语言编写自定义逻辑来处理测试中的各种任务
    支持多种脚本语言: 支持多种脚本语言,如 Groovy、JavaScript、Python、Ruby 等。
2.使用groovy编写MongoDB查询操作代码 进行压测
    - 1.更新jar包
        - 需要更新MongoDB jar包 ,地址:https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver/3.8.2
        - 将下载的 mongo-java-driver-*.jar 包放到 jmeter/lib中(建议备份原来的 mongo-java-driver-2.11.3.jar包)。

    - 2. 添加取样器 
        - 取样器选择 JSR223 Sampler
        - 脚本语言选择 groovy
        - MongoDB查询操作的代码:

                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 com.mongodb.client.FindIterable;
                import static com.mongodb.client.model.Filters.*;
                import org.bson.types.ObjectId;
                import org.bson.Document;
                import java.util.Arrays;
                import java.util.List;
                import java.util.ArrayList;
                
                try {
                    // 建立数据库连接
                    MongoClient mongoClient = MongoClients.create("mongodb://用户名:密码@IP地址:端口号/数据库名称");
                
                    // 连接数据库的集合(表名)
                    MongoCollection<Document> collection = database.getCollection("表名");
                    
                    // 方式1.通过固定的key去查询
                    //  def key = "1"
                    
                    // 方式1通过csv去读取key值
                    def key = ${key}
                    Document result = collection.find(eq("id", key)).first();
                
                    return "查询:" + result 
                }
                catch (Exception e) {
                    SampleResult.setSuccessful(false);
                    SampleResult.setResponseCode("500");
                    SampleResult.setResponseMessage("Exception: " + e);
                }
                



3.通过BeanShell取样器去执行本地的Python脚本
    1. 需要下载pythonjar包:
        地址:https://repo1.maven.org/maven2/org/python/jython-standalone/2.7.4/jython-standalone-2.7.4.jar

    2. BeanShell 取样器 写上执行python脚本
            
        
        import java.io.BufferedReader;
        import java.io.InputStreamReader;
        
        String pythonScriptPath = "python脚本位置";
        // eg: String pythonScriptPath = "E:/test/main.py";
        
        try {
            Process process = Runtime.getRuntime().exec("python " + pythonScriptPath);
        
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder output = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }
        
            process.waitFor(); 
            int exitValue = process.exitValue();
            
            # 在jmeter中打印日志
            log.info("Python script output:\n" + output.toString());
            log.info("Python script exit value: " + exitValue);
        
            // 存储变量,获取python中所以通过print打印出来的内容
            vars.put("pythonOutput", output.toString());   
        
        } catch (Exception e) {
            log.error("Error executing Python script: " + e.getMessage());
    }

    3. JSR223 Sampler中选择 jypython语言
        
        # 使用JSR223 Sampler 把结果输出到查看结果树中

        log.info("*"*100)

        # 使用刚才的变量
        result = vars.get("pythonOutput")  
        log.info("result:"+result)
        
        log.info("*"*100)
        
        # 设置响应信息
        SampleResult.setResponseData(result);
        SampleResult.setResponseCode("200")
        SampleResult.setSuccessful(True)


4.资源地址
    - 代码地址 & jar包地址:
    https://github.com/wwsit/python_files/tree/master/006_jmeter/001_MongoDB

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:使用Jmeter对MongoDB进行压测

本文作者:伟生

发布时间:2024-08-24, 15:55:00

最后更新:2024-08-24, 19:11:13

原始链接:http://yoursite.com/2024/08/24/ceshi_18_jmeter_01_MongoDB/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏