我在文件中有一个带有Json请求主体的文件。 我想使用constantUsersPerSec(..)对每秒发送一定数量请求的Web进行基准测试。
但是,每次发送请求时,我都希望从请求列表中获取(随机或循环,我不在乎)。
我无法弄清楚如何用Gatling做到这一点。使用以下代码,随机选择一次请求,并反复发送相同的请求。这不是我想要的
我的代码:
class GcStressManyRequests extends Simulation{
...
...
val httpProtocol: HttpProtocolBuilder = http
.baseURL(baseUrl)
.contentTypeHeader(contentType)
var requests = Source.fromResource("bodies/requests.txt").getLines().toIndexedSeq
val random = new Random(System.currentTimeMillis())
val scn: ScenarioBuilder = scenario("AE prod requests")
.exec (
http("bid_request")
.post(endpoint)
.body(StringBody(requests(random.nextInt(requests.length))))
.asJSON
.check(status.is(200)))
setUp(
scn.inject(
constantUsersPerSec(400) during (1 minutes),
).protocols(httpProtocol))
}
答案 0 :(得分:2)
我发现您在文本文件 bodies.txt 中有您的请求。对于您的任务,我会使用Feeder(请参阅步骤03)。使用送纸器,您可以从项目列表中检索随机项目并在调用中使用它。您必须采取的步骤才能使其发挥作用:
创建一个馈线:
val random_request = csv("bodies.csv").random
编辑方案:
val scn: ScenarioBuilder = scenario("AE prod requests")
.feed(random_request) //Puts a random request in your session.
.exec (
http("bid_request")
.post(endpoint)
.body(StringBody(${request})) //Retrieve the request from current session.
.asJSON
.check(status.is(200)))
setUp(
scn.inject(
constantUsersPerSec(400) during (1 minutes),
).protocols(httpProtocol))
答案 1 :(得分:1)
步骤1:在我的情况下创建输入它是堆栈。以下只是一种方法,您可以使用自己的实现
var jobsQue: Stack[InputData] = GenerateInput.creatJobsCollection()
第2步:使用
val execScn = scenario("Requests").group("Groups") {
asLongAs(session => jobsQue.length > 0) { exec { session =>
var length = jobsQue.length //Whatever
var reportElement = jobsQue.pop(); //POP it } } }
希望这足以让你继续前进。
答案 2 :(得分:1)
为了完整起见,我想分享Domingos Creado关于Gatling Google Groups的答案。
val scn: ScenarioBuilder = scenario("AE prod requests")
.exec(session => {
val session2 = session.set("therequest", requests(random.nextInt(requests.length)))
session2
})
.exec (
http("bid_request")
.post(endpoint)
.body(StringBody("${therequest}"))
.asJSON
.check(status.is(200)))