压力测试是大型网站系统设计开发中必不可少的环节。计划。压力测试可以帮助我们及时发现系统性能的短板和瓶颈。在此基础上,有针对性的性能优化也可以帮助我们预估系统的承载能力,从而可以据此做出一些对策。JMeter简介JMeter是一款用Java开发的Apache开源软件,用于软件的性能评估和压力测试。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。JMeter可用于静态和动态资源、Web动态应用程序的性能测试,例如:HTTP、HTTPS、LDAP、TCP、FTP、SMTP、POP3、IMAP、Shell脚本、数据库、Java对象,也可用于server,server对组、网络或对象施加巨大负载,以在不同强度的压力测试下测试其强度和整体性能。此外,JMeter还可以对应用程序进行功能回归测试,通过创建带有断言的脚本来验证您的程序是否返回了您期望的结果。为了获得最大的灵活性,JMeter还支持使用正则表达式来创建断言。下载JMeter访问JMeter官网:https://jmeter.apache.org/download_jmeter.cgi,下载最新版本的JMeter,如下图所示:运行JMeter需要先安装JDK8,然后再运行JMeter。详细安装步骤请参考图文详细说明。在Windows系统中安装JDK。解压压缩包后,进入bin目录,双击运行jmeter.bat,首先启动一个CMD窗口,如下图:然后启动JMeter的GUI,如下图:其中,注意CMD窗口中的提示:====================================================================================不要使用GUI负载测试模式!,仅用于测试创建和测试调试。对于负载测试,使用CLI模式(非GUI):jmeter-n-t[jmx文件]-l[结果文件]-e-o[网络报告文件夹的路径]&增加Java堆以满足您的测试要求:修改jmeter批处理文件中的当前环境变量HEAP="-Xms1g-Xmx1g-XX:MaxMetaspaceSize=256m"检查:https://jmeter.apache.org/usermanual/best-practices.html====================================================================================英文看着不太流畅,作为资深暖男,我来给大家翻译一下:DonotusetheGUItorunthe压力测试!GUI仅用于压力测试创建和调试。使用非GUI的CLI模式执行压力测试。使用如下命令执行测试:jmeter-n-t[jmx文件]-l[结果文件]-e-o[网络报告文件夹路径]并在批处理文件中修改当前环境变量:HEAP="-xms1g-Xmx1g-XX:MaxMetaspaceSize=256m"JMeter默认是英文的,也可以修改为简体中文,可以通过点击Options->ChooseLanguage修改,如下图:创建第一个压力测试并编写一个网站进行演示,网址为http://127.0.0.1:8080/hello,当QPS大于100时,HTTP状态码返回429(阿里巴巴哨兵实现)。1、添加线程组,右键测试计划,点击添加-->线程(用户)-->线程组,如下图:设置线程数为10,Ramp-Up时间(秒)为10,循环次数为100,如下图:线程数:1个用户占用1个线程,10个线程模拟10个用户。Ramp-Uptime(seconds):设置所有线程启动需要多长时间。如果线程数为10,准备时间为10,则启动1个线程需要1秒。也就是说,每秒启动一个线程。循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,则每个线程发送100个请求。请求总数为10*100=1000。如果勾选“Forever”,所有线程会一直发送请求,直到你选择停止运行脚本。2、添加一个组件右键线程组,点击添加-->配置组件-->HTTP请求默认值,如下图:设置协议为HTTP,服务器名称或IP为127.0.0.1,端口号为8080,如下图:当所有测试的访问域名和端口都相同时可以使用该组件。一旦服务器地址或端口发生变化,只需要修改HTTP请求的默认值即可。3、添加一个sampler,右键线程组,点击Add-->Sampler-->HTTPRequest,如下图:设置请求类型为GET,路径为/hello,如下图下图:4、添加响应断言,右键线程组,点击添加-->断言-->响应断言,如下图:测试字段设置为响应码,模式匹配规则相等,测试模式加200,如下图:5、添加查看结果树右键线程组,点击添加-->监听监听-->查看结果树,如如下图所示:6.添加汇总报告,右键线程组,点击添加-->监听器-->汇总报告,如下图:7.开始压力测试,点击保存按钮先把测试计划保存起来。然后点击开始按钮,如下图:测试计划将运行。8.查看报告并查看结果树。如果请求成功,如下图:查看结果树,如果请求失败(QPS太高,被阿里巴巴哨兵限制),如下图:再看汇总报告,如下图所示:9.执行测试前面提到的计划不能使用GUI来执行测试计划,必须使用CLI模式。执行如下命令:jmeter-n-t../plan/WanmaoXueshe.jmx-l../plan/result.txt-e-o../plan/webreport其中../plan/WanmaoXueshe.jmx为测试计划文件,../plan/result.txt为测试结果文件,../plan/webreport为web报告目录。执行过程如下图:最终生成的网页报告如下图:为了演示使用CSV参数化对之前网站的提升,网址为http://127.0.0.1:8080/hello/{name},其中{name}是一个参数,所以URL可以是http://127.0.0.1:8080/hello/Lucy,或者http://127.0.0.1:8080/hello/Lily,以及当QPS大于100时,HTTP状态码返回429(也是用AlibabaSentinel实现的)。1、创建一个CSV文件创建一个文本文件,内容为:1、Alice2、Eva3、Jane4、Lily5、Lucy共5行,每行是id和name,用逗号隔开。然后,对之前的测试计划进行修改。2、CreateCSVDataSetConfig右键线程组,点击Add–>ConfigurationComponents–>CSVDataSetConfig,如下图:填写刚才创建的文件名,文件编码选择UTF-8,并为变量名称输入id和name。分别指明文本文件中每一行的id和name变量,如下图:3、修改HTTP请求,将之前HTTP请求中的路径修改为/hello/${name},如下图下图:4.查看报告并开始测试Plan,可以看到查看结果树中url的路径已经被替换,如下图:使用HTTP请求参数化演示添加一个接口到之前的网址,网址为http://127.0.0.1:8080/getName,接口会在上面的文本文件中随机返回一个名字,返回格式为JSON,例如:{"id":1,"name":"Alice"}修改之前的测试计划:1.添加HTTP请求右键线程组,点击Add–>Sampler–>HTTPRequest,添加一个新的HTTP请求,名称设置为HTTPRequest-getName,并将路径设置为/getName。为了区分,将之前添加的HTTP请求的名称改为HTTPrequest-hello,如下图:2、添加JSON提取器,右键HTTPrequest-getName,点击Add–>PostProcessor–>JSONExtractor,如下图所示:Namesofcreatedvariables为创建变量的名称,必须与HTTPrequest-hello路径/hello/${name}保持一致,故设置为name。JSON路径表达式是需要提取的键。引用getName接口返回的JSON字符串,设置为$.name。MatchNo.是JSON中相同key的编号,这里设置为1。DefaultValues是没有找到key时的默认值,这里设置为OneMore。最终配置如下图所示:4.查看报告,开始测试计划。在结果树中可以看到getName返回的名字是Lily,如下图:接下来调用hello接口时传入的参数是Lily,所以返回的是Hello,Lily,如下图下图:综上所述,JMeter非常强大,还有很多值得探索的地方。但是,如果你掌握了本文介绍的功能,那么一般的Web压测基本可以应付。
