2015-11-17 37 views
2

我使用下面的脚本,它应该发送一个包含从文件中读取的一些数据的post请求。我想随机化这些请求,所以有时会发送“R1_BINFile_0”,有时候会发送“R2_Binfile_1”。出于某种原因,这是行不通的,它总是发出同样的请求

Gatling scala脚本随机场景

package computerdatabase 

import io.gatling.core.Predef._ 
import io.gatling.http.Predef._ 
import scala.concurrent.duration._ 

class MYSimulation extends Simulation { 

    val feeder = csv("CsvConfigFile.csv").circular 
    val PATH = sys.env("GATLING_HOME") 

    val httpConf = http 
    .baseURL("https://HOST") // Here is the root for all relative URLs 
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") 
    .acceptCharsetHeader("UTF-8") 
    .acceptLanguageHeader("en-US,en;q=0.5") 
    .acceptEncodingHeader("gzip, deflate") 
    .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0") 

    val headers_10 = Map("Content-Type" -> "application/octet-stream") 
    val rnd = new scala.util.Random 
    val scn = scenario("Scenario1") 
     .feed(feeder) 
     .doIfOrElse(rnd.nextInt(100) > 50) { 
     exec(http("R1") 
       .post("https://HOST/web/") 
       .headers(headers_10) 
       .body(RawFileBody(PATH + "\\user-files\\data\\" + "${R1_BinFile}" + "_0"))) 
     } { 
     .exec(http("R1") 
       .post("https://HOST/web/") 
       .headers(headers_10) 
       .body(RawFileBody(PATH + "\\user-files\\data\\" + "${R1_BinFile}" + "_1"))) 
     } 


    setUp(scn.inject(constantUsersPerSec(5) during (100 seconds)).protocols(httpConf)) 
} 

回答

3

的问题是,该参数doIfOrElse只执行一次,所以成为一个常数,同一个分支选择各一次。尝试传球而不是一个功能,这会为每个请求执行:

.doIfOrElse(_ => rnd.nextInt(100) > 50) 

你也可以使用randomSwitch代替doIfOrElse,这给了你的目标是什么了更清晰的语法。