#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, чтобы воспроизвести проблемы, чтобы их можно было исправить:
Комментарии:
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.