2013-03-22 4 views
11

Я пытаюсь модулизовать серию тестов производительности в Gatling.Сценарии модуляции для запуска в последовательности с использованием Gatling

Некоторые из тестов выполняют один и тот же начальный путь по страницам, поэтому я подумал, что могу разбить их на ряд сценариев, каждый из которых представляет собой серию общих действий, определенных в его собственном файле, а затем окончательный Определение моделирования, которое просто выполняло указанные сценарии один за другим.

Что мне тогда нужно для моего моделирования для последовательного запуска этих сценариев; но я могу только найти, как запускать их либо одновременно, либо с определенной задержкой между ними. Существует ли какой-либо параметр настройки Simulation для запуска определенных сценариев один за другим без указания произвольной задержки?

EDIT

В настоящее время, я следующий набор файлов:

homepageHeaders.scala

package advanced 

object homepageHeaders { 

    val homepage_headers_1 = Map(
     "Accept" -> """text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8""", 
     "If-Modified-Since" -> """Wed, 20 Mar 2013 15:36:31 +0000""", 
     "If-None-Match" -> """"1363793791"""" 
    ) 

} 

homepageChain.scala

package advanced 
import com.excilys.ebi.gatling.core.Predef._ 
import com.excilys.ebi.gatling.http.Predef._ 
import com.excilys.ebi.gatling.jdbc.Predef._ 
import akka.util.duration._ 
import homepageHeaders._ 


object homepageChain { 

    val homepageChain = 
     //Homepage 
     exec(http("homepage") 
        .get("/") 
        .headers(homepageHeaders.homepage_headers_1) 
      ) 

} 

pageHeaders.scala

package advanced 

object pageHeaders { 

    val page_headers_1 = Map(
      "Accept" -> """text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8""" 
    ) 

} 

pageChain.scala

package advanced 
import com.excilys.ebi.gatling.core.Predef._ 
import com.excilys.ebi.gatling.http.Predef._ 
import com.excilys.ebi.gatling.jdbc.Predef._ 
import akka.util.duration._ 
import pageHeaders._ 


object pageChain { 

    val pageChain = 
     //Page Menu 
     exec(http("page request") 
        .get("/page1") 
        .headers(pageHeaders.page_headers_1) 
      ) 

} 

pageSimulation.scala

package advanced 
import com.excilys.ebi.gatling.core.Predef._ 
import com.excilys.ebi.gatling.http.Predef._ 
import com.excilys.ebi.gatling.jdbc.Predef._ 
import homepageChain._ 
import pageChain._ 

class pageSimulation extends Simulation { 

    val urlBase = "http://www.mytestsite.com" 

    val httpConf = httpConfig 
      .baseURL(urlBase) 
      .acceptHeader("image/png,image/*;q=0.8,*/*;q=0.5") 
      .acceptEncodingHeader("gzip, deflate") 
      .acceptLanguageHeader("en-gb,en;q=0.5") 
      .userAgentHeader("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0") 

    val pageScenario = scenario("Bodycare Scenario") 
     .exec(homepageChain.homepageChain) 
     .exec(pageChain.pageChain) 


    setUp(
      homepageScenario.users(1).protocolConfig(httpConf) 
     ) 
} 

ошибка, что я получаю:

14:40:50.800 [ERROR] c.e.e.g.a.ZincCompiler$ - /Gatling/user-files/simulations/advanced/pageChain.scala:13: not found: value exec 
14:40:50.807 [ERROR] c.e.e.g.a.ZincCompiler$ -   exec(http("page request") 
14:40:50.808 [ERROR] c.e.e.g.a.ZincCompiler$ -  ^
14:40:53.988 [ERROR] c.e.e.g.a.ZincCompiler$ - /Gatling/user-files/simulations/advanced/homepageChain.scala:13: not found: value exec 
14:40:53.989 [ERROR] c.e.e.g.a.ZincCompiler$ -   exec(http("homepage") 
14:40:53.989 [ERROR] c.e.e.g.a.ZincCompiler$ -  ^
14:41:17.274 [ERROR] c.e.e.g.a.ZincCompiler$ - two errors found 
Exception in thread "main" Compilation failed 

Очевидно, что я что-то не хватает моего определение, но я просто не понимаю, что это такое

ответ

17

Вы можете создавать цепочки, а не сценарии.

Например:

val login = exec(...)... 
val foo = exec(...)... 
val bar = exec(...)... 
val scn1 = scenario("Scenario1").exec(login).exec(foo) 
val scn2 = scenario("Scenario2").exec(login).exec(bar) 

Ясно?

+0

Я могу видеть общий принцип, но борюсь чтобы реализовать его на практике - мой недостаток java/scala действительно начинает ударяться домой –

+0

На данный момент это больше проблема DSL Gatling (возможно, документ), чем Scala. Вот пример: https://github.com/excilys/gatling-hands-on/blob/master/gatling-hands-on-demo/src/test/scala/computerdatabase/Step10.scala –

+0

Что касается вашего редактирования: вам не хватает импорта (они были здесь наверняка, если вы использовали Recorder). Здесь, отсутствующий для компиляции, является bootstrap, но вы рано или поздно попадете в другие. Пожалуйста, ознакомьтесь с образцом, который я предоставил, и добавьте все из них. –

3

Благодаря Стефану он также дал мне решение создать объект из нескольких цепей и передать его сценарию.

val login = exec(...)... 
    val foo = exec(...)... 
    val bar = exec(...)... 
    val scn_inpute = Seq(login, foo, bar) 
    val scn1 = scenario("Scenario1").exec(scn_inpute) 
10

Вы можете каскадом сценарии так, что они выполняют в следующей последовательности:

val allScenarios = scenario1.exec(scenario2).exec(scenario3) 
+0

О, боже, благословите вас, не уверен, почему я не нашел это в документах. – cvakiitho

+0

Я пытаюсь выяснить, как использовать импорт для организации моего проекта gatling. Решение здесь кажется потерянным, поскольку связь github нарушена. Еще больше проницательности? Мой вопрос здесь: http://stackoverflow.com/questions/34540818/how-can-i-use-gatling-code-from-another-simulation – digidigo

1

Другой вариант может выглядеть так:

object GetAllRunDetails { 
    val getAllRunDetails = exec(....) 
} 


object GetRunIdDetails{ 
    val getRunIdDetails = exec(....) 
} 

val scn1 = scenario("Scenario 1") 
    .exec(GetAllRunDetails.getAllRunDetails) 

val scn2 = scenario("Scenario 2") 
    .exec(GetRunIdDetails.getRunIdDetails) 


setUp(scn1.inject(atOnceUsers(1)), 
     scn2.inject(atOnceUsers(1))); 
+0

@PiotrBoho Ни в коем случае. Я использую его каждый день, и он отлично работает. Проверьте их официальную документацию. –

+0

@PiotrBoho Посмотрите здесь: http://gatling.io/docs/current/advanced_tutorial/ –

+0

Хорошо, он скомпилирует. Просто исправьте ответ, покажите, что весь этот код находится в одном классе, который наследует от Simulation, иначе exec() не будет компилироваться. Кстати, вопрос заключается в модуляции, поэтому GetAllRunDetails и GetRunIdDetails должны быть определены в отдельных файлах, а затем вам нужно показать, откуда происходит exec(). –

Смежные вопросы