远程执行,就是脚本放在本地,执行却在另一台电脑上执行,当然,可以是远程多台电脑一起执行。最常见的场景就是,跑性能测试的时候,一台电脑负载不起需要的线程时,就需要两台或者更多的电脑来启动线程跑测试,线程就相当于是虚拟用户。在网上,通常会说,超过1000个线程时,就不要使用一台电脑跑了,而是选择使用多台电脑一起负载。这个说法并不全对,比如,脚本就写一条insert语句,往数据库中插入数据,启20个线程跑,估计你的电脑CPU使用率就要100%了。所以,最终还是要看电脑承受得住否,而不是看多少个线程,不同的测试脚本,对测试机的压力不一样。很多时候,做性能测试的时候,为了模拟真实的用户操作,都会加等待时间。比如用户登录功能,用户在输入用户名和密码的时候,这个时候,服务器就是在等待,所以脚本在这里就会加一个等待时间,好像有点跑题了。

为了演示远程执行,开启一个虚拟机,然后把jmeter的压缩包传到linux里面。

点开始上传,jmeter包就会传到linux上去。然后使用命令:unzip apache-jmeter-3.1.zip,解压

因为我们一会做远程演示的脚本会用到JDBC,所以要把JDBC的驱动,放到linux上jmeter目录下的lib目录下去,当然,如果脚本使用了参数文件,参数文件也要传到远程机上。由于linux和windows的目录结构不一样,在脚本中,配置参数文件的路径时,就只能用相对路径了。相对路径可以以脚本为参照,也可以以jmeter程序为参照(bin目录下的jmeter)。但是远程执行,脚本是放在本机,远程机上没有脚本,所以只能以jmeter程序为参照

点开始上传,这样,第一步准备就做好了,接下来就是更改linux上jmeter的配置文件,先cd进入bin目录,再使用命令:vi jmeter.properties,进入编辑页面

然后输入/localport,回车,查询localport关键词

这个时候就光标停留在client.rmi.localport这一行,再次输入/localport,回车,查找下一个

然后就来到server.rmi.localport=4000这一行,按i进入插入模式,把这一行的注释去掉,也就是把前面的#号删了,再把端口号改为1099,这是默认的监听端口,当然,你要改成其它的端口也可以。

按ESC,再输入":qw",回车,保存退出

接下来就是启动远程客户端了

命令:./jmeter-server

可以看到服务器的端口为1099,但服务没有启动成功,下面提示不能启动,localhost.localdomain是一个回路地址,也就是不能用127.0.0.1作为启动地址。需要用本机的对外地址,于是使用命令:ifconfig查看ip地址。

使用vi jmeter-server命令编辑文件,然后按shift+g,让光标定位到最后一行

要修改的就是上面这一行,把注释去掉,后面的xxx...改成本机的ip地址

保存,退出,再启动服务

这样,远程客户端就启动成功了。接下来就要配置windows的jmeter了

进入jmeter的bin目录下,用编辑器打开jmeter.properties,我这里用的编辑器是EditPlus,按Ctrl+f查询hosts

在查找的下面一点,remote_hosts=127.0.0.1,这行,就是我们要修改的,把ip地址改成linux的ip地址,当然,如果在linux上你改的端口不是1099,那么还要加上端口号,如果要控制的远程机有多台,用英文逗号隔开

保存更改后的配置文件,然后启动jmeter,在运行——远程启动中,可以看到远程linux的ip地址

再接下来,就是编写脚本,这里使用JDBC教程里的数据库和表,往商品表中插入一条数据,因为现在要远程执行,所以连接池配置里,数据库的地址就不能用localhost了,要用自己电脑的ip地址,可以使用ipconfig查看本机电脑的ip地址

为了证明是linux执行了sql语句,我们打开navicat工具,执行命令:SHOW PROCESSLIST

我们在Host一列,可以看到有哪些主机连接着mysql,可以看到,现在只有localhost,现在我们在Jmeter里远程执行脚本,如果在Host列里出现了192.168.52.130,就代表是linux执行了脚本,点运行——远程运行,再选中linux的ip地址,当然也可以在运行里选择远程全部启动,或是工具栏里两个三角形的图标,也是远程全部启动

然后,发现jmeter会卡一会,那是因为jmeter在拼命的连接linux,但是它使出了吃奶的力气,还是没连上。然后就弹个窗,说连接超时

为什么呢,好吧,查找原因。。。我们先在主机上,ping一下linux

可以ping通,那么端口呢,telnet 192.168.52.130 1099

太不给面子了,竟然说telnet不是内部命令。嘛哩嘛哩轰,看我怎么把它变成内部命令。。。打开控制面板

点击程序和功能

点击左边的打开或关闭Windows功能,稍等...稍等...

将这两个勾上。点确定,然后在控制台telnet 192.168.52.130 1099

可以看到,不能连接到这个端口,其实,我在讲telnet,就应该知道是端口不通的问题,我只是顺带把telnet介绍一下。接下来,就是要到Linux里去开放1099端口,可以在原先的连接窗口按Ctrl+c停止掉启动的远程客户端,然后用命令开放端口,也可以双击SecureCRT程序再开启一个连接窗口改。这里,我就再开启一个连接窗口改,命令:firewall-cmd --zone=public --add-port=1099/tcp --permanent,然后再使用命令:firewall-cmd --reload使更改生效

好了,好了,再次执行脚本

可以看到脚本执行成功了,同时,在linux里面,也看到有内容输出了

然后,到navicat里去看下,好吧,没有看到有linux的主机。因为脚本一下子就执行完了,我们让线程组循环10次,每次添加商品都等待1秒

再次运行脚本,然后去navicat里去看,要快哟。。。

然后就会看到一个长这样的东西。这是啥吖,好吧,我也不认识。我们来个绝一点的,把本机的hostname和ip地址,当作商品的名称和图片地址,插入到数据库中去,jmeter中打开函数助手对话框,machineName是获取本机的hostname,machineIP是获取本机的ip地址。

然后,远程执行脚本

id是27的是本地执行的数据,呃,这个不认识的东西,竟然是我物理机的hostname,ip地址是我物理机的本地连接的ip地址。id是28的是远程执行的数据,hostname就是linux的hostname,这ip地址。。。无fack说。无论是本地执行,还是远程执行,ip地址都不是我们想要的,因为两台电脑都不是只有一张网卡,所以就会出现这样的情况,在上面我们查看linux的ip地址的时候,我们查出来的是有两部分,前面我们只关注了上面的部分,ip地址是192.168.52.130,下面部分显示的ip地址是127.0.0.1,而jmeter取的是下面的这个ip地址,所以就出现了ip地址是127.0.0.1的结果。我的策略应该也有问题,应该再建一个虚拟机,把数据库放到新建的虚拟机中去,然后让脚本去操作这个数据库,这个还是大家自己去尝试一下吧,看看结果会是什么 。

最后,远程执行脚本,察看结果树里,响应数据都是空的。这个时候,要想判断响应的结果是对还是不对,就不能通过看响应数据来判断了,只能添加断言来判断。再有就是远程控制多台电脑跑脚本,那么每台电脑上跑的都是一样的脚本,怎么理解这句话呢,比如脚本是起20个线程。控制两台电脑跑脚本,那么两台电脑都是20个线程,加起来就是40个线程。

欢迎加入测试群:91425817,一起讨论测试的那此事。

jmeter教程(十五):远程执行相关推荐

  1. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(二)

    前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 上一讲我们说了CubeMX配置SDRAM的一些基本配置,还有FMC跟SDRAM的讲解,这一讲我们 ...

  2. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(一)

    前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 本文 1首先讲解什么是FMC及SDRAM,W9825G6KH芯片原理,2基于CubeMx创建工程 ...

  3. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界 摄像机的实现

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...

  4. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云(浅墨) ...

  5. 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处.   文章链接: http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云( ...

  6. nCode:DesignLife案例教程十五

    nCode:DesignLife 案例十五--蠕变分析 15.1 案例文件 15.2 目标 15.3 设计问题 在本案例中,我们将使用DesignLife的Creep Engine和Hybrid Lo ...

  7. twisted系列教程十五–测试twisted代码

    Introduction 在这个系列中我们也已经写了很多twisted 代码了,但目前为止我们忽略了一个很重要的事情-测试.你可能也一直在想我们怎样用一个同步的测试框架unitest来测试我们的异步的 ...

  8. WebGL简易教程(十五):加载gltf模型

    文章目录 1. 概述 2. 实例 2.1. 数据 2.2. 程序 2.2.1. 文件读取 2.2.2. glTF格式解析 2.2.2.1. 场景节点 2.2.2.2. 网格 2.2.2.3. 缓冲,缓 ...

  9. python函数助手_转jmeter(十五)函数助手

    由于时间和版本问题,其中有些内容和排版我做了修改和重新整理,使其更符合最新的jmeter版本. 一.使用jmeter函数助手 启动jmeter后,可以在JMeter的选项菜单中找到函数助手对话框(快捷 ...

  10. quartz mysql 初始化_quartz2.3.0(十五)执行、暂停、继续执行、清除,花式操作数据库中持久化的job任务...

    前提准备: 先在数据库中建立quartz需要的11张表(我这里用的是Oracle数据库),根据不同的数据库quartz分别提供了不同的初始化sql文件,sql文件路径在 quartz-2.3.0-SN ...

最新文章

  1. [cocoapods]cocoapods问题解决
  2. NetTiers学习笔记05---使用自定义存储过程
  3. Scheme 语言概要
  4. 生产系统服务器是啥意思,生产系统服务器主机名怎么看
  5. 算法:动态规划解决爬楼梯Climbing Stairs python3
  6. Chrome驱动对应chrome浏览器版本
  7. Eventlog Analyzer日志管理系统、日志分析工具、日志服务器的功能及作用
  8. STM8L051F3_0d_基础介绍
  9. 三角波的傅里叶变换对_冲激信号、门信号、方波、矩形波的傅里叶变换分析
  10. 故障恢复控制台命令全攻略
  11. vue3警告[Vue warn]: Extraneous non-emits event listeners (getVal) were passed to component but could n
  12. nginx证书绑定及二级域名反向代理
  13. 随笔---Beego中的routers包个人的理解
  14. vue-shop 表格中使用树形控件 vue-table-width-tree-grid
  15. 面试干货!21个必知数据科学面试题和答案part2(12-21)
  16. Docker 容器操作 1
  17. 判断是否左值引用/右值引用
  18. phpstrom设置函数注释说明
  19. WIN7主题下载http://bbs.windows7en.com/?fromuid=896008
  20. 企业邮箱还安全吗?搜狐员工全员损失惨重

热门文章

  1. 【毕业设计】协同过滤商品推荐系统 - python 深度学习
  2. react 富文本编辑器react-quill
  3. android 关联mp3,手把手教你Android如何使用NDK实现一个MP3转码库
  4. ajax获取涨停股票接口,涨停技术-教你如何捕捉涨停版(绝对经典)
  5. adobe acrobat pro dc 无法打开PDF_PDF编辑Acrobat Pro软件教程 Acrobat XI Pro 全面技能标准培训视频...
  6. 言语理解-片段阅读的结构剖析练习
  7. 汽车tbox介绍、新能源tbox,汽车tbox,新能源上的车联网终端
  8. 如何使用pdfbox實現打印功能--foxconn-it-zyzx-xiaohuibing-2
  9. 拼接URL在线生成二维码
  10. 程序员转行为什么这么难--[转]