gatling - Gatling:问题将数据保存到会话
问题描述
我正在更新一些使用 Gatling 来测试性能的性能测试,当用户创建一个包含多个类的作业而不是我们当前测试的一个类时。
我对 Scala 和 Gatling 完全陌生,但我想,我已经设法弄清楚了几乎所有事情。我只有一个地方会引起问题并使我感到困惑。
以下代码获取给定班级中的所有学生(我们称他们为部分)。这是与现有测试完全一样的现有代码,但由于某种原因,新测试总是抛出一个listOfStudents
不存在的错误。
抛出的错误是'hook-81' crashed with 'java.util.NoSuchElementException: key not found: listOfStudents', forwarding to the next one
val getListOfStudents = http("Get list of students")
.get(BASE_URL + "/v2/sections/${sectionRefId}/rosters")
.headers(getHeaderMap)
.check(status.is(Ok),
jsonPath("$.students[*].refId").findAll.transform(_.mkString(",")).saveAs("listOfStudents"))
我发现了这个问题,Gatling not storage value in session,它谈到了 session 是不可变的,但我认为我没有任何地方会生成新的 session,除非在块的末尾,所以它不应该是问题。
原始测试使用以下代码来获取学生列表,并且在这种情况下正确保存了该值:
val createEdCtsAssignment = repeat(4) {
exec(getTeacherSectionId)
.exec(getListOfStudents)
.exec(session => session.set("assignmentType", "PROGRAM_ASSESSMENT"))
.exec(createTeacherAssignment)
}
这是它不起作用的代码:
val createMultiSectionEdCtsAssignment = repeat(2) {
exec(getTeacherMultiSectionSectionId)
.exec(session => session.set("listOfStudentsBySection", ""))
.foreach(session => session("listOfSectionRefIds").as[String].split(',').toSeq, "sectionRefId") {
exec(session => {
exec(getListOfStudents)
session.set("listOfStudentsBySection", collectStudents(session))
})
}
.exec(session => session.set("assignmentType", "PROGRAM_ASSESSMENT"))
.exec(createMultiSectionTeacherAssignment)
}
添加大量println()
s 后,我发现错误发生在session.set("listOfStudentsBySection", collectStudents(session))
. 在collectStudents
失败发生在val studentsList = session("listOfStudents").as[String]
。这与调用时完全相同的代码行createTeacherAssignment
。这两个函数都存在于它们自己的文件中,但即使尝试在生成相同的错误listOfStudents
后立即打印值。exec(getListOfStudents)
它们之间唯一真正的变化是foreach
在非工作版本中存在循环。
(我们的 Gatling 版本是 2.2.5)
我已经尝试了我能找到或想到的一切,但没有成功。有没有人有任何想法?
解决方案
exec(session => {
exec(getListOfStudents)
session.set("listOfStudentsBySection", collectStudents(session))
})
这是完全错误的。如文档中所述,您正在创建一个不执行任何操作的建筑物。
这是对的:
exec(getListOfStudents)
.exec { session =>
session.set("listOfStudentsBySection", collectStudents(session))
}
然后,加特林 2 已经死了一年!请升级为现代版本。当前版本是 3.6.1,3.7.0 将在几周后发布。
推荐阅读
- css - 破碎位置:野生动物园中的绝对位置
- kotlin - 强制 flyway db 迁移在每次新迁移时都有测试数据
- sql-server - 较低兼容性级别的 string_split 函数的替代方案
- apache-kafka - 我可以在 PrestoDB 中设置消费者组参数吗?
- java - Apache POI org.apache.poi.xssf.streaming.SXSSFWorkbook 生成缺少标题名称的 Excel 报告
- javascript - vue - 如何将回调传递给 vuex 操作
- java - 如何使用 maven 命令在 Spring 应用程序之外执行 SQL 文件?
- r - Google Cloud VM - googleAuthR 库没有调用错误
- android - 以下注解处理器不是增量的:kotlin-compiler-embeddable
- django - 子对象的Django链过滤器