JMeter脚本录制的原理及如何录制http和https协议的脚本

前言

今天录制脚本,发现点击后系统没反应,以为是项目组的特殊设置,当时并未深究,便直接用浏览器抓包,自己手写脚本。

谁知写完执行时,却出现了奇怪的错误:

明明是一个登录请求,下面却催生出两个子请求来,而且,即便是绿色的这个请求,响应数据也不对。

费了好大劲,最终却发现,这个项目全部都是https请求,而我,习惯性的将协议写成了http。

由此想到,如果第一步脚本录制的时候就停下来研究一下为什么不能录制,或许,还能少走些弯路。有时候,想要偷懒绕开某些困难,绕了一大圈发现,还是要回去面对。

JMeter脚本录制的原理

启用时,JMeter相当于一个HTTP(S)代理服务器(proxy),捕获和记录用户与应用程序交互的网络请求和响应。

当用户通过浏览器与应用程序进行交互时,JMeter代理服务器会拦截并记录这些请求(包括请求的URL、HTTP方法、请求头、请求参数等),然后再将请求发送给目标服务器。这个过程就实现了脚本的录制。

按照官网的说法,它目前支持HTTP和HTTPS协议的请求,其它的,比如FTP协议,它还处理不了。

JMeter脚本录制器设置

在Test Plan上点击右键,选择Add->Non-Test Elements->HTTP(S) Test Script Recorder,即可添加一个脚本录制器:

添加后界面如下:

几个重要的配置项:

1、Port设置

作为代理服务器,JMeter通过该端口号监听HTTP/HTTPS请求。默认是8888,也可以修改成任意其它未被占用的端口号。

2、Target Controller

你希望录制的脚本被保存到哪里。可以创建一个线程组来存放,也可以先保存在脚本录制器中,再有选择地复制到目标线程组中。

3、过滤设置

如下图,添加建议排除项,过滤掉页面元素请求。

为浏览器设置代理

我通常在Windows左下角的搜索框搜索代理服务器设置来打开操作系统的设置面板,如下:

  1. 启用"使用代理服务器";
  2. 地址栏填入127.0.0.1,表示本机;
  3. 端口填入与Jmeter中Port一样的值;
  4. 点击保存。

这一系列设置表示系统将使用127.0.0.1:8888作为代理服务器。也即本机的8888端口,就是JMeter脚本录制器了。

录制HTTP请求

要录制HTTP协议的请求,到这里就可以开始使用了。在JMeter的脚本录制器中点击Start,出现证书提示信息,点击OK即可开始录制了。

如果录制的操作比较多,可以在每一步操作前设置事务名称,这样录制完成后,请求名称前面会出现事务名称作为前缀,帮你区分不同操作所触发的请求。

录制HTTPS请求

如果要录制HTTPS请求,执行时可能目标网站无法响应,这是因为没有识别到受信任的证书。所以我们需要为浏览器添加受信任的根证书。

安装根证书

在脚本录制器中点击start的时候,我们曾看到过这样一个信息:

它告诉我们,在jmeter的bin目录下,生成了JMeter的根证书ApacheJMeterTemporaryRootCA.crt,你可以将它添加到浏览器证书管理中受信任的根证书下面。

注意事项

1、这个证书的有效期是7天。这个时间由配置项proxy.cert.validity控制,如想要修改,可通过修改Jmeter.properties文件中的该配置项实现。

2、只有在JDK1.8以上时才会自动生成这个根证书。如果JDK版本较低,需要有一些手动配置,可参考官网Apache JMeter - User's Manual: Component Reference

不同浏览器安装方式略有不同,官网有详细的操作步骤。我用Chrome,步骤如下:

浏览器设置->隐私与安全-->安全-->管理证书-->受信任的根证书颁发机构-->导入, 选择证书导入,然后重启浏览器。

然后按照正常的步骤启动录制即可。

相关推荐
文人sec3 天前
性能测试-jmeter9-逻辑控制器、定时器压力并发
测试工具·jmeter·性能优化·模块测试
CesareCheung4 天前
JMeter分布式压力测试
分布式·jmeter·压力测试
测试界清流4 天前
jmeter使用技巧
jmeter
春时似衿里4 天前
jmeter配置数据库连接步骤
数据库·jmeter
新知图书4 天前
JMeter的安装部署
jmeter
程序员杰哥4 天前
什么是Jmeter? Jmeter工作原理是什么?
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·测试用例
乐神嘎嘎嘎4 天前
Jmeter测试
jmeter
卓码软件测评4 天前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
BatyTao5 天前
Jmeter执行数据库操作
数据库·jmeter
二宝哥5 天前
性能测试工具Jmeter之java.net.BindException: Address already in use
jmeter