JMeter学习(十九)JMeter测试MongoDB

JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能。

第一种方法

1.编写Java代码,内容如下:

package com.test.mongodb;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;  

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 com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;
import com.mongodb.ServerAddress;
import com.mongodb.WriteResult;  

/**
 *
 * @author  2014-10-14
 * @remark  一次性插入多条数据测试MongoDB的性能
 */  

public class TestMongodb extends AbstractJavaSamplerClient {  

    private static Mongo            m;
    private static DB               db;
    private static AtomicLong       read_key = new AtomicLong(0);
    private static FileOutputStream fos;
    static {
        try {
            fos = new FileOutputStream(new File("jmeter_error.log"));  

            MongoOptions options = new MongoOptions();
            options.autoConnectRetry = true;
            options.connectionsPerHost = 1000;
            options.maxWaitTime = 5000;
            options.socketTimeout = 0;
            options.connectTimeout = 15000;
            options.threadsAllowedToBlockForConnectionMultiplier = 5000;
            m = new Mongo(new ServerAddress("127.0.0.1", 27017), options);
            db = m.getDB("iflashbuy-log");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }  

    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("rw", "w");
        return params;
    }

    public SampleResult runTest(JavaSamplerContext context) {
        // System.out.println(read_key.getAndIncrement());
        SampleResult results = new SampleResult();
        //System.out.println(context.getParameter("rw"));
        results.sampleStart();
        DBCollection coll = db.getCollection("area");
        if ("w".equalsIgnoreCase(context.getParameter("rw"))) {
            long key = 1;
            BasicDBObject doc = new BasicDBObject();
            doc.put("_id", UUID.randomUUID());
            doc.put("_class", "com.iflashbuy.bi.source.pojo.AreaDataEntity");
            doc.put("province", "广东");
            doc.put("city", "广州");
            doc.put("pv", 35522924);
            doc.put("uv", 52556);
            doc.put("orderCount", 963);
            doc.put("orderTotal", 1548563);
            doc.put("entpriseCode", "00540001");
            db.requestStart();
            WriteResult rs = coll.insert(doc);
            try {
                if (rs.getError() != null) fos.write(rs.getError().getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //System.out.println("w error->" + rs.getError());
            db.requestDone();
        }  

        results.setSuccessful(true);
        results.sampleEnd();
        return results;
        // return null;
    }  

    /*
    public static void main(String args[]) throws Exception {
        Arguments a = new Arguments();
        a.addArgument("rw", "w");
        final JavaSamplerContext c = new JavaSamplerContext(a);
        long start = System.currentTimeMillis();
        for (int i = 0; i < 5; i++) {
            new Thread() {
                public void run() {
                    TestMongodb t = new TestMongodb();
                    for (int j = 0; j < 2; j++) {
                        t.runTest(c);
                    }
                }
            }.start();
        }
    }
    */
}  

2.生成jar包,放在Jmeter_HOME/lib/ext文件夹下

3.启动JMeter,新建线程组,Java请求,察看结果树,聚合报告,图形结果

4.执行测试

检查MongoDB已添加成功数据。

第二种方法

1.启动JMeter,新建线程组,设置线程组属性

2.右键添加-MongoDB Source Config

设置属性Server Address List:127.0.0.1

MongoDB Source:jmeterdbsource,如下图设置:

3.右键添加-Sampler-MongoDB Script

 设置属性MongoDB Source:引用MongoDB source config中设置的好的名称,jmeterdbsource

Database Name:数据库名称,iflashbuy-log

Script:脚本

4.右键-监听器-察看结果树

以上两种方式,都可用于测试MongoDB的性能。

小结:学习Jmeter有一阵子了,越来越体会到Jmeter对于Java的支持太强大了.

附:

Mongodb亿级数据量的性能测试 http://www.cnblogs.com/lovecindywang/archive/2011/03/02/1969324.html

时间: 2024-08-09 09:36:19

JMeter学习(十九)JMeter测试MongoDB的相关文章

Koa2学习(九)与mongoDB交互

Koa2学习(九)与mongoDB交互 数据库下载与安装 windows下载地址:http://dl.mongodb.org/dl/win32/x86_64 linux下载地址:https://www.mongodb.com/download-center#community 安装教程略 数据库驱动 node.js要与mongo交互,需要安装mongodb驱动. npm i mongodb --save mongoose则是node.js中一个非常流行的对mongodb驱动的封装,内部已经实现了

JMeter学习笔记——认识JMeter(1)

拿到一个自动化测试工具,我们第一步就应该了解它能提供我们哪方面的功能(最直接的方法就是从官网获取),接下来就是简单的对这个工具进行“功能测试”了,当然这里的功能测试不是让你找它存在的bug,而是让自己对它有一个直观的认识,后面的功能测试也是为前面的认识做铺垫的,那我们就依赖这个原则来认识下JMeter. JMeter是干嘛的(主要是官网翻译——> http://jmeter.apach.org) JMeter是一个纯粹的Java编写的应用程序,它主要是用来进行负载和性能测试.设计JMeter最初

jmeter学习-性能指标、jmeter初识

一:性能测试的指标 1. 并发/并发数/并发用户数 狭义的并发:同一时间做相同的一件事 广义的并发:同一时间做不同事情,混合场景,对服务器来说的并发 性能测试,先做简单的狭义并发,在做广义并发:先做单接口的性能测试,再做业务性能测试,最后混合多业务场景的性能测试 并发数:单位时间内向服务器发起请求的用户数 //并发用户数:用于模拟真实用户向服务器发起请求的性能测试虚拟用户数 //系统用户数:只要访问过系统的用户,可能包含那些一次性访问.游客状态的用户 //在线用户数:当前正在访问系统的用户,不一

十九.jmeter函数---csvRead( )

Jmeter函数是一些能够转化在测试树种取样器或者其他配置元件的特殊值,一个函数的调用就像这样:${_functionName(var1,var2,var3)}, _functionName匹配函数名,圆括号内设置函数的参数,例如 ${_time(YMD)}实现参数因函数而不同,不需要参数的函数使圆括号内为空,例如 ${_theadNum()}. jmeter函数有两种函数:自定义静态值(用户变量)和内置函数 自定义静态值允许当一个测试树编译提交运行时,自定义变量被它们的静态值代替,这个替代在测

Jmeter学习笔记8-性能测试实践_web程序

[测试背景]就测试我们用的boss系统: [需求]测试并发登录的性能: [场景]1S增加2个线程,运行2000次: 分别看20.40.60并发下的表现: [监控]成功率.响应时间.标准差.CPU.mem.IO等 资源监控需要在windows下部署监控agent(即server agent) [测试时注意如下] 1.监控系统资源时,需要启动ServerAgent,否则会报错.错误信息为: 18:25:51 - ERROR: java.net.ConnectException: Connection

Jmeter(四十九)_常用的性能测试监听器

概述 jmeter中提供了很多性能数据的监听器,我们通过监听器可以来分析性能瓶颈 本文以500线程的阶梯加压测试结果来描述图表. 常用监听器 1:Transactions per Second 监听动态TPS,用来分析吞吐量.其中横坐标是运行时间,纵坐标是TPS值.红色表示通过的TPS,绿色表示失败的. 最大TPS大约在140左右,从1分26秒左右,开始有未通过的事物 2:Hits per Second 动态监听单位时间的点击率,也就是触发的请求数.其中横坐标是运行时间,纵坐标是HPS值. 点击

Jmeter学习(九)FTP测试计划

FTP服务主要提供上传和下载功能.有时间需要我们测试服务器上传和下载的性能.在这里我通过JMeter做一个FTP测试计划的例子. 1.创建一个线程组 2.线程组--->添加--->配置元件--->FTP请求缺省值:输入服务器名称或IP. 3.线程组--->添加--->Sampler--->FTP请求:选择get为上传方式 说明: IP:FTP服务的IP Remote file:FTP服务器上的一个文件. local file:本地你存放到本机上的路径. 选择   get

Jmeter学习笔记9-性能测试实践_FTP程序

[1]需求:上传一个文件到服务器(put) 下载一个文件到本地(get) [2]演示示例:从CRMS_Xshell_FTP中的/crmsfs/bank/completed/2017/20170831/dealSucc目录下下载:YGRpyPlan-20170831 从本地D:\TestTool\Test文件夹下上传RepayScheduleInfo-20170912到FTP的/crmsfs/bank/completed/2017/20170831/dealSucc目录下. [3]操作步骤 (1)

Jmeter(十九)Logic Controller 之 Module Controller and Include Controller

Module Controller ---模块控制器 测试计划设置"独立运行没每个线程组" 线程组2中使用Module Controller执行线程组1中的Sampler: 紧接着,将线程组1disable掉,执行: 结果树中是从线程组2开始执行,Module Controller依然可以控制到线程组1中的Dummy Sampler. 可以再增添个Test Fragment,试一试. This is Module Controller Include Controller: 旨在使用外

Reactor系列(十九)StepVerifier测试

#java#reactor#flux#StepVerifier# 测试 视频讲解: https://www.bilibili.com/video/av81866573/ FluxMonoTestCase.java package com.example.reactor; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; import re