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

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

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

先贴上界面:

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

2.编写java请求

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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.li.demo</groupId>
  <artifactId>com.li.demo.Mango</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>com.li.demo.Mango</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
  
 <!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongo-java-driver</artifactId>
			<version>3.11.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.jmeter/jmeter -->
		<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_mongodb -->
		<dependency>
			<groupId>org.apache.jmeter</groupId>
			<artifactId>ApacheJMeter_mongodb</artifactId>
			<version>5.0</version>
		</dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>




  </dependencies>
  
  <build>
		<plugins>
			
			


			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
					<showWarnings>true</showWarnings>
				</configuration>
			</plugin>

			<!-- 内置打包法 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<!-- 用这个maven打包插件 -->
				<artifactId>maven-shade-plugin</artifactId>
				<version>2.3</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<!-- 默认值为true.注意这个属性,如果你用这个插件来deploy,或者发布到中央仓库,这个属性会缩减你的pom文件,会把你依赖的<dependency>干掉 -->
							<createDependencyReducedPom>false</createDependencyReducedPom>
							<transformers>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
									<resource>META-INF/spring.handlers</resource>
								</transformer>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
									<resource>META-INF/spring.schemas</resource>
								</transformer>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<!-- 这个是你的程序入口文件 -->
									<mainClass>com.li.demo.com.li.demo.Mango.App</mainClass>
								</transformer>
							</transformers>
						</configuration>
					</execution>
				</executions>
			</plugin>


		</plugins>
	</build>
</project>

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

这个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<Document> 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-》

选择Runnable JAR file

 

导出为:

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

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

结果是jmeter的lib下就有

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值