一、背景
在我们工作中有时候会需要使用客户提供的内网负载机进行性能测试,一般在什么情况下我们需要要求客户提供内网负载机进行性能测试呢?
遇到公网环境下性能测试达到了带宽瓶颈。那么这时,我们就需要考虑在内网环境负载机下来执行我们的性能测试以达到屏蔽带宽影响的目的。
系统对高并发做了防护,例如ddos防护
测试的并发过高导致负载机先达到瓶颈
本节我们介绍在内网负载机下执行JMeter性能测试。
二、准备
我们需要准备一下我们接下来需要用的东西:
-
ssh连接工具(例如:Xshell、Git Bash,在这里我们使用Git Bash)
-
apache-jmeter-5.5或以上(JMeter版本过低或java版本过高会导致java版本过高的报错提示)
-
性能测试脚本
三、假设
在这里我们先做出一些假设:
- 被测网站为https://www.baidu.com。(我们一般在测试时测试的域名为http而非https)
- 负载机处于baidu内网环境中
- https://www.baidu.com 在内网中对应的内网ip为10.5.16.8
- 文章中负载机已安装配置环境,在本文中我们假设未安装任何环境
四、操作步骤
1、连接负载机
首先我们在脚本及jmeter所在文件夹下右键打开Git Bash
连接负载机
shell
ssh root@192.168.2.45 # root为登录的用户,@后为访问负载机ip地址
回车出现
root@192.168.2.45's password:
我们输入密码后回车即可,登录成功
2、检查环境
首先检查java环境
shell
java --version
出现类似以下内容表示环境中存在java
检查jmeter环境
shell
jmeter --version
出现类似以下内容表示环境中存在jmeter
查看Linux内存
shell
free -h
这里我们可以发现我们内存为1.6GB
查看LinuxCPU信息
shell
cat /proc/cpuinfo
这里我们看最后一个processor序号为1,故CPU为2核
查看Linux系统架构
shell
uname -a
这里可以知道系统架构为x86_64
3、测试准备
在上文中我们说到,假设负载机未安装任何环境。这里我们分别介绍两种方式进行安装。
(1)Java安装(链接下载)
首先我们打开Java官网(其他下载地址也可)https://www.oracle.com/java/technologies/downloads/,选择jdk17(这里我们用jdk17进行演示)
这里我们复制x64 Compressed Archive(具体下载的包取决于之前查询的CPU架构来决定)后的链接:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
创建java目录
shell
mkdir ~/myTest mkdir ~/myTest/java cd ~/myTest/java
使用wget命令下载,等待下载完成
shell
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
PS:该方法需要确保负载机可以连通外网使用一下命令检查
shell
ping www.baidu.com
下载完成后查看
解压
shell
tar -zxvf jdk-17_linux-x64_bin.tar.gz
(2)JMeter安装(文件传输)
向负载机传输文件我们可以通过ftp服务器传输。但是在这里我们用了Git Bash,在这里我们使用更加简便的scp来进行传输。
退回上一层,创建jmeter目录
shell
cd ../ mkdir jmeter cd jmeter
再次在放置脚本及jmeter所在文件夹下右键再次打开一个Git Bash
输入命令
shell
scp ./apache-jmeter-5.4.1.zip root@192.168.2.45:~/myTest/jmeter
输入密码后上传
上传后关闭该窗口,回到之前的bash窗口检查是否上传成功
解压
shell
unzip apache-jmeter-5.4.1.zip
到了这里我们就基本可以开始操作脚本了,但是大家可能会好奇,环境变量怎么没有配置呢?
并非是我们不配置环境变量,而是因为在测试中,我们一般不在客户的环境中配置永久环境变量,我们一般采用临时环境变量。这个我们在后面会说如何去配置
那么为什么要用临时环境变量呢?
临时环境变量是指仅在当前系统会话有效的环境变量,该环境变量不会被写入系统的环境变量文件,也不会被永久保存。临时环境变量会在关闭本次会话后自动清除,不会影响下一次系统登录。同时也不会影响用户原有服务的环境变量。
在这里我们还需要进行一步编辑,需要修改我们的jmeter.sh文件或jmeter文件,这里我们修改jmeter.sh文件。
进入bin目录
shell
cd bin ls
修改jmeter.sh
在这里有几个问题需要解释一下
为什么需要修改这个配置?
在大并发的测试中,我们需要的大量的内存来执行压力测试,而JMeter在默认情况下的内存分配非常低,我们需要自己把该项配置的最大堆修改成合适的值
那么我们应该修改成多少合适呢?
根据负载机的内存来决定该项的值为多少。在前面我们查询了内存为1.6GB,所以我们设置成1GB。一般建议设置为内存的80%。例如一台8GB的负载机,我们可以设置为6GB。
shell
vim jmeter.sh
找到JVM-ARGS
复制该行,去除注释,将512m修改为合适的大小
4、调试脚本
回到我们上面的脚本截图
既然我们是在内网环境下运行,那么我们应该将URL改为内网ip访问才会达到理想效果。否则同样需要走公网进行访问。那么我们需要怎么解决呢?
方法一:
我们可以直接将域名改为IP。但是该方法不推荐
方法二:
修改负载机的host文件。推荐
为什么我们不推荐方法一呢?
如果使用的是方法一,我们就无法本机上进行调试。而使用方法二我们不仅可以进行本机调试,而且在负载机上也走的是内网而不是公网。
5、修改host
我们先修改hosts文件
shell
vim /etc/hosts
输入i插入host信息,修改后按esc后输入:x
6、配置运行脚本
新建一个文件夹放置脚本
同样使用scp将脚本拷贝进文件夹
shell
scp ./内网测试.jmx root@192.168.2.45:~/myTest/jmeterTest
新建run.sh文件(也可以选择在本机新建好再传入负载机)
shell
touch run.sh vim run.sh
run.sh脚本如下
shell
export JAVA_HOME=~/myTest/java/jdk-17.0.8 # jdk所在目录 export JMETER_HOME=~/myTest/jmeter # jmeter所在目录 export PATH=$JAVA_HOME/bin:$PATH:.:$JMETER_HOME/bin:$PATH # jdk和jmeter的bin目录 java --version # 检查java是否配置成功 jmeter --version # 检查jmeter是否配置成功
配置完成后保存,执行run.sh
shell
bash run.sh
环境生效
再次编辑run.sh
shell
export JAVA_HOME=~/myTest/java/jdk-17.0.8 # jdk所在目录 export JMETER_HOME=~/myTest/jmeter # jmeter所在目录 export PATH=$JAVA_HOME/bin:$PATH:.:$JMETER_HOME/bin:$PATH # jdk和jmeter的bin目录 jmeter -n -t 内网测试.jmx -l 内网测试.jtl # 运行脚本 # jmeter -g 内网测试.jtl -o 内网测试 # 如果并发过大建议生成HTML报告后scp到本地机 # java --version # 检查java是否配置成功 # jmeter --version # 检查jmeter是否配置成功
运行完成后
我们可以再次使用scp命令将生成的jtll文件传回本地机后生成html报告,但是不推荐
为什么不推荐直接将脚本复制到本地机呢?
对于高并发的场景,生成的jtl文件会非常的庞大,所以我们一般建议将其生成为HTML报告,将HTML报告复制到本地机。如确实有必要收集jtl文件或者文件较小,可以采取直接将jtl文件复制到本机再生成HTML报告的方法
shell
scp root@192.168.2.45:~/myTest/jmeterTest/内网测试.jtl ./
如果需要再次生成html报告,将运行脚本注释,取消生成html报告的注释。再次bash run.sh即可
总结
如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面
自动化测试相关教程推荐:
2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili
2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili
测试开发相关教程推荐
2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili
postman/jmeter/fiddler测试工具类教程推荐
讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili
2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili
2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili
总结:
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!