Jmeter получает ошибку соединения с MongoDb

Я хочу выполнить нагрузочный тест в своей базе данных mongodb, поэтому я добавил драйвер mongodb в папку bin / ext и перезапустил jmeter. Я выбрал JSR223 Sampler, выбрал Groovy в качестве языка и добавил код подключения, как показано ниже.

import com.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 org.bson.Document;

import java.util.Arrays;

try {
    MongoClientSettings settings = MongoClientSettings.builder()
        .applyToClusterSettings {builder -> 
            builder.hosts(Arrays.asList(new ServerAddress(vars.get("mongoHost"),vars.get("mongoPort").toInteger())))}
        .build();

    MongoClient mongoClient = MongoClients.create(settings);

    MongoDatabase database = mongoClient.getDatabase(vars.get("databaseName"));
    MongoCollection<Document> collection = database.getCollection(vars.get("collectionName"));

    vars.putObject("collection", collection);

    return "Connected to " + vars.get("collectionName");
}
catch (Exception e) {
    SampleResult.setSuccessful(false);
    SampleResult.setResponseCode("500");
    SampleResult.setResponseMessage("Exception: " + e);
}

mongoHost, mongoPort, databaseName, collectionName настраиваются в пользовательских переменных (план тестирования). Когда я запускаю сэмплер, появляется ошибка

Thread Name:myThread Group 1-1
Sample Start:2020-01-27 15:57:35 IST
Load time:39
Connect Time:0
Latency:0
Size in bytes:0
Sent bytes:0
Headers size in bytes:0
Body size in bytes:0
Sample Count:1
Error Count:1
Data type ("text"|"bin"|""):text
Response code:500
Response message:javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script3.groovy: 6: unable to resolve class com.mongodb.ServerAddress
 @ line 6, column 1.
   import com.mongodb.ServerAddress;
   ^

Script3.groovy: 5: unable to resolve class com.mongodb.MongoClientSettings
 @ line 5, column 1.
   import com.mongodb.MongoClientSettings;
   ^

Script3.groovy: 10: unable to resolve class org.bson.Document
 @ line 10, column 1.
   import org.bson.Document;
   ^

3 errors



SampleResult fields:
ContentType: 
DataEncoding: null

person nithin    schedule 27.01.2020    source источник


Ответы (1)


Вам необходимо добавить следующие библиотеки в путь к классам JMeter:

  1. mongo-java-driver
  2. bson

Версия библиотеки должна совпадать (или, по крайней мере, быть совместимой) с вашей версией MongoDB, ее можно получить, запустив _ 1_ запрос в оболочке MongoDB

Для загрузки библиотек потребуется перезапуск JMeter

Дополнительная информация: Тестирование производительности MongoDB с помощью JMeter

person Dmitri T    schedule 27.01.2020
comment
Я обновил версию драйвера mongo-java и добавил, что соединение с библиотекой bson устанавливается, но при чтении и вставке возникает несанкционированная ошибка. - person nithin; 27.01.2020
comment
Код ответа: 500 Ответное сообщение: Исключение: com.mongodb.MongoCommandException: команда завершилась ошибкой 13 (неавторизовано): «Вставка команды требует аутентификации» на сервере xx.xxx.xx.xxx:27017. Полный ответ: {operationTime: {$ timestamp: {t: 1580126230, i: 1}}, ok: 0.0, errmsg: вставка команды требует аутентификации, код: 13, codeName: Unauthorized, $ clusterTime: {clusterTime: {$ timestamp : {t: 1580126230, i: 1}}, подпись: {hash: {$ binary: j7ylgmDSaPsZQRX / SwPTo4ZSTII =, $ type: 00}, keyId: {$ numberLong: 6785074748788310018}}}} - person nithin; 27.01.2020
comment
Вам необходимо создать экземпляр MongoCredential. как MongoCredential credential = MongoCredential.createCredential("mongoUser", "userDB", "password".toCharArray()); и передать его в строку инициализации MongoClient - person Dmitri T; 27.01.2020
comment
Я только так настраивал. - person nithin; 27.01.2020
comment
Если я настрою так, как это, MongoClient mongoClient = MongoClients.create (mongodb: // user: [email protected]: 27017 /? AuthSource = mysyt & ssl = true); - person nithin; 27.01.2020
comment
Ответное сообщение: Исключение: com.mongodb.MongoTimeoutException: время ожидания истекло через 30000 мс при ожидании подключения. Клиентское представление состояния кластера: {тип = НЕИЗВЕСТНО, серверы = [{адрес = xx.xxx.xx.xxx: 27017, тип = НЕИЗВЕСТНО, состояние = СОЕДИНЕНИЕ, исключение = {com.mongodb.MongoSocketWriteException: сообщение об отправке исключения}, вызвало by {javax.net.ssl.SSLHandshakeException: соединение удаленного хоста закрыто во время рукопожатия}, вызвано {java.io.EOFException: узел SSL завершил работу неправильно}}] - person nithin; 27.01.2020
comment
Вы задаете 10 разных вопросов, которые не имеют отношения к исходному вопросу, и я не могу дать ответы из-за того, что я оффтоп, и из-за ограничения поля комментариев, подумайте о том, чтобы задать новый вопрос и предоставить как можно больше информации, чтобы мы могли воспроизвести вашу проблему или хотя бы понять, о чем идет речь. Если мой ответ будет вам полезен, вы можете принять его - person Dmitri T; 27.01.2020