我有一个问题,我希望有人能帮助我。我是相当新的编码和加特林,所以我不知道如何进行。
我正在使用Gatling(和Scala一起)创建一个包含两个API调用的性能测试场景。
1.获取信息
1.发送信息
我正在存储GetInformation响应中的一些值,以便可以在SendInformation请求的正文中使用它们。问题是GetInformation响应中的一些信息在包含在SendInformation的正文中之前需要编辑/删除。
GetInformation回应的摘录:
{
"parameter": [
{
"name": "ResponseFromGetInfo",
"type": "document",
"total": 3,
"entry": [
{
"fullUrl": "urn:uuid:4ea859d0-daa4-4d2a-8fbc-1571cd7dfdb0",
"resource": {
"resourceType": "Composition"
}
},
{
"fullUrl": "urn:uuid:1b10ed79-333b-4838-93a5-a40d22508f0a",
"resource": {
"resourceType": "Practitioner"
}
},
{
"fullUrl": "urn:uuid:650b8e7a-2cfc-4b0b-a23b-a85d1bf782de",
"resource": {
"resourceType": "Dispense"
}
}
]
}
]
}
我想要的是将列表存储在“entry”中,并删除resourceType =“Dispense”的条目,这样我就可以在SendInformation的正文中使用它。
如果条目列表始终具有相同的条目数和顺序,这是可以接受的,但事实并非如此。条目数可以是几百个,条目顺序也可以变化。条目数等于GetInformation响应中包含的“total”值。
我想了几种方法来解决这个问题,但现在我被卡住了。一些替代方案:
1.使用.check(jsonPath("$.parameter[0].entry").saveAs("entryList"))
提取整个“entry”列表,然后遍历列表以删除resourceTypes =“Dispense”的条目。但是我不知道如何遍历io.gatling.core.session.SessionAttribute类型的值,或者如果这是可能的话。如果我可以遍历条目列表并检查parameter[0].entry[0].resourceType = "Dispense"
是否为真,如果语句为真则删除条目,那就太好了。
1.我也在考虑我是否可以以某种方式使用StringBuilder。也许我可以用.check(parameter[0].entry[X].resourceType != dispense
检查一个条目,如果是,就把它附加到stringBuilder中。
有没有人知道我怎么能做到这一点?要么通过我列出的替代方案之一,要么以不同的方式?所有的帮助都很感激:)
所以最后它可能会看起来像这样:
val scn = scenario("getAndSendInformation")
.exec(http("getInformation")
.post("/Information/$getInformation")
.body(ElFileBody("bodies/getInformtion.json"))
// I can save total, så I know the total number of entries in the entry list
.check(jsonPath("$.parameter[0].total").saveAs("total"))
//Store entire entry list
.check(jsonPath("$.parameter[0].entry").saveAs("entryList"))
//Or store all entries separatly and check afterwards who have resourceType = "dispense"? Not sure how to do this..
.check(jsonPath("$.parameter[0].entry[0]").saveAs("entry_0"))
.check(jsonPath("$.parameter[0].entry[1]").saveAs("entry_1"))
//...
.check(jsonPath("$.parameter[0].entry[X]").saveAs("entry_X"))
)
//Alternativ 1
.repeat("${total}", "counter") {
exec(session => {
//Do some magic here
//Check if session("parameter[0]_entry[counter].resourceType") = "Dispense" {
// if yes, remove entry from entry list}
session})}
//Alternativ 2
val entryString = new StringBuilder("")
.repeat("${total}", "counter") {
exec(session => {
//Do some magic here
//Check if session("parameter[0]_entry[counter].resourceType") != "Dispense" {
// if yes, add to StringBuilder}
// entryString.append(session("parameter[0]_entry[counter]").as[String] + ", ")
session})}
.exec(http("sendInformation")
.post("/Information/$sendInformation")
.body(ElFileBody("bodies/sendInformationRequest.json")))
1条答案
按热度按时间waxmsbnn1#
我对编码很陌生,我正在使用Gatling(使用Scala)
使用Java的Gatling对您来说可能是一个更容易的解决方案。
参数[0].entry”).另存为(“条目列表”)
这将捕获一个字符串,而不是列表。为了能够迭代,必须使用
ofXXX/ofType[]
,请参见https://gatling.io/docs/gatling/reference/current/core/check/#jsonpath然后,为了生成下一个请求的主体,可以考虑使用模板引擎,例如
PebbleBody
(https://gatling.io/docs/gatling/reference/current/http/request/#pebblestringbody),或者实际上使用StringBody
和StringBuilder的函数。