как загружать больше запросов в секунду в каратэ Гатлинг

#karate

#каратэ

Вопрос:

Я пытаюсь повторно использовать сценарии karate и выполнять нагрузочное тестирование с использованием gatling. Определенный сценарий заключается в загрузке постоянных 50 пользователей в секунду в течение 10 секунд. (Для нагрузочного теста 500 пользователей) Однако количество запросов в секунду не превышает 20 запросов в секунду в отчете gatling. Пожалуйста, дайте мне знать, если я делаю что-то не так. ExampleTest.java код, который выполняет сценарии Каратэ

 //package examples;

import com.intuit.karate.Results;
import com.intuit.karate.Runner;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import net.masterthought.cucumber.Configuration;
import net.masterthought.cucumber.ReportBuilder;
import org.apache.commons.io.FileUtils;

class ExamplesTest {
    
    @Test
    void testParallel() {
        //System.setProperty("karate.env", "demo"); // ensure reset if other tests (e.g. mock) had set env in CI
        Results results = Runner.path("classpath:examples").tags("~@ignore").parallel(10);
        generateReport(results.getReportDir());
        assertEquals(0, results.getFailCount(), results.getErrorMessages());        
    }
    
    public static void generateReport(String karateOutputPath) {        
        Collection<File> jsonFiles = FileUtils.listFiles(new File(karateOutputPath), new String[] {"json"}, true);
        List<String> jsonPaths = new ArrayList<String>(jsonFiles.size());
        jsonFiles.forEach(file -> jsonPaths.add(file.getAbsolutePath()));
        Configuration config = new Configuration(new File("target"), "demo");
        ReportBuilder reportBuilder = new ReportBuilder(jsonPaths, config);
        reportBuilder.generateReports();        
    }
    
}

 

Код Scala для определения сценариев нагрузочного тестирования.

 package perf

import com.intuit.karate.gatling.PreDef._
import io.gatling.core.Predef._
import scala.concurrent.duration._

class KarateSimulate extends Simulation {
    

    val protocol = karateProtocol(
    "/v2/" -> Nil,
    "/v2/" -> pauseFor("get" -> 0, "post" -> 25)
    )
    val userfeeder = csv("data/Token.csv").circular

    val getScores = scenario("Get Scores for Students").feed(userfeeder).exec(karateFeature("classpath:examples/scores/student.feature"))

    setUp(
        getScores.inject(constantUsersPerSec(50) during (10 seconds)).protocols(protocol)
    )   
}
 

введите описание изображения здесь

Ответ №1:

Мы обновили документы (в develop ветке) советами о том, как при необходимости увеличить размер пула потоков: https://github.com/intuit/karate/tree/develop/karate-gatling#increasing-thread-pool-size

Добавьте вызываемый файл gatling-akka.conf в корень пути к классу (обычно src/test/resources ). Вот пример:

 akka {
  actor {
    default-dispatcher {
      type = Dispatcher
      executor = "thread-pool-executor"
      thread-pool-executor {
        fixed-pool-size = 100
      }
      throughput = 1
    }
  }
}
 

Поскольку мы недавно внесли некоторые исправления, пожалуйста, попробуйте выполнить сборку из исходного кода, если вышеуказанное не работает для 0.9.6.RC4, это легко, вот инструкции: https://github.com/intuit/karate/wiki/Developer-Guide

Если это не сработает, важно, чтобы вы следовали этому процессу, чтобы мы могли повторить: https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

Пожалуйста, смотрите эти ссылки ниже для получения хороших примеров того, как другие работали с командой проекта Karate, чтобы воспроизвести проблемы, чтобы их можно было исправить:

https://github.com/intuit/karate/issues/1668

https://github.com/intuit/karate/issues/845

Комментарии:

1. Спасибо, Питер, попробую и обновлю результат.

2. У меня есть это в моем файле функций для получения данных из файла фидера. And header Authorization = 'Bearer' karate.get('__gatling.accessToken') теперь после добавления файла .conf похоже, что токен доступа не загружается из userFeeder, как указано в коде scala выше.. запрос get имеет следующее значение Authorization: Bearernull

3. @VijayReddy это не имеет смысла. извините. время для вас, чтобы следовать этому процессу: github.com/intuit/karate/wiki/How-to-Submit-an-Issue

4. Проблема, указанная в комментарии, была решена путем обновления файла pom с правильными зависимостями и успешно смогла отправлять 100 запросов в секунду. Спасибо @PeterThomas

5. @vdrulerz Проблема здесь заключалась в том, что при загрузке более 100 пользователей должно быть отправлено 100 запросов, но этого не произошло, после добавления кода, предложенного Питером, и внесения некоторых незначительных изменений в POM, он заработал. С последней версией Karate не уверен, требуются ли какие-либо изменения для зависимостей pom.