Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败

1.Jmeter在3.0以后就弃用了MongoDB Script

所以我选择编写自己的java请求进行mongoDB压测。

先贴上界面:

Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败_第1张图片

Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败_第2张图片

红色标出来的就是自己编写的java请求

2.编写java请求

Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败_第3张图片

建立一个maven工程,然后导入依赖


  4.0.0

  com.li.demo
  com.li.demo.Mango
  0.0.1-SNAPSHOT
  jar

  com.li.demo.Mango
  http://maven.apache.org

  
    UTF-8
  

  
  
 
		
			org.mongodb
			mongo-java-driver
			3.11.2
		
		
		
		
			org.apache.jmeter
			ApacheJMeter_mongodb
			5.0
		

    
      junit
      junit
      3.8.1
      test
    




  
  
  
		
			
			


			
				org.apache.maven.plugins
				maven-compiler-plugin
				3.3
				
					1.8
					1.8
					UTF-8
					true
				
			

			
			
				org.apache.maven.plugins
				
				maven-shade-plugin
				2.3
				
					
						package
						
							shade
						
						
							
							false
							
								
									META-INF/spring.handlers
								
								
									META-INF/spring.schemas
								
								
									
									com.li.demo.com.li.demo.Mango.App
								
							
						
					
				
			


		
	

我这里引入了mongo-java-driver和ApacheJMeter_mongodb,然后还需要用到jmeter,这是因为要继承AbstractJavaSamplerClient,才可以成为jmeter可运行可识别的java请求。

Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败_第4张图片

这个jmeter2.2的jar包我通过maven导入不了,所以下载下来,外部引入。

继承AbstractJavaSamplerClient新建一个类,然后代码如下:

package com.li.demo.com.li.demo.Mango;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MangoTest extends AbstractJavaSamplerClient {
	
	
	public static void main(String[] args) {
		System.out.println("hello world");
	
	}

	
	public SampleResult runTest(JavaSamplerContext arg0) {
		// TODO Auto-generated method stub
		System.out.println("开始执行!");
		SampleResult sampleresult = new SampleResult();  
		sampleresult.sampleStart();
		sampleresult.setSampleLabel("MongodbSampler" + Thread.currentThread().getId()); 
		MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
		
		MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
		System.out.println("成功");
		
		MongoCollection collection = mongoDatabase.getCollection("test");
		Document doc=new Document();
		doc.put("sss1", 10);
		collection.insertOne(doc);
		
		/*if ( responseData!= "" || !responseData.equals("")) {  
        	//设置响应数据为查询结果
            sampleresult.setResponseData(responseData.getBytes());  
        }else {  
            sampleresult.setResponseData(("the return data is null !").getBytes());  
        } */
		sampleresult.setSuccessful(true);
        sampleresult.sampleEnd();
		return sampleresult;  
	}

	@Override
	public Arguments getDefaultParameters() {
		// TODO Auto-generated method stub
		Arguments params=new Arguments();
		params.addArgument("ip","127.0.0.1");
		params.addArgument("port","27017");
		params.addArgument("dbname","test");
		params.addArgument("collection","test");
		return params;
	}
	
	
	
	
	

}

之所以新建一个main方法是之后要导出jar包的时候要导出成可执行的jar包,所以需要一个入口方法main。

runTest()是java请求的主要代码,里面是你的逻辑,可以是各种mangoDB的数据操作

getDefaultParameters()是设置输入参数。在runTest里可以用context.getParameter("参数名")获取到界面输入的参数

3.打包问题,因为引入了第三方jar包,打包是一个问题

右键项目,Export-》

Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败_第5张图片

选择Runnable JAR file

 

Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败_第6张图片

导出为:

Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败_第7张图片

一个jar包和依赖文件夹。一起放到jmeter的lib/ext下即可。

4.很坑很坑的java.lang.NoSuchMethodError: com.mongodb.MongoClient.getDatabase报错

结果是jmeter的lib下就有

 

Jmeter进行MongoDB压测编写自己的Java请求遇到的各种问题包括引入第三方jar包失败_第8张图片

而且是最高优先级,所以选择先加载了这个jar包,版本还很低。所以没有找到那个getDatabase方法!

你可能感兴趣的:(压力测试,Jmeter)