jmeter - Jmeter-仅在请求或断言失败时打印日志
问题描述
以下是 JSR223 断言 groovy 代码,我们仅在请求或断言失败或两者都失败时尝试记录。
import groovy.json.JsonSlurper
String jsonString = SampleResult.getResponseDataAsString();
String StartProcessResponseCode= SampleResult.getResponseCode();
def tokenJSON = new JsonSlurper().parseText(jsonString)
if (!SampleResult.isSuccessful()) {
log.info("Failed Response Data---------"+SampleResult.getResponseDataAsString())
}
String status= tokenJSON.status
assert StartProcessResponseCode.equals("200")
assert "SUCCESS".equals(status)
for (a in SampleResult.getAssertionResults()) {
if (a.isError() || a.isFailure()) {
//log.error(Thread.currentThread().getName()+": "+SampleLabel+": Assertion
failed for response: " + new String((byte[]) ResponseData));
log.info("Failed Assertion Message---------------------"+AssertionResult.getFailureMessage());
log.info("Failed Response Data---------------------"+SampleResult.getResponseDataAsString())
}
}
但在这种情况下,错误不会记录任何断言失败
解决方案
首先,如果您想捕获有关断言的所有信息,则应改为使用JSR223 侦听器,根据JMeter 测试元素执行顺序侦听器在断言之后执行,因此它保证您在检查之前将应用所有断言。
关于问题本身,我的期望是您的断言逻辑在抛出未处理的AssertionError并且您的测试根本无法继续的assert
语句上失败
请参见以下示例:
log.info('Assertion Start')
assert 'foo'.equals('bar')
log.info('Assertion Ended')
根据您实现的内容,您应该在jmeter.logAssertion Ended
文件中看到消息,但是它永远不会发生,因为失败assert
如果您修改代码以捕获 AssertionError,例如:
log.info('Assertion Start')
try {
assert 'foo'.equals('bar') : "Failure here"
}
catch (AssertionError e) {
log.info(e.getMessage())
}
log.info('Assertion Ended')
您将看到AssertionError 消息和Assertion Ended
语句
有关在 JMeter 中使用 JSR223 断言的更多信息,请参阅Scripting JMeter Assertions in Groovy - A Tutorial
推荐阅读
- c# - C# Linq 使用动态列名检查重复值
- python - 为什么相同的 SQLite 写入处理时间因 Python 执行线程而异?
- lua - 使用 Pandoc 将 Latex 转换为 HTML,如何将 Lua 脚本输出包含到转换中?
- kata-containers - 在 kata 容器中实现 usbip
- javascript - 为什么 Jest 设置“transformIgnorePatterns”会导致 React 应用程序中的范围 CSS 导入出现问题?
- docker - 如何在集成测试中等待某些操作
- qt - Qt - 无法读取特征的描述符 - BLE
- firebase - Firebase 和 Flutter - 从 Firebase 数据生成小部件
- c - 循环打印输入值以及正确的输出
- java - 在 Spring Cloud Gateway 中获取真实的客户端 IP 地址