multithreading - Jmeter tearDown Thread Group 无法访问之前使用过的线程组文件
问题描述
我有一个包含多个线程组的测试计划,这些线程组将摘要报告结果写入服务器中托管的同一个 csv 文件中,使用网络驱动器(z:) 并更改 jmeter.properties -> resultcollector.action_if_file_exists=APPEND 可以正常工作。
最后,我有一个拆解线程组,它将 csv 数据插入 sql 服务器(之前使用的网络驱动器托管在此服务器的 c:\jmeter\results.csv 中),然后删除 csv。情况是,当我完整运行测试计划时,我总是遇到此错误:“无法批量加载,因为无法打开文件“c:\jmeter\results.csv”。操作系统错误代码 32”
奇怪的是,如果我单独启动 tearDown 线程组它工作正常,它会在 sql server 中进行批量插入,然后删除 de csv。
我 2 天前开始使用 Jmeter,所以我确定我误解了一些东西:S
解决方案
发生这种情况是因为摘要报告(以及其他侦听器)保持文件打开直到测试结束,因此您需要以某种方式触发此“关闭”事件。
从 JMeter 3.1 开始,您应该使用 JSR223 测试元素和 Groovy 语言进行脚本编写,因此将此 Beanshell PostProcessor 替换为JSR223 PostProcessor并使用以下代码:
import org.apache.jmeter.reporters.ResultCollector
import org.apache.jorphan.collections.SearchByClass
def engine = engine = ctx.getEngine()
def test = engine.getClass().getDeclaredField('test')
test.setAccessible(true)
def testPlanTree = test.get(engine)
SearchByClass<ResultCollector> listenerSearch = new SearchByClass<>(ResultCollector.class)
testPlanTree.traverse(listenerSearch)
Collection<ResultCollector> listeners = listenerSearch.getSearchResults()
listeners.each { listener ->
def files = listener.files
files.each { file ->
file.value.pw.close()
}
}
new File('z:/result.csv').delete()
有关 JMeter 中 Groovy 脚本的更多信息:Apache Groovy - 为什么以及如何使用它
推荐阅读
- r - R错误:“选择”功能错误:选择(-c())
- excel - Excel 停止运行受保护的工作簿,如果解锁它运行良好
- java - 如何将依赖项注入 Jackson Custom 反序列化器
- oauth-2.0 - Ajex 无需登录 Active Directory 即可访问 Protect API
- python - 如何在 Python Cassandra Driver 客户端中禁用控制台日志记录?
- json - BigQuery 解析具有特殊字符的 json 子列
- python - ucrtbase.dll 导致 Qgis 崩溃
- ruby-on-rails - 我应该担心纱线警告吗
- wpf - 如何在不同的厚度上为每个边框方向设置边框颜色?
- javascript - 如何将外部 javascript 库文件添加到 Angular 版本 7 中的特定组件