JMeter JDBC 使用过程中遇到的坑

DC_ing

JDBC

一、开始执行脚本时,因为读取自定义变量报错,导致出现字符转化失败异常cannot be cast to java.lang.String

具体 log 请看:


java.lang.ClassCastException: org.apache.jmeter.protocol.jdbc.config.DataSourceElement$DataSourceComponentImpl cannot be cast to java.lang.String
    at org.apache.jmeter.threads.JMeterVariables.get(JMeterVariables.java:118) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.engine.util.SimpleVariable.toString(SimpleVariable.java:54) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:147) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:116) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.testelement.AbstractTestElement.getPropertyAsString(AbstractTestElement.java:281) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.testelement.AbstractTestElement.getName(AbstractTestElement.java:165) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:449) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:254) [ApacheJMeter_core.jar:3.2 r1790748]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]

原因

原因是因为 Sampler 的名称带上读取公共参数${read-public-parameters}的例子,请查看以下截图。
image.png

解决方法

将以上截图,名称的公共参数名称改为创建数据库-${testDataBaseName}即可。

二、查询中文内容无结果的解决办法

在使用 JMeter 进行 JDBC 查询数据库时,sql 语句使用英文和数字可以查询到记录,而使用中文则查询不到记录,而且使用相同的中文语句,可以在终端命令上和数据库管理工具上也可以查询到。

原因

以上问题是因为数据库使用的编码与jmeter 查询时,使用的编码不一致,导致查询的条件转换后不一致,导致查询不到正确记录或查询到错误记录。

JMeter 的默认编码是ISO-8859-1,而 mysql 数据库因为要存储中文信息,所以一般使用utf-8。在 JMeter 上填写的中文查询语句经字符编码转换到 mysql 上,不是之前填写的中文字段,导致查询条件失效,自然就无法查询到正确的结果了。

解决办法

JDBC Connection Configuration 配置元件,Database URLuseUnicode=true&characterEncoding=UTF-8,即可解决问题。

三、多条sql语句执行时,响应报错

原因

  1. 链接数据库没有允许使用多条语句;
  2. JDBC Request 这个 Sampler 里面的SQL Query -> Query Type选项中,select statement选项是不支持多个 sql 语句。

解决办法

  1. JDBC Connection Configuration 配置元件,Database URLallowMultiQueries=true

  2. 在有多个 sql 语句的 JDBC Request Sampler 中,SQL Query -> Query Type选项,将select statement变更成 Callable Statement即可。

PS:测试多个 sql 语句时,必须在每条sql 语句后面加分号(;);最后一个 sql 语句可以不用加。

阅读 474

IT农民工

30 声望
4 粉丝
0 条评论
你知道吗?

IT农民工

30 声望
4 粉丝
宣传栏