首页 > 解决方案 > 如何在 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" } }

标签: jmeterassertion

解决方案


我认为您无法使用“您已编写”的代码将单个采样器的多个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)
}

更多信息:您应该与 Groovy 一起使用的 8 个顶级 JMeter Java 类


推荐阅读