Jmeter分布式测试的注意事项和常见问题

这篇具有很好参考价值的文章主要介绍了Jmeter分布式测试的注意事项和常见问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Jmeter分布式测试的注意事项和常见问题

Jmeter是一款开源的性能测试工具,使用Jmeter进行分布式测试时,也需要注意一些细节和问题,否则可能会影响测试结果的准确性和可靠性。

Jmeter分布式测试时需要特别注意的几个方面

1. 参数化文件的位置和内容

如果使用csv文件进行参数化,即通过读取csv文件中的数据来为测试脚本提供不同的输入值,那么需要注意以下两点:

  • 需要把参数文件在每台slave上拷贝一份,最好都放置在bin目录下,因为Jmeter会直接从bin目录下查找;
  • 参数文件的内容要保持一致,即每台slave上的参数文件的行数、列数、数据类型等都要相同,否则可能会导致数据不匹配或缺失。

2. slave机器的响应数据

slave机器执行脚本时,若断言执行成功,则在master机器上是看不到请求响应数据的,只有在断言出错时才可见slave的返回。这是为了节省网络带宽和提高测试效率,因为在分布式测试中,通常只关心测试结果的统计和分析,而不需要查看每个请求的详细数据。如果需要查看slave的响应数据,可以在slave机器上打开jmeter.log文件,或者在master机器上设置Jmeter属性mode=Standard,但这样会增加网络开销和测试时间。

3. TCP取样器的配置

若要使用Jmeter分布式进行TCP协议的测试,需要注意以下两点:

  • TCP取样器中“TCPClient classname”该栏必须填写对应的协议,例如,如果要发送二进制数据,就要填写org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl,如果要发送文本数据,就要填写org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl,否则可能会出现数据格式错误或无法发送的问题;
  • 以十六进制发送tcp数据包时,TCP取样器中“End of line(EOL) byte value”必须填写数据包的结束符,例如,如果数据包以0D 0A结尾,就要填写13,否则jmeter会一直等待,无响应。

4. Linux下配置jmeter环境变量

如果在Linux系统下使用Jmeter,需要配置jmeter环境变量,以便于在命令行中直接启动jmeter。具体步骤如下:

  • 编辑/etc/profile文件,添加如下变量:
export JMETER_HOME=/usr/local/jmeter-5.0
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH
  • 使配置文件立即生效,执行命令:
source /etc/profile
  • 查看是否安装成功,执行命令:
jmeter -v

Jmeter分布式测试的常见问题和解决方法

问题1:在master上运行jmeter-server.bat时,出现“Exception creating connection to:192.16..;nested exception is:java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定的文件)”错误

原因:Jmeter4.0以上的版本,默认启用RMI连接的安全通信,需要创建密钥库。所以如果没有创建密钥库,就会出现这个错误。

解决方法:

  • 方法一:修改apache-jmeter/bin/jmeter.properties 参数:server.rmi.ssl.disable=true

备注:将master和slave机器上的jmeter.properties文件 参数server.rmi.ssl.disable均改为true

其中linux上是用以下命令:vi jmeter.properties 使用/server.rmi.ssl.disable/进行查找

  • 方法二:手动生成秘钥和证书。执行create-rmi-keystore.bat(Windows适用)或create-rmi-keystore.sh(Linux适用) 生成server.rmi.ssl.keystore.file的key文件,然后将key文件复制到所有的负载机的bin目录下 修改jmeter.properties中

问题2:在slave上(linux系统)运行jmeter-server时,出现“An error occurred: Cannot start. localhost is a loopback address”错误

原因:Jmeter默认使用localhost作为RMI的主机名,但是localhost是一个回环地址,不能用于远程连接。

解决方法:

  • 方法一:运行以下命令:./jmeter-server -Djava.rmi.server.hostname=192.16.*.*(本机ip)
  • 方法二:修改jmeter-server文件
# vi jmeter-server 将jmeter-server中的RMI_HOST_DEF=-Djava.rmi.server.hostname=192.16.*.*(本机ip)

运行./jmeter-server即可

备注:Linux下后台执行,启用server:nohup ./jmeter-server -Djava.rmi.server.hostname=192.16.. &

查看确定jmeter是否启动成功:ps axu | grep jmeter

问题3:远程启动slave机器时,如出现“Jmeter nested exception is:java.net.ConnectException connection timed out:connect ”错误

原因:可能是由于以下几种情况导致的:

  • slave上的ip与master配置文件中的ip不一致;
  • slave机器上有虚拟网卡,导致ip地址不正确;
  • 防火墙或者安全软件阻止了RMI的通信。

解决方法:

  • 查看slave上的ip与master配置文件中的ip是否一致;
  • 如果不一致,查看slave机器上是否有虚拟网卡,将网卡关闭,在此启动Jmeter-server.bat,查看是否正确
  • 查看防火墙是否关闭

注:centos7上关闭防火墙:  firewall-cmd --state   //查看防火墙状态

systemctl stop firewalld.service //关闭防火墙

问题4:当设置csv文件路径时,如果路径不对,无响应

原因:Jmeter在读取csv文件时,如果找不到文件,会一直等待,而不会报错。

解决方法:将csv文件以“相对路径”命名,即将csv文件直接放入bin目录下,在Jmeter路径中直接写入文件名

问题5:(Linux)默认端看1099被占用,如何关闭某个被占用端口的方法

原因:Jmeter使用RMI进行分布式测试时,需要使用1099端口作为注册端口,如果该端口被其他程序占用,就会导致无法启动jmeter-server或者无法连接slave。

解决方法:

  • 查看当前所有tcp端口,执行命令:
netstat -ntlp
  • 查看所有1099端口使用情况,执行命令:
nestat -ntulp |grep 1099
  • 查看占用1099端口的程序pid,执行命令:
lsof -i:1099
  • kill掉该进程,执行命令:
kill -9 1109 //kill掉该进程

问题6:如果使用slave发送数据后,长时间无响应

原因:可能是由于以下几种情况导致的:

  • 发送的数据中存在csv参数文件,但是slave机器的bin目录下没有该文件;
  • 建立的tcp采样器中属性“TCPClient classname”处没有添加协议:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

解决方法:

  • 查看发送的数据中是否存在csv参数文件,查看slave机器的bin目录下是否有该文件;
  • 查看建立的tcp采样器中属性“TCPClient classname”处是否添加协议:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

问题7:如果你的JMeter返回数据是乱码

原因:可能是由于JMeter的默认编码和服务器的编码不一致,导致数据转换出错。

解决方法:在JMeter安装路径的bin目录下,打开文件jmeter.properties,把Sampleresult.default.encoding的值改为 utf-8 即可。

问题8:启动jmeter时,报错:Error occurred during initialization of VM Could not reserve enough space for object heap errorlevel=1

原因:可能是由于JMeter的默认堆内存大小不足以支持测试的负载,导致内存溢出。

解决方法:

  • bin目录下打开jmeter.bat文件,查找set HEAP,将set HEAP=-Xms128m -Xmx512m修改为set HEAP=-Xms512m -Xmx512m;
  • 重新启动jmeter.bat即可

问题9:当jmeter用作数据库API测试时,如果数据库接口中参数中传递一个数组,如getApps(int nu, int appID[ ]),实际使用过程中报语法错误

原因:可能是由于JMeter的默认参数分隔符是逗号,而数组参数需要用分号分隔,导致语法错误。

解决方法:在JMeter的数据库连接配置中,将参数分隔符改为分号即可。

问题10:当jmeter在windows控制机中添加cvs文件参数化的时候,负载机没有没有文件的时候,远程启动后会执行失败。(即使cvs文件中的变量没有被引用)

原因:可能是由于JMeter在远程启动时,会先检查参数文件的存在性,如果不存在,就会报错。

解决方法:在负载机上添加相同的参数文件,或者在控制机上删除参数文件的引用。

 

 

 


总结

以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注:

我的公众号:百态测试

博客(奈非天的主页 - 博客园 (cnblogs.com))

我会不定期地分享更多的精彩内容。感谢你的阅读和支持!文章来源地址https://www.toymoban.com/news/detail-741830.html

本文来自博客园,作者:奈非天,转载请注明原文链接:https://www.cnblogs.com/Nephalem-262667641/p/17460169.html

Jmeter分布式测试的注意事项和常见问题

Jmeter是一款开源的性能测试工具,使用Jmeter进行分布式测试时,也需要注意一些细节和问题,否则可能会影响测试结果的准确性和可靠性。

Jmeter分布式测试时需要特别注意的几个方面

1. 参数化文件的位置和内容

如果使用csv文件进行参数化,即通过读取csv文件中的数据来为测试脚本提供不同的输入值,那么需要注意以下两点:

  • 需要把参数文件在每台slave上拷贝一份,最好都放置在bin目录下,因为Jmeter会直接从bin目录下查找;
  • 参数文件的内容要保持一致,即每台slave上的参数文件的行数、列数、数据类型等都要相同,否则可能会导致数据不匹配或缺失。

2. slave机器的响应数据

slave机器执行脚本时,若断言执行成功,则在master机器上是看不到请求响应数据的,只有在断言出错时才可见slave的返回。这是为了节省网络带宽和提高测试效率,因为在分布式测试中,通常只关心测试结果的统计和分析,而不需要查看每个请求的详细数据。如果需要查看slave的响应数据,可以在slave机器上打开jmeter.log文件,或者在master机器上设置Jmeter属性mode=Standard,但这样会增加网络开销和测试时间。

3. TCP取样器的配置

若要使用Jmeter分布式进行TCP协议的测试,需要注意以下两点:

  • TCP取样器中“TCPClient classname”该栏必须填写对应的协议,例如,如果要发送二进制数据,就要填写org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl,如果要发送文本数据,就要填写org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl,否则可能会出现数据格式错误或无法发送的问题;
  • 以十六进制发送tcp数据包时,TCP取样器中“End of line(EOL) byte value”必须填写数据包的结束符,例如,如果数据包以0D 0A结尾,就要填写13,否则jmeter会一直等待,无响应。

4. Linux下配置jmeter环境变量

如果在Linux系统下使用Jmeter,需要配置jmeter环境变量,以便于在命令行中直接启动jmeter。具体步骤如下:

  • 编辑/etc/profile文件,添加如下变量:
export JMETER_HOME=/usr/local/jmeter-5.0
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH
  • 使配置文件立即生效,执行命令:
source /etc/profile
  • 查看是否安装成功,执行命令:
jmeter -v

Jmeter分布式测试的常见问题和解决方法

问题1:在master上运行jmeter-server.bat时,出现“Exception creating connection to:192.16..;nested exception is:java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定的文件)”错误

原因:Jmeter4.0以上的版本,默认启用RMI连接的安全通信,需要创建密钥库。所以如果没有创建密钥库,就会出现这个错误。

解决方法:

  • 方法一:修改apache-jmeter/bin/jmeter.properties 参数:server.rmi.ssl.disable=true

备注:将master和slave机器上的jmeter.properties文件 参数server.rmi.ssl.disable均改为true

其中linux上是用以下命令:vi jmeter.properties 使用/server.rmi.ssl.disable/进行查找

  • 方法二:手动生成秘钥和证书。执行create-rmi-keystore.bat(Windows适用)或create-rmi-keystore.sh(Linux适用) 生成server.rmi.ssl.keystore.file的key文件,然后将key文件复制到所有的负载机的bin目录下 修改jmeter.properties中

问题2:在slave上(linux系统)运行jmeter-server时,出现“An error occurred: Cannot start. localhost is a loopback address”错误

原因:Jmeter默认使用localhost作为RMI的主机名,但是localhost是一个回环地址,不能用于远程连接。

解决方法:

  • 方法一:运行以下命令:./jmeter-server -Djava.rmi.server.hostname=192.16.*.*(本机ip)
  • 方法二:修改jmeter-server文件
# vi jmeter-server 将jmeter-server中的RMI_HOST_DEF=-Djava.rmi.server.hostname=192.16.*.*(本机ip)

运行./jmeter-server即可

备注:Linux下后台执行,启用server:nohup ./jmeter-server -Djava.rmi.server.hostname=192.16.. &

查看确定jmeter是否启动成功:ps axu | grep jmeter

问题3:远程启动slave机器时,如出现“Jmeter nested exception is:java.net.ConnectException connection timed out:connect ”错误

原因:可能是由于以下几种情况导致的:

  • slave上的ip与master配置文件中的ip不一致;
  • slave机器上有虚拟网卡,导致ip地址不正确;
  • 防火墙或者安全软件阻止了RMI的通信。

解决方法:

  • 查看slave上的ip与master配置文件中的ip是否一致;
  • 如果不一致,查看slave机器上是否有虚拟网卡,将网卡关闭,在此启动Jmeter-server.bat,查看是否正确
  • 查看防火墙是否关闭

注:centos7上关闭防火墙:  firewall-cmd --state   //查看防火墙状态

systemctl stop firewalld.service //关闭防火墙

问题4:当设置csv文件路径时,如果路径不对,无响应

原因:Jmeter在读取csv文件时,如果找不到文件,会一直等待,而不会报错。

解决方法:将csv文件以“相对路径”命名,即将csv文件直接放入bin目录下,在Jmeter路径中直接写入文件名

问题5:(Linux)默认端看1099被占用,如何关闭某个被占用端口的方法

原因:Jmeter使用RMI进行分布式测试时,需要使用1099端口作为注册端口,如果该端口被其他程序占用,就会导致无法启动jmeter-server或者无法连接slave。

解决方法:

  • 查看当前所有tcp端口,执行命令:
netstat -ntlp
  • 查看所有1099端口使用情况,执行命令:
nestat -ntulp |grep 1099
  • 查看占用1099端口的程序pid,执行命令:
lsof -i:1099
  • kill掉该进程,执行命令:
kill -9 1109 //kill掉该进程

问题6:如果使用slave发送数据后,长时间无响应

原因:可能是由于以下几种情况导致的:

  • 发送的数据中存在csv参数文件,但是slave机器的bin目录下没有该文件;
  • 建立的tcp采样器中属性“TCPClient classname”处没有添加协议:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

解决方法:

  • 查看发送的数据中是否存在csv参数文件,查看slave机器的bin目录下是否有该文件;
  • 查看建立的tcp采样器中属性“TCPClient classname”处是否添加协议:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

问题7:如果你的JMeter返回数据是乱码

原因:可能是由于JMeter的默认编码和服务器的编码不一致,导致数据转换出错。

解决方法:在JMeter安装路径的bin目录下,打开文件jmeter.properties,把Sampleresult.default.encoding的值改为 utf-8 即可。

问题8:启动jmeter时,报错:Error occurred during initialization of VM Could not reserve enough space for object heap errorlevel=1

原因:可能是由于JMeter的默认堆内存大小不足以支持测试的负载,导致内存溢出。

解决方法:

  • bin目录下打开jmeter.bat文件,查找set HEAP,将set HEAP=-Xms128m -Xmx512m修改为set HEAP=-Xms512m -Xmx512m;
  • 重新启动jmeter.bat即可

问题9:当jmeter用作数据库API测试时,如果数据库接口中参数中传递一个数组,如getApps(int nu, int appID[ ]),实际使用过程中报语法错误

原因:可能是由于JMeter的默认参数分隔符是逗号,而数组参数需要用分号分隔,导致语法错误。

解决方法:在JMeter的数据库连接配置中,将参数分隔符改为分号即可。

问题10:当jmeter在windows控制机中添加cvs文件参数化的时候,负载机没有没有文件的时候,远程启动后会执行失败。(即使cvs文件中的变量没有被引用)

原因:可能是由于JMeter在远程启动时,会先检查参数文件的存在性,如果不存在,就会报错。

解决方法:在负载机上添加相同的参数文件,或者在控制机上删除参数文件的引用。

 

 

 


总结

以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注:

我的公众号:百态测试

博客(奈非天的主页 - 博客园 (cnblogs.com))

我会不定期地分享更多的精彩内容。感谢你的阅读和支持!

到了这里,关于Jmeter分布式测试的注意事项和常见问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jmeter性能测试:高并发分布式性能测试

    当进行高并发性能测试的时候,受限于Jmeter工具本身和电脑硬件的原因,无法满足我们对大并发性能测试的要求。 基于这种场景下,我们就需要采用分布式的方式来实现我们高并发的性能测试要求。 ​要进行分布式性能测试,我们首先要一台机器作为主控机(Controller),其

    2024年02月08日
    浏览(41)
  • 【性能测试】JMeter分布式测试及其详细步骤

    性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多,有些概念也很相近: Load Testing Baseline Testing S

    2024年02月02日
    浏览(32)
  • 性能测试-JMeter分布式测试及其详细步骤

    性能测试是软件测试中的一种,它可以衡量系统的稳定性、扩展性、可靠性、速度和资源使用。它可以发现性能瓶颈,确保能满足业务需求。很多系统都需要做性能测试,如Web应用、数据库和操作系统等。 性能测试种类非常多,有些概念也很相近: Load Testing Baseline Testing S

    2024年02月07日
    浏览(42)
  • Jmeter进阶使用指南-分布式测试

    当你需要模拟大量并发用户并测试应用程序的性能时,JMeter的分布式测试功能非常有用。分布式测试允许你使用多个JMeter实例来模拟并发用户,从而提供更高的负载。 下面是一个详细的介绍和讲解分布式测试的步骤: 准备主机和从机: 首先,你需要准备一台主机和多台从机

    2024年02月09日
    浏览(31)
  • Jmeter 分布式性能测试避坑指南

    在做后端服务器性能测试中,我们会经常听到\\\'分布式\\\'。那你,是否了解分布式呢?今天,我们就来给大家讲讲,在企业实战中,如何使用分布式进行性能测试,实战过程中,又有哪些地方要特别注意?   做性能测试时,如果被测系统性能比较好,或者系统项目比较大,那么

    2024年02月11日
    浏览(29)
  • docker+jmeter实现简单的分布式压力测试

    阶梯压力测试的场景是为了验证在系统运行期间,用户不断的登录系统并使用一段时间,通过阶梯的场景,模拟实际应用期间系统的稳定性、承载性。 二、常用的阶梯压力测试线程组 stepping Thread Group 步长插件 Concurrency Thread Group 步长并发插件 两者区别 stg不提供设置启动延迟

    2024年04月16日
    浏览(45)
  • (五)【Jmeter】使用代理录制HTTP脚本操作步骤及注意事项

    前置信息 软件 版本 Jmeter 5.6.3 服务 网址 备注 drupal http://192.168.88.88:18080/ (二)【Jmeter】专栏实战项目靶场drupal部署 用户名 密码 test1 test1 test2 test2 实操记录 1、启动jmeter,操作顺序见下图 2、在视图面板添加如下信息,点击 开始

    2024年02月19日
    浏览(39)
  • JMeter分布式集群---部署多台机器进行性能压力测试

    有些时候,我们在进行压力测试的时候,随着模拟用户的增加,电脑的性能(CPU,内存)占用是非常大的,为了我们得到更加理想的测试结果,我们可以利用jmeter的分布式来缓解机器的负载压力,分布到多台机器同时运行。 1.Jmeter分布式执行原理: 1、Jmeter分布式测试时,选择

    2024年02月11日
    浏览(32)
  • 【性能测试】分布式压测之locust和Jmeter的使用

    受限于单台机器的配置问题,我们在单台机器上达不到一个很高的压测并发数,那这个时候就需要 引入分布式压测 分布式压测原理: 一般通过局域网把不同测试计算机链接到一起,达到测试共享、分散操作、集中管理的目的。 选择一台作为调度机(MASTER),其他机器作为执

    2024年02月19日
    浏览(34)
  • 超全整理,Jmeter性能测试-脚本error报错排查/分布式压测(详全)

    性能脚本error报错问题排查 1、脚本运行过程中报错 1)在windows系统jmeter中,给测试脚本添加查看结果树,添加保存错误日志信息 第一步,给文件取名error.xml 第二步,仅错误日志 第三步,点击配置,全部勾选 2)把linux系统中保存的error日志文件,导入到windows系统jmeter查看结

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包