转 jmeter录制https请求
jmeter录制https请求
工具: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_45 set PATH=%JAVA_HOME%\bin;%PATH%
类似地,对于Unix,更新脚本“jmeter”或“jmeter.sh”:
JAVA_HOME=<PATH TO JDK> # for example JAVA_HOME=/usr/java170 export 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
实践总结:
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)中。
附网上相关文章:
转 jmeter录制https请求的更多相关文章
- jmeter录制https请求
工具:Jmeter4.0 + Java1.8 需求:对某https网站进行 登录-修改信息-退出 场景的压力测试 方法:使用Apache JMeter HTTP(S) Test Script Reco ...
- jmeter录制https请求时,浏览器每一个请求都 跳 不安全访问页面的解决方法
1.关闭所有浏览器 2,使用终端 输入 : /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ignore-certif ...
- Apache JMeter录制HTTPS的方法及测试中常见问题解决
Jmeter录制https请求,录制不到的常见解决方案: cmd java -version 显示为1.7 以jdk1.7为例,打开\Java\jre7\lib\security 中的,java.se ...
- Jmeter录制https协议不能跳转成功(证书导入)
原文: http://www.cnblogs.com/Lam7/p/7154120.html 录制脚本的时候,比如录制https协议的百度网站 https://www.baidu.com ,所有录制 ...
- charles录制https请求
之前一直用windows系统,抓包什么的都是用的fiddler或者wireshark,操作比较简单,扩展性也比较强,现在因为工作原因换了mac,在网上一直没有找到fiddler的mac版本,就只能切换 ...
- jmeter测试https请求之导入证书
jmeter测试https请求 公司最近在搞全站HTTPS改造,进一步提高网站的安全性,防止运营商劫持.那么,改造完成后,所有前后端的URL将全部为https. So ,研究下怎么用Jmeter访 ...
- jmeter 之 https 请求
本文为自己学习总结,转载需说明出处. jmeter发送https请求需要在巨jmeter中导入被测试网站的安全证书. 一.通过浏览器登录对应的网站导出安全证书.下面操作以360浏览器为例: 二.把导出 ...
- Jmeter录制HTTPS
Jmeter有录制功能,录制HTTPs需要增加一个证书配置,录制步骤如下: 1.打开jmeter,添加线程组.线程组右键,逻辑控制器>录制控制器 工作台 右键 非测试元件 >HTTP代理服 ...
- Jmeter录制HTTPS 补充
Jmeter有录制功能,录制HTTPs需要增加一个证书配置,录制步骤如下: 1.打开jmeter,添加线程组.线程组右键,逻辑控制器>录制控制器 工作台 右键 非测试元件 >HTTP代理服 ...
随机推荐
- Python进阶——什么是上下文管理器?
在 Python 开发中,我们经常会使用到 with 语法块,例如在读写文件时,保证文件描述符的正确关闭,避免资源泄露问题. 你有没有思考过, with 背后是如何实现的?我们常常听到的上下文管理器究 ...
- 如何去掉ul和li前面的小黑点
做网站的时候经常会遇到如上图所示的小圆点,难看不说,还容易影响布局,下面就介绍几种消除小圆点的方法: 1. 找到相关CSS文件,在.ul 和.li 部分添加: 1 list-style: none; ...
- JXL封装不能使用static关键字问题
最近要做一个Excel导出的功能,由于文件不大,涉及到了很多Excel表格样式和公式计算,我采用了JXL的方式导出.由于逻辑大多是金额,所以我在封装JXL的时候写了两个静态final变量,代码如下: ...
- CSS系列 (04):盒模型详解
盒模型 CSS盒模型分成W3C标准盒模型和IE模型 W3C标准盒模型(默认):box-sizing: content-box padding和border都会撑开盒子,改变盒子的宽度高度 总宽度:wi ...
- 将Maven镜像更换为国内阿里云仓库
1.国内访问maven默认远程中央镜像特别慢 2.用阿里的镜像替代远程中央镜像 3.大部分jar包都可以在阿里镜像中找到,部分jar包在阿里镜像中没有,需要单独配置镜像 换为国内镜像,让你感受飞一般的 ...
- Maven的工程类型有哪些?
POM工程:POM工程是逻辑工程.用在父级工程或聚合工程中.用来做jar包的版本控制. JAR工程:将会打包成jar用作jar包使用.即常见的本地工程 - Java Project. WAR工程:将会 ...
- 分布式一致性协议 Raft
分布式领域,CP模型下 数据一致性协议至关重要,不然两边数据不一致容易出现数据读混乱问题.像Etcd Consul zookeeper Eureka ,Redis集群方案这些中间件 都有一致性算法来 ...
- 基于http的netty demo
1.引入netty的pom <dependency> <groupId>io.netty</groupId> <artifactId>netty-all ...
- TurtleBot3使用课程-第二节a(北京智能佳)
目录 1.[第3类]LRF(LDS)传感器 2 1.1 传感器包安装 2 1.1.1 传感器端口访问设置 2 1.1.2 运行hlds_laser_publisher节点 2 1.1.3 在RViz中 ...
- 为什么Java中lambda表达式不能改变外部变量的值,也不能定义自己的同名的本地变量呢?
作者:blindpirate链接:https://www.zhihu.com/question/361639494/answer/948286842来源:知乎著作权归作者所有.商业转载请联系作者获得授 ...