我是加特林和斯卡拉的新手。我正在尝试做以下事情:-
test.json:
[
{
"code": "AML",
"data": "aaasdfgghh"
},
{
"code": "ABC",
"data": "aaasdfgghh"
},
{
"code": "SDF",
"data": "aaasdfgghh"
}
]
现在,我想循环读取此json键/值。目前,我正在这样做:
请求正文和Feeder:-
val jsonFileFeederFundsDoc: SourceFeederBuilder[Any] =
jsonFile("test.json").circular
//Saves locally and to S3
val upload_fund_s3: HttpRequestBuilder =
http("upload Fund docs Locally")
.post(onboarding_url_perf + "/document/passfort")
.headers(basic_headers)
.headers(auth_headers)
.body(StringBody(
"""{
"code": "${code}",
"data": "${data}"
}"""
)).asJson
.check(status.is(200))
.check(jsonPath("$.id").saveAs("id"))
我的情况是:-
val newFundScenario: ScenarioBuilder = scenario("Company Fund Scenarios exists")
.exec(TokenScenario.getCompanyUsersGwtToken).exitHereIfFailed
.exec(CompanyProfileRequest.check_company_exists).exitHereIfFailed
.doIf("${COMPANY_NOT_FOUND}") {
exec(CompanyProfileRequest.create_company_fund_profile).exitHereIfFailed
}
.feed(UploadFundDocsInPassfort.jsonFileFeederFundsDoc)
.exec(UploadFundDocsInPassfort.upload_fund_s3).exitHereIfFailed
.exec(UploadFundDocsInPassfort.upload_fund_passfort).exitHereIfFailed
.exec(OfficersRequest.create_director).exitHereIfFailed
我的测试模拟是:
class TestCompanySimulation extends Simulation {
private val generalCompanyTestCases = GeneralCompanyScenarios
.newFundScenario
.inject(rampUsers(Integer.getInteger("users", 1)) during
(Integer.getInteger("ramp", 1) minutes))
setUp(
generalCompanyTestCases.protocols(httpConf),
)
}
现在的问题是,对于一个用户,我想在我的newFundScenario中循环读取数据,但在这种情况下,它只是从json文件中选择第一个值。
类似
foreach(read data from json file){
//Pass Data in run time and execute
.exec(UploadFundDocsInPassfort.upload_fund_s3).exitHereIfFailed
.exec(UploadFundDocsInPassfort.upload_fund_passfort).exitHereIfFailed
}
非常感谢您的帮助。
关于, Vikram Pathania
答案 0 :(得分:1)
如果要让每个用户在Feeder中循环,则需要在循环中包含feed命令。例如,如果您要发出5个请求...
val upload_fund_s3: ChainBuilder =
repeat(5) {
feed(jsonFileFeederFundsDoc)
.exec(
http("upload Fund docs Locally")
.post(onboarding_url_perf + "/document/passfort")
.headers(basic_headers)
.headers(auth_headers)
.body(StringBody("""{"code": "${code}", "data": "${data}"}""")).asJson
.check(status.is(200))
.check(jsonPath("$.id").saveAs("id"))
)
} //include all the actions you want in the loop
,然后从方案定义中删除提要。当您同时定义了Feeder和使用Feeder的操作时,这样也更容易理解。
请注意,如果您开始在模拟中运行多个用户,他们将全部从同一供稿器中提取值。您已指定.circular,因此它不会用完值,但是每个用户可能会发出不同的请求(可能很好,具体取决于您的建模对象)
如果您的列表很小,您也可以考虑仅拥有一个Map并将其推送到会话中,以使用.foreach进行迭代