Jmeter 无法从 jmx 文件执行 Java 中的 Stream<JSON>

问题描述 投票:0回答:1
我正在编写一个程序来在TypeDB中执行CRUD操作

私有静态流 fetchAllUsers(TypeDBDriver 驱动程序,字符串 dbName){

Stream<JSON> answers = null; try (TypeDBSession session = driver.session(dbName, TypeDBSession.Type.DATA)) { try (TypeDBTransaction tx = session.transaction(TypeDBTransaction.Type.READ)) { String query = "match\r\n" + "$user isa user, has name \"Alex\";\r\n" + "\r\n" + "(subject: $user, action: $act) isa permission;\r\n" + "fetch\r\n" + "$act: name;\r\n" + ""; System.out.println("CP-4w3"); answers = tx.query().fetch(query); System.out.println("CP-5-..-"); answers.limit(100).forEach(json -> System.out.println("JSON: " + json.toString()));
我的问题:

    什么有效? 当我创建一个单独的类,并在启动数据库连接后创建一个对象来调用该类时,我能够获得 JSON 格式的响应
什么不起作用? 同一个类,我构建为 jar 并尝试从 jmx 文件调用。它之前就有效

answers.limit(100).forEach(json -> System.out.println("JSON: " + json.toString()));

我导入的库是

import com.vaticle.typedb.driver.api.*; import com.vaticle.typedb.driver.api.answer.ConceptMap; import com.vaticle.typedb.driver.TypeDB; import com.vaticle.typedb.driver.api.answer.JSON; import com.vaticle.typedb.driver.api.query.QueryManager; import com.vaticle.typedb.driver.common.exception.TypeDBDriverException; import com.vaticle.typeql.lang.TypeQL;
此后失败,Jmeter 没有任何响应。在 Jmeter Consle 中,我收到如下错误

2024-07-05 15:14:54,183 错误 o.a.j.u.BeanShellInterpreter:错误 调用 bsh 方法:eval 源文件:内联评估:``import com.jmeter.typedb.stresstest.StressTest_3;进口 com.vaticle.typedb.drive 。 。 。 '' : 方法调用 myObj.processRequests

2024-07-05 15:14:54,183 警告

o.a.j.p.j.s.BeanShellSampler:执行脚本时出现异常。 org.apache.jorphan.util.JMeterException:调用 bsh 方法时出错: eval 源文件:内联评估:``import com.jmeter.typedb.stresstest.StressTest_3;进口 com.vaticle.typedb.drive 。 。 。 '' : 方法调用 myObj.processRequests

在我的 Jmeter BeanSampler 中,下面是我编写脚本的方式

所有 jar 都放置在 JMETER /lib 文件夹中

import com.jmeter.typedb.stresstest.StressTest_3; String DB_NAME = "mhsh-stress-test1"; StressTest_3 myObj=new StressTest_3(); myObj.processRequests(); System.out.println("Setup Over.");
有人可以帮我解决这个问题吗?单独从 Jmeter jmx 文件调用时可能会出现什么问题?但是当我从课堂上打电话时有效
另请注意,即使是answers.count();抛出同样的错误。我无法发现发生了什么。

java jmeter jmeter-5.0 vaticle-typedb
1个回答
0
投票
    Beanshell != Java,它有不同的语法,最接近的匹配是 Java 5,它不支持
  1. 钻石运算符
  2. 从 JMeter 3.1 开始,由于性能原因,建议使用 JSR223 测试元素和 Groovy 语言进行脚本编写(Groovy 脚本可以编译和缓存,每次都会解释 Beanshell)
所以我非常确定,如果您切换到使用 Groovy 语言的 JSR223 Sampler,错误将会消失,因为在大多数情况下,有效的 Java 代码将是有效的 Groovy 代码,而且您的代码将运行得更快并且消耗更少的资源。更多信息:

Beanshell 与 JSR223 与 Java For JMeter:完全对决

© www.soinside.com 2019 - 2024. All rights reserved.