在 jmeter 中 运行 beanshell 脚本时无法导入 com.paytm.merchant.CheckSumServiceHelper
Not able to import com.paytm.merchant.CheckSumServiceHelper when running beanshell script in jmeter
我是 Jmeter 的 JSR223 预处理器的新手。我们刚刚将 Paytm 的支付网关集成到我们的产品中,我们不得不 运行 使用 Jmeter 进行负载测试。我们必须使用一组值生成校验和,然后将其注入到我们的 Json 有效载荷中。我正在使用 Java Beanshell 来执行代码。我已将 jar 文件 available here 添加到我的 bin 目录中,并在开始测试之前将其添加到我的 class 路径中。这是我的代码的样子:
import com.paytm.merchant.CheckSumServiceHelper;
com.paytm.merchant.CheckSumServiceHelper checkSumServiceHelper = com.paytm.merchant.CheckSumServiceHelper.getCheckSumServiceHelper();
TreeMap<String,String> parameters = new TreeMap<String,String>();
String merchantKey = "xxxxxxxxxxxxxxxxx";
parameters.put("MID", "xxxxxxxxxxxxxxxxxxxxxx");
parameters.put("ORDERID", "${orderId}");
parameters.put("TXNID", "20200113111212800110168201701179744");
parameters.put("TXN_AMOUNT", "10.01");
parameters.put("PAYMENTMODE", "DC");
parameters.put("CURRENCY", "INR");
parameters.put("TXNDATE", "2020-01-13 13:59:03.0");
parameters.put("STATUS", "TXN_SUCCESS");
parameters.put("RESPCODE", "01");
parameters.put("RESPMSG", "Txn Success");
parameters.put("GATEWAYNAME", "HDFC");
parameters.put("BANKTXNID", "777001911059826");
parameters.put("BANKNAME", "JPMORGAN CHASE BANK");
parameters.put("BANKNAME", "JPMORGAN CHASE BANK");
String checkSum = checkSumServiceHelper.genrateCheckSumGAE(merchantKey, parameters);
vars.put("checkSum", checkSum)
这是我得到的错误结果:
javax.script.ScriptException: Sourced file: inline evaluation of: ``import com.paytm.merchant.CheckSumServiceHelper; com.paytm.merchant.CheckSumSer . . . '' : Typed variable declaration : Class: com.paytm.merchant.CheckSumServiceHelper not found in namespace : at Line: 3 : in file: inline evaluation of: ``import com.paytm.merchant.CheckSumServiceHelper; com.paytm.merchant.CheckSumSer . . . '' : com .paytm .merchant .CheckSumServiceHelper
in inline evaluation of: ``import com.paytm.merchant.CheckSumServiceHelper; com.paytm.merchant.CheckSumSer . . . '' at line number 3
at bsh.engine.BshScriptEngine.evalSource(BshScriptEngine.java:93) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.engine.BshScriptEngine.eval(BshScriptEngine.java:46) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) ~[java.scripting:?]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:225) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44) [ApacheJMeter_components.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:935) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:537) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137]
at java.lang.Thread.run(Thread.java:830) [?:?]
如果您能提供解决此错误的任何帮助,我们将不胜感激。这可能是一个愚蠢的问题,但我对此并不陌生,所以请帮忙!! :)
编辑:
我现在使用 groovy 语法来执行此操作。我无法使用我的调试采样器在“查看结果树”中查看我的校验和变量,但我可以在控制台中看到它。该值在控制台中正确显示。但是变量没有被导出。
import com.paytm.pg.merchant.CheckSumServiceHelper;
com.paytm.pg.merchant.CheckSumServiceHelper checkSumServiceHelper = com.paytm.pg.merchant.CheckSumServiceHelper.getCheckSumServiceHelper();
TreeMap parameters = new TreeMap();
String merchantKey = "xxxxxxxxxxxxxxxxx";
parameters.put("MID", "xxxxxxxxxxxxxxxxxxxxxx");
parameters.put("ORDERID", "${orderId}");
parameters.put("TXNID", "20200113111212800110168201701179744");
parameters.put("TXN_AMOUNT", "10.01");
parameters.put("PAYMENTMODE", "DC");
parameters.put("CURRENCY", "INR");
parameters.put("TXNDATE", "2020-01-13 13:59:03.0");
parameters.put("STATUS", "TXN_SUCCESS");
parameters.put("RESPCODE", "01");
parameters.put("RESPMSG", "Txn Success");
parameters.put("GATEWAYNAME", "HDFC");
parameters.put("BANKTXNID", "777001911059826");
parameters.put("BANKNAME", "JPMORGAN CHASE BANK");
parameters.put("BANKNAME", "JPMORGAN CHASE BANK");
String checkSum = checkSumServiceHelper.genrateCheckSumGAE(merchantKey, parameters);
Out. println "s====================================ssssss"
OUT. println checkSum
props.put("checkSum", checkSum);
这是我 运行 时的错误:
javax.script.ScriptException: javax.script.ScriptException: java.security.InvalidKeyException: Invalid AES key length: 17 bytes
我认为这个错误是由于我的输入值造成的。
Beanshell is not Java and it isn't 100% compliant with Java, you need to stick to Java 1.5 language level 一般。
特别是 Beanshell 不支持 Diamond Operators,您需要从您的代码中删除它们,例如:
TreeMap parameters = new TreeMap();
- Groovy 脚本可以在每次调用 Beanshell 时进行编译和缓存,因此 Groovy 性能更高
- Groovy 支持所有基础 JDK language features 而 Beanshell 卡在 Java 5
- 另外Groovy provides a lot of enhancements超过正常Java SDK
查看 Apache Groovy - Why and How You Should Use It 文章了解更多详情。
我是 Jmeter 的 JSR223 预处理器的新手。我们刚刚将 Paytm 的支付网关集成到我们的产品中,我们不得不 运行 使用 Jmeter 进行负载测试。我们必须使用一组值生成校验和,然后将其注入到我们的 Json 有效载荷中。我正在使用 Java Beanshell 来执行代码。我已将 jar 文件 available here 添加到我的 bin 目录中,并在开始测试之前将其添加到我的 class 路径中。这是我的代码的样子:
import com.paytm.merchant.CheckSumServiceHelper;
com.paytm.merchant.CheckSumServiceHelper checkSumServiceHelper = com.paytm.merchant.CheckSumServiceHelper.getCheckSumServiceHelper();
TreeMap<String,String> parameters = new TreeMap<String,String>();
String merchantKey = "xxxxxxxxxxxxxxxxx";
parameters.put("MID", "xxxxxxxxxxxxxxxxxxxxxx");
parameters.put("ORDERID", "${orderId}");
parameters.put("TXNID", "20200113111212800110168201701179744");
parameters.put("TXN_AMOUNT", "10.01");
parameters.put("PAYMENTMODE", "DC");
parameters.put("CURRENCY", "INR");
parameters.put("TXNDATE", "2020-01-13 13:59:03.0");
parameters.put("STATUS", "TXN_SUCCESS");
parameters.put("RESPCODE", "01");
parameters.put("RESPMSG", "Txn Success");
parameters.put("GATEWAYNAME", "HDFC");
parameters.put("BANKTXNID", "777001911059826");
parameters.put("BANKNAME", "JPMORGAN CHASE BANK");
parameters.put("BANKNAME", "JPMORGAN CHASE BANK");
String checkSum = checkSumServiceHelper.genrateCheckSumGAE(merchantKey, parameters);
vars.put("checkSum", checkSum)
这是我得到的错误结果:
javax.script.ScriptException: Sourced file: inline evaluation of: ``import com.paytm.merchant.CheckSumServiceHelper; com.paytm.merchant.CheckSumSer . . . '' : Typed variable declaration : Class: com.paytm.merchant.CheckSumServiceHelper not found in namespace : at Line: 3 : in file: inline evaluation of: ``import com.paytm.merchant.CheckSumServiceHelper; com.paytm.merchant.CheckSumSer . . . '' : com .paytm .merchant .CheckSumServiceHelper
in inline evaluation of: ``import com.paytm.merchant.CheckSumServiceHelper; com.paytm.merchant.CheckSumSer . . . '' at line number 3
at bsh.engine.BshScriptEngine.evalSource(BshScriptEngine.java:93) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.engine.BshScriptEngine.eval(BshScriptEngine.java:46) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) ~[java.scripting:?]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:225) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44) [ApacheJMeter_components.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:935) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:537) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137]
at java.lang.Thread.run(Thread.java:830) [?:?]
如果您能提供解决此错误的任何帮助,我们将不胜感激。这可能是一个愚蠢的问题,但我对此并不陌生,所以请帮忙!! :)
编辑:
我现在使用 groovy 语法来执行此操作。我无法使用我的调试采样器在“查看结果树”中查看我的校验和变量,但我可以在控制台中看到它。该值在控制台中正确显示。但是变量没有被导出。
import com.paytm.pg.merchant.CheckSumServiceHelper;
com.paytm.pg.merchant.CheckSumServiceHelper checkSumServiceHelper = com.paytm.pg.merchant.CheckSumServiceHelper.getCheckSumServiceHelper();
TreeMap parameters = new TreeMap();
String merchantKey = "xxxxxxxxxxxxxxxxx";
parameters.put("MID", "xxxxxxxxxxxxxxxxxxxxxx");
parameters.put("ORDERID", "${orderId}");
parameters.put("TXNID", "20200113111212800110168201701179744");
parameters.put("TXN_AMOUNT", "10.01");
parameters.put("PAYMENTMODE", "DC");
parameters.put("CURRENCY", "INR");
parameters.put("TXNDATE", "2020-01-13 13:59:03.0");
parameters.put("STATUS", "TXN_SUCCESS");
parameters.put("RESPCODE", "01");
parameters.put("RESPMSG", "Txn Success");
parameters.put("GATEWAYNAME", "HDFC");
parameters.put("BANKTXNID", "777001911059826");
parameters.put("BANKNAME", "JPMORGAN CHASE BANK");
parameters.put("BANKNAME", "JPMORGAN CHASE BANK");
String checkSum = checkSumServiceHelper.genrateCheckSumGAE(merchantKey, parameters);
Out. println "s====================================ssssss"
OUT. println checkSum
props.put("checkSum", checkSum);
这是我 运行 时的错误:
javax.script.ScriptException: javax.script.ScriptException: java.security.InvalidKeyException: Invalid AES key length: 17 bytes
我认为这个错误是由于我的输入值造成的。
Beanshell is not Java and it isn't 100% compliant with Java, you need to stick to Java 1.5 language level 一般。
特别是 Beanshell 不支持 Diamond Operators,您需要从您的代码中删除它们,例如:
TreeMap parameters = new TreeMap();
- Groovy 脚本可以在每次调用 Beanshell 时进行编译和缓存,因此 Groovy 性能更高
- Groovy 支持所有基础 JDK language features 而 Beanshell 卡在 Java 5
- 另外Groovy provides a lot of enhancements超过正常Java SDK
查看 Apache Groovy - Why and How You Should Use It 文章了解更多详情。