jmeter - 如何在 JMeter 中以 CSV 格式保存多个断言失败结果
问题描述
我在 JSR223 断言中编写了脚本,并希望以 CSV 格式保存多个断言失败结果。如何在 JMeter 中实现这一点?
下面是脚本
def responseJson = new groovy.json.JsonSlurper().parse(prev.getResponseData())
def lastName = responseJson.data[0].last_name
def email = responseJson.data[0].email
def firstName = responseJson.data[0].first_name
if (email != 'test') {
def subResult = new org.apache.jmeter.assertions.AssertionResult()
subResult.setFailure(true)
subResult.setFailureMessage("Incorrect email value, Correct value is-->" + email)
prev.addAssertionResult(subResult)
}
if (lastName != 'Lawson') {
def subResult = new org.apache.jmeter.assertions.AssertionResult()
subResult.setFailure(true)
subResult.setFailureMessage("Incorrect last name value, Correct value is-->" + lastName)
prev.addAssertionResult(subResult)
}
if (firstName != 'test') {
def subResult = new org.apache.jmeter.assertions.AssertionResult()
subResult.setFailure(true)
subResult.setFailureMessage("Incorrect first name value, Correct value is-->" + firstName)
prev.addAssertionResult(subResult)
}
else {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("correct value")
prev.addAssertionResult(AssertionResult)
}
if (prev.getAssertionResults().findAll { result -> result.isFailure() }.size() > 0) {
prev.setSuccessful(false)
}
下面是 JSON:
{ "per_page": 6, "total": 12, "data": [ { "last_name": "Lawson", "id": 7, "avatar": "https://reqres.in/img/faces/7-image.jpg", "first_name": "Michael", "email": "michael.lawson@reqres.in" }, { "last_name": "Ferguson", "id": 8, "avatar": "https://reqres.in/img/faces/8-image.jpg", "first_name": "Lindsay", "email": "lindsay.ferguson@reqres.in" }, { "last_name": "Funke", "id": 9, "avatar": "https://reqres.in/img/faces/9-image.jpg", "first_name": "Tobias", "email": "tobias.funke@reqres.in" }, { "last_name": "Fields", "id": 10, "avatar": "https://reqres.in/img/faces/10-image.jpg", "first_name": "Byron", "email": "byron.fields@reqres.in" }, { "last_name": "Edwards", "id": 11, "avatar": "https://reqres.in/img/faces/11-image.jpg", "first_name": "George", "email": "george.edwards@reqres.in" }, { "last_name": "Howell", "id": 12, "avatar": "https://reqres.in/img/faces/12-image.jpg", "first_name": "Rachel", "email": "rachel.howell@reqres.in" } ], "page": 2, "total_pages": 2, "support": { "text": "To keep ReqRes free, contributions towards server costs are appreciated!", "url": "https://reqres.in/#support-heading" } }
解决方案
我认为您无法使用“您已编写”的代码将单个采样器的多个AssertionResults存储在.jtl 结果文件中,我的期望是您将需要迁移到SampleResult.addSubResult()函数,一些喜欢:
def responseJson = new groovy.json.JsonSlurper().parse(prev.getResponseData())
def lastName = responseJson.data[0].last_name
def email = responseJson.data[0].email
if (email != 'test') {
def subResult = new org.apache.jmeter.samplers.SampleResult()
subResult.setSuccessful(false)
subResult.setResponseMessage("Incorrect email value" + email)
prev.addSubResult(subResult)
}
if (lastName != 'test') {
def subResult = new org.apache.jmeter.samplers.SampleResult()
subResult.setSuccessful(false)
subResult.setResponseMessage("Incorrect lastName value" + email)
prev.addSubResult(subResult)
} else {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("correct value")
prev.addAssertionResult(AssertionResult)
}
if (prev.getSubResults().findAll { result -> !result.isSuccessful() }.size() > 0) {
prev.setSuccessful(false)
}
推荐阅读
- pandas - 删除Python中数字列表中的最后一个标点符号
- react-native - 在邮递员中正常工作时在本机反应中获取 api 的问题
- oop - 隐藏字段时如何避免instanceof
- java - 使用 JAX-RS 同时使用 Text/plain 和 Application/json?
- c# - dotnet.exe 与 w3wp.exe:有什么区别?
- javascript - Javasript 函数更改一个 HTML 类,渲染,然后继续运行其余的函数代码
- ios - 如何在 watchOS 和 iOS 的后台运行函数?
- powershell - 函数管道如何跳过进程块?类似于在 foreach 循环中继续
- java - MongoTemplate 聚合操作后不返回结果
- sql-server - SQL Server 中的自定义排序依据