工具:Jmeter4.0 + Java1.8

需求:对某https网站进行 登录-修改信息-退出 场景的压力测试

方法:使用Apache JMeter HTTP(S) Test Script Recorder(即http代理服务器)录制https请求

原理:

实践:

一 Jmeter配置

从JMeter 2.10开始,录制功能已得到改进,可以更好地处理嵌入式资源并动态创建证书。JMeter使用keytool程序(在JRE / JDK中可用)来支持这些功能,因此您需要确保配置正确。在启动Jmeter之前,请查看并确认以下问题:

问题1:启动Recorder时出现问题,如下所示:

ERROR - jmeter.protocol.http.proxy.ProxyControl: Could not initialise key store
java.io.IOException: Cannot run program "keytool" (in directory "C:\apache-jmeter-2.10\bin"):
CreateProcess error=2, The system cannot find the file specified

原因:这意味着在PATH上找不到“keytool”应用程序。

解决:确保PATH包含正确的Java安装的bin目录。如果在安装Java时未正确设置环境变量,则可能需要更新启动JMeter的脚本。

例如,将以下内容添加到jmeter.bat(Windows)

set JAVA_HOME=<path to JDK>
rem for example
set JAVA_HOME=C:\jdk1.7.0_45set PATH=%JAVA_HOME%\bin;%PATH%

类似地,对于Unix,更新脚本“jmeter”或“jmeter.sh”:

JAVA_HOME=<PATH TO JDK>  # for example JAVA_HOME=/usr/java170export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH

注意:如果安装了新版本的Java,几乎可以肯定java路径一定变了,因此一定不要忘记修改环境变量。

问题2:如下所示

Could not create script recording proxy - see log for details: Command :'"C:\Program Files\Java\jre7\bin\keytool" -genkeypair -alias :root_ca: -dname "CN=_ DO NOT INSTALL unless this is your certificate (JMeter root CA), OU=Username: user, C=US" -keyalg RSA -keystore proxyserver.jks -storepass {redacted) -keypass {redacted) -validity 7 -ext bc:c' failed, code: 1
keytool error: java.io.FileNotFoundException: proxyserver.jks (Access is denied)

原因:JMeter bin目录不可写,因为JMeter默认在bin目录中创建密钥库。

解决:在jmeter.properties中定义属性告诉JMeter在哪里创建密钥库。如下所示

proxy.cert.directory=<JMeter bin directory>

参考:https://wiki.apache.org/jmeter/TestRecording210

二 基本步骤

1.进入JMETER_HOME / bin目录,点击jmeter.bat启动Jmeter。

2.在菜单栏上选择模板,在列表中选择录制模板,生成完整的测试计划。

3.在HTTP Request Defaults中输入,协议:https,服务器名称或IP:test.com,端口号:443,路径:留着空白。

这样做可以过滤掉很多不必要的请求。

4.在User Defined Variables中定义以后可能需要参数化的变量,比如username=xiaoming,password=123456。

这样做的好处是,接下来当你开始录制请求时,所有的请求中只要包含参数值为xiaoming和123456,均会被${username}和${password}代替,方便录制结束后进行参数化。

5.在HTTP(S) Test Script Recorder中,点击“启动”按钮。这将启动JMeter代理服务器,用于拦截浏览器请求。并首先将在JMETER_HOME / bin文件夹中生成名为ApacheJMeterTemporaryRootCA.crt的文件。证书生成可能需要一段时间,在此期间GUI将无响应。证书生成完成后,GUI将显示一个弹出对话框,其中包含根CA的证书详细信息。该证书需要由浏览器安装,以便它接受JMeter生成的主机证书。注意:该证书有效期7天。

6.浏览器导入证书并设置代理。

打开Firefox浏览器-->工具-->选项-->搜索“证书”-->查看证书-->在证书颁发机构一栏,点击“导入”-->选择Jmeter/bin目录下的ApacheJMeterTemporaryRootCA.crt文件,点击“打开”-->勾选“信任由此证书颁发机构来标识网站”,点击“确定”-->回到证书管理器,在证书颁发机构一栏,可看到此证书存在于列表中,点击“确定”,证书导入完成。

接着,搜索“代理”-->点击“设置”-->选择“手动代理配置”,http代理输入localhost,端口输入8888(与Jmeter代理服务器端口一致),勾选“为所有协议使用相同代理服务器”,点击“确定”,代理设置完成。

注意:测试完成之后记得要把代理设置修改回来,否则会无法上网。

7.Jmeter设置SSL。回到Jmeter-->点击“ok”,证书弹窗消失-->点击“选项”-->点击“SSL管理器”-->选择Jmeter/bin目录下的ApacheJMeterTemporaryRootCA.crt文件,点击“打开”。

8.录制请求。回到浏览器界面,在在顶部的地址栏中输入http://test.com/index.html(将test.com替换为您的网站地址)。并按Enter键。进行登录-修改信息(初始化-编辑-保存)-退出等一系列场景操作,完成之后,关闭Jmeter代理服务器,结束录制。

注意:开始录制时,Jmeter可能会弹出输入KeyStore Password密码提示,默认密码是password,输入后就能录制了。

9.在Jmeter中,根据实际情况,配置线程属性,添加CSV数据文件设置,.添加集合点,添加动态关联,添加监听器等。

注意:为了进行关联,我们可以使用正则表达式提取器,JSON Extractor等后置处理器从请求中获取数据,并将其注入另一个请求中。要查找要关联的数据,最简单的方法是使用“查看结果树”中的“搜索”功能。

10.在运行测试计划之前验证脚本(右键单击Thread Group-->点击Validate-->查看View Results Tree是否运行正常),保存测试计划(千万千万别忘记保存测试计划哟)。

11.开始运行测试。建议调试阶段使用GUI,使用非GUI(命令行)进行负载测试。使用以下命令,在测试结束时,将生成一个HTML报告。

jmeter -n -t [jmx文件] -l [结果文件] -e -o [输出文件夹的路径]
比如:
jmeter -n -t test.jmx -l testlogfile -e -o ./output

D:\software\apache-jmeter-3.1\bin>jmeter -n -t test.jmx -l testlogfile -e -o ./output
Writing log file to: D:\software\apache-jmeter-3.1\bin\jmeter.log
Creating summariser <summary>
Error in NonGUIDriver java.lang.IllegalArgumentException: Report generation requ
ires csv output format, check 'jmeter.save.saveservice.output_format' property
D:\software\apache-jmeter-3.1\bin>解决方法:修改jmeter.properties文件中的参数值为jmeter.save.saveservice.output_format=csv

运行上述命令报错及解决方法

实践总结:

1.录制后,可能由于误操作会出现很多多余的请求,必须自己手动删除。

2.录制后的请求很乱,不易于理解。可以手动将请求改名,并添加多个事务控制器,将关联的请求添加到同一个事务控制器中,这样既有利于区分场景,又便于理解。

3.本次测试中,开发给我的网址是一个IP地址,录制时总是报如下错误:

2018-12-25 17:34:35,901 ERROR o.a.j.p.h.p.Proxy: [51035]  Problem with keystore
java.io.IOException:   >> keytool 错误: java.lang.RuntimeException: java.io.IOException: DNSName components must begin with a letter <<
Command failed, code: 1
'keytool -genkeypair -alias 192.168.11.11 -dname "cn=192.168.11.11, o=JMeter Proxy (TEMPORARY TRUST ONLY)" -keyalg RSA -keystore proxyserver.jks -storepass {redacted} -keypass {redacted} -validity 7 -ext san=dns:192.168.11.11'

解决方法:在本机上,手动将IP地址映射为域名。比如在C:\Windows\System32\drivers\etc\hosts文件中加入:192.168.11.11 test.com,此时就可以在浏览器中输入test.com来访问开发所给的网址了,而且还不会报错。

4.每次开始录制时,Jmeter弹出输入KeyStore Password密码提示,默认密码是password,输入后总是报如下错误:

2018-12-26 09:04:33,394 ERROR o.a.j.u.SSLManager: Problem loading keystore: Invalid keystore format
java.io.IOException: Invalid keystore format

这个报错我暂时没有解决,只知道,重新开始录制,多试几次就不报错了。

5.Jmeter录制后,每个请求会带有一些参数,其中很多参数都是取自前一个请求的服务器返回结果,此时你就需要手动将其进行关联。

6.负载测试时,最好使用命令行运行,小负载测试时,可以使用GUI界面运行,此时一定要把查看结果树、图形结果、断言结果等监听器全部关掉(只保留一个聚合报告即可,配置将结果输出到jtl文件中),因为它们真的非常影响性能。

7.当使用外网进行测试时,受网速的影响,白天和夜晚的测试结果差距很大。

8.此次测试我使用Jmeter,同事使用LR,对比发现结果相差很大。查找发现,主要原因时我们俩虽然都是用的一个无线网,但是同事的网没有限速,网速非常快,而我的网却限速了,网速很慢。另外,我俩的PC配置也不一样。后来我们就在同一台机器上运行测试了,发现结果相差不大。

9.可以将登录场景放在setup线程组(类似LR的init)中,退出场景放在teardown线程组(类似LR的end)中。

附网上相关文章:

官网1简单步骤

官网2补充说明

官网内容翻译

Apache JMeter录制HTTPS的方法及测试中常见问题解决(其中涉及了https工作原理及工作流程)

也许,这样理解HTTPS更容易

转载于:https://www.cnblogs.com/zhengna/p/10180998.html

jmeter录制https请求相关推荐

  1. jmeter 录制--https代理证书导入IOS手机

    苹果手机(没越狱)无法像安卓那样直接通过USB传递文件,只能通过网络下载的方式去下载文件. 所以jmeter的https代理证书要跟fiddler的证书一样去下载才能安装. 步骤一: 先把jmeter ...

  2. Jmeter 录制https(五)

    jmeter录制的篇章中第一篇讲解的是录制http: 应该有小伙伴使用jmeter录制,尝试访问https://www.baidu.com/,出现下图的情况,而无法进行下面的操作 启动http代理时, ...

  3. jmeter之-用Firefox录制https协议证书问题

    录制脚本的时候,比如录制https协议的百度网站 https://www.baidu.com ,所有录制设置均正常,但是在jmeter录制控制器里面就是没有任何录制的请求. 这个时候提示说证书不对 1 ...

  4. jmeter用Firefox录制https协议证书问题解决

    录制脚本的时候,比如录制https协议的百度网站 https://www.baidu.com ,所有录制设置均正常,但是在jmeter录制控制器里面就是没有任何录制的请求. 这个时候提示说证书不对 1 ...

  5. Jmeter录制接口自动化

    一.安装Jmeter(参考上一篇帖子) 安装JDK,配置环境变量JAVA_HOME,电脑Java环境正常 配置Jmeter环境变量:JMETER_HOME; CLASSPATH正常 官网地址:Apac ...

  6. jmeter录制脚本(JMETER录制脚本登录失败 但后面脚本运行成功)

    求按键精灵.刷撞神的脚本...我用按键精灵不能录制脚本..进去后? LZ到我共享去下载一下 按键精灵和减威望脚本 全部放到桌面 打开按键精灵之后 点下上面的神盾 然后把减威望脚本导入就可以了 直接最小 ...

  7. Jmeter测试并发https请求成功了

    Jmeter2.4 如何测试多个并发https请求,终于成功了借此机会分享给大家 首先要安装jmeter2.4版本的,而且不建议大家使用badboy,因为这存在兼容性问题.对于安装,我就不讲了,我就说 ...

  8. jmeter安全证书_HTTPS证书生成及Jmeter中发送HTTPS请求

    HTTPS证书生成 在Jmeter中发送HTTPS协议请求,需要有SSL证书支持,而对于一个已知网站我们是可以自己生成该网站的SSL证书,并运用到Jmeter中,使Jmeter能发送HTTPS请求成功 ...

  9. 【Jmeter篇】你有Fiddler、Charles抓包,我有Jmeter录制Web和App端

    一.录制web端设置 1.启动jmeter,测试计划-添加-非测试元件-HTTP代理服务器 2.HTTP代理服务器设置,并启动 端口设置为8888,目标控制器选 测试计划>HTTP代理服务器,点 ...

最新文章

  1. php-fpm开启报错-ERROR: An another FPM instance seems to already listen on /tmp/php-cgi.sock
  2. python实现复制文件功能
  3. IEC61850电能质量1~50次谐波有效值建模
  4. C++ code:string stream(string流)学习大全
  5. 第一次scrum冲刺
  6. python中string数据库_python – 将字节字符串保存到数据库中的v...
  7. 求┐(P双向Q)∧(┐P蕴含R)的主析取范式、主合取范式
  8. oracle cost小 比较慢,Oracle数据库中有关CBO优化的三个问题
  9. php垂直居中代码_纯css实现水平和垂直居中
  10. mysql concat 索引_mysql-查看数据库、索引、表大小
  11. 当前NLP迁移学习中的一些问题
  12. 数据呈现—ListView x Adapter
  13. 联想服务器怎么安装虚拟机,Windows 8里的虚拟机Hyper-V的安装及使用
  14. 可发弹幕php,JavaScript直播评论发弹幕切图功能点集合效果代码
  15. 电路matlab仿真,电路matlab仿真.doc
  16. 阿里云SFTP配置方法及故障排查
  17. ARM920T虚拟地址原理分析及实现
  18. 怎样从任务管理器打开计算机,怎么打开任务管理器|任务管理器在哪里打开
  19. SRC——教育漏洞平台
  20. oppo手机文件共享媒体服务器,网件:ReadyNAS特色功能之媒体服务器

热门文章

  1. 发那科机器人override指令_机器人控制指令介绍(二)
  2. 京瓷4501i打印机扫描步骤_京瓷复印机扫描设置方法–京瓷复印机扫描到电脑设置...
  3. 前端酷炫的n个UI设计效果网站
  4. ChatGPT一路狂飙,NVMe SSD能否应对性能挑战?
  5. 移动互联网时代的四大特征
  6. 《移动互联网时代的信息安全与防护》2021期末试卷答案
  7. 搜索引擎中同义词的挖掘及使用
  8. 使用GrowPart工具完成对LVM逻辑卷的在线热扩容
  9. ExtrudeGeometry
  10. Java 列举数组中任意元素和为定值的组合