Jmeter(二十七) - 从入门到精通 - Jmeter Http协议录制脚本(详解教程)

2023-11-06

1.简介

LoadRunner的录制功能让性能测试脚本编写对于不懂代码的人变成了一件容易上手的事,但是由于LoadRunner收费高昂,庞大,一般企业很少用,除非必须使用。Jmeter作为性能测试中的王者也少不了提供录制功能。Jmeter的录制除了自身提供的HTTP代理方式进行录制的原理是解析网络数据包,按HTTP协议包装成Http Request、Http Response等对象,这些对象就是我们可以清楚方便认识的东西。

2.Jmeter配置代理进行录制

2.1浏览器配置代理

1.打开浏览器(宏哥这里以IE11为例)顺着右上角

 -【Internet选项】-【连接】-【局域网设置】进入如图所示页面:

 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click 

2.在“代理服务器”中按上图进行设置,可以把“localhost”换成127.0.0.1,8080换成你想设置的端口,主要不要与别的端口产生冲突,如果有,请换成别的端口,一般4位的端口冲突的机会比较少;配置好以后点击“确定”按钮。

2.2Jmeter中配置代理

 1.首先在JMeter中添加一个线程组,如下图所示:

 2.添加HTTP代理服务器节点,如下图所示:

 

 

3.设置代理服务器,端口号设置就是我们在浏览器中设置的端口,如下图所示:

4.目标控制器:决定将来我们录制的脚本放在那个目录下(测试计划是一颗目录树,这个目录就是树中的一个节点)。你可以在【测试计划】-【线程组】下面添加节点,然后指定脚本放在此节点,在线程组增加了【简单控制器】节点,然后就可以在“目标控制器”处选择到它。如下图所示: 

5.分组:录制脚本的时候,会增加很多节点,这些节点我们可以给它分个组,方便我们查看和管理。对于http请求我们可以把每一个URL看成一个组,这里可以更好地理解。分组有如下选项,如下图所示:

选项参数说明:

(1)不对样本分组:罗列出录制到的所有http请求。

(2)在组间添加分隔:加入以分割线命名的简单控制器。

(3)每个组放入一个新的控制器:每个URL产生的请求放在一个 控制器下。

(4)只存储每个组的第一个样本:我们知道一个URL产生的HTTP请求可能不止一个,一张图片、一个样式都会是一个HTTP请求,录制时将会产生很多的HTTP请求,但有时候测试我们需要考虑缓存,实际上一些图片不用每次都去下载,我们也不关心这些图片产生的负载,另外对于互联网多数会用的CDN等图库来存储这些图片、CSS等静态资源。所以理论上我们可以在脚本中忽略它,但是我们必须根据实际情况来选择是否忽略。因此如果忽略,我们就可以选择此项,只录制产生动态数据的HTTP请求。

(5)每个请求放入一个新的事务控制器:宏哥用大白话解释就是每个URL的请求放入一个事务中,不管它有多少HTTP请求,只要是这个URL请求产生的。

其他界面参数说明:

(1)记录HTTP信息头:把Header头信息也录制下来。

(2)添加断言:这个大家都知道,就是添加检查点,在录制的时候加入空的检查点,后续我们自己填写断言(检查)规则。

(3)Regex matching“检查点用正则表达式来匹配内容。

(4)Http Sampler settings:与“http请求”设置方法一样。

 

2.3开始录制

1.全部配置好以后,在【HTTP代理控制器】中按下【启动】。然后子啊浏览器中浏览Web页面(你要测试的功能),就可以录制下这些HTTP请求。录制状态下的“启动”按钮是灰色的不可以点击,非录制状态下的“启动”按钮可以点击。

2.在录制时每个js、png、swf及动态请求(需要服务器动态取数据)都会录制下来。所以我们选择“只存储每个组的第一个样本”,但这样通常优惠有动态请求被漏掉,所以HTTP代理来进行录制还不是很高效,因此我们换一个工具(Badboy)来录制,甚至有能力的话,我们直接手写脚本(宏哥推荐这种方式)。

注意:
现在越来有多的系统或者网站的前端架构使用动态加载的方式(Ajax+JS+JSON)来处理,对于这种应用,我们使用JMeter或者LoadRunner进行录制都不能完成任务。不相信的童鞋们可以录制一下去哪儿官网。

3.点击启动后,会提示:Jmeter导入https安全证书,启动Jmeter的HTTP代理服务器,会在Jmeter安装路径的bin目录下生成一个安全证书文件:ApacheJMeterTemporaryRootCA.crt。如下图所示:

4.在Jmeter菜单选项-> SSL管理器,导入jmeter的bin目录下的安全证书文件ApacheJMeterTemporaryRootCA.crt。

5.点击SSL管理器,查看导入的证书,如下图所示:

 

6.在JMeter的bin目录下,找到证书双击打开证书,将证书导入浏览器中,如下图所示:

7.代理服务器重新启动后,会打开如下所示界面,Recorder:Trnsactions Control。此时开始录制脚本,在浏览器中输入要访问的网址,进行相关操作。这里以度娘为例,录制访问度娘,然后查询:北京-宏哥的脚本。

这个弹框用处,为了方便快捷的填写录制时,需要编写的事务名称所使用;不需要每次去打开jmeter的界面去修改事务名称,大家可以忽略它。

8.在浏览器输入度娘网址后,进入度娘后,输入框输入:北京-宏哥,点击查询。查看Jmeter线程组下的录制控制器是否已经有请求产生。若产生请求,录制脚本成功。如下图所示:

 

9.录制成功后,请求中也会记录发送的信息,如服务器名称、端口号、路径、和请求时的参数等,如下图所示:

 10.选中“录制控制器”,右键添加“观察结果树”,运行脚本,对所录制的脚本进行调试,这里是验证录制登录成功的脚本,如下图所示:

 11.精简脚本,对除访问度娘,查询北京-宏哥以外的请求进行删除。如下图所示,在察看结果树可以看到运行后的脚本响应,在响应体中看到<百度一下>,代表访问成功,看到北京-宏哥的查询结果,代码查询成功,至此录制完成。关闭Jmeter代理服务器。如下图所示:

 查询请求的结果,如下图: 

 

3.小结

 1.可能有些同学遇到Jmeter录制前访问正常,设置代理却无法访问。

根据宏哥的分析可能性有几种,一类是工具本身的代理进程未启动,一类是端口被占用,另一类是证书问题。

可能性最大的都是证书问题,http的请求可能还好,https的请求就可能涉及到证书。安装bin目录下的证书即可(具体证书安装的方法可以问一下度娘,不过也简单类似傻瓜式的安装软件下一步,下一步就可以了)。其实按照宏哥的步骤应该是没有什么大问题的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jmeter(二十七) - 从入门到精通 - Jmeter Http协议录制脚本(详解教程) 的相关文章

  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 网站(Google 和/或您)应如何处理 Accept-Language 标头?

    很长一段时间以来 我对谷歌在以下情况下的行为并不满意 并且在无意中注意到之后80 其他人 https stackoverflow com questions 1011167 what are common ui misconceptions
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • Python数据结构-----leetcode232.用栈实现队列

    目录 前言 方法讲解 示例 代码实现 232 用栈实现队列 前言 我们都知道队列的特征是先进先出 就跟排队一样先到先得 而栈的特征是后进后出 那这里我们怎么去通过两个栈来实现一个队列的功能呢 这一期我们一起来学习吧 方法讲解 这里需要准备好
  • 订单业务中的重要问题:超卖问题的解决方案

    订单业务中的重要问题 超卖问题的解决方案 我在做过的一些项目中都涉及到了订单的业务 如果你的项目中有关于订单的业务模块 那肯定说明你的项目中有卖商品的功能 所以有买卖场景就面临一个很常见的一个问题 那就是超卖问题 下面我就整理一下我在做项目
  • MyBatis与JDBC连接数据库所使用的url之间的差异

    1 在JDBC连接里是这样的 连接无误 2 在Mybatis里配置要这样 3 主要区别 说明 JDBC 方式连接 MySQL 不需要对 进行转义 而在Mybatis里要求一定要对 转义 4 如果是在properties文件里 不用转义的 在
  • IP静态路由实验报告

    一 将192 168 1 0 24划分为4个网段 192 168 1 0 26 192 168 1 64 26 192 168 1 128 26 192 168 1 192 26 1 取192 168 1 0 26继续划分 为主干道添加IP
  • Spring 加载、解析applicationContext.xml 流程

    概要 Spring 框架使用了BeanFactory 进行加载 xml 和生成 bean 实例 下面我们分析下Spring加载xml文件的过程 spring 版本是最新的 4 3 9 release 版本 示例 XmlBeanFactory
  • java 转换tif图片为jpg,解决转换后颜色异常问题

    java 转换tif图片为jpg 解决转换后颜色异常问题 说明 正常情况下 tif转换jpg图片会出现颜色失真 丢失部分颜色 原因是两种图片的色彩模式不同 jpg默认使用的是RGB色彩模式 TIF默认使用的是CMYK色彩模式 RGB的色域比
  • 有关“ModuleNotFoundError: No module named ‘flask._compat’”错误的解决过程

    在进行flask安装后 运行程序的过程中出现了 ModuleNotFoundError No module named flask compat 的错误 在查询了多个网站后给出了不同的答案 其报错原因是flask版本过高导致无法识别该语法
  • 仿京东 项目笔记2(注册登录)

    这里写目录标题 1 注册页面 1 1 注册 登录页面 接口请求 1 2 Vue开发中Element UI的样式穿透 1 2 1 v deep的使用 1 2 2 elementUI Dialog内容区域显示滚动条 1 3 注册页面 步骤条和表
  • 服务器i5 和e系列,e5和i5有什么区别

    两个系列的处理器主要在设计规格和面向范围方面存在区别 设计规格上 前者核心数更多 多线程能力更强 但睿频能力相对较弱 后者核心数较少 多线程能力不如前者 但睿频能力更强 面向范围上 前者主要面向服务器 嵌入式等企业设备 后者主要面向消费级硬
  • (LeetCode)全排列

    目录 题目要求 题目理解以及思路分析 代码分部讲解 第一部分 第二部分 题目要求 给定一个不含重复数字的数组 nums 返回其 所有可能的全排列 你可以 按任意顺序 返回答案 示例 1 输入 nums 1 2 3 输出 1 2 3 1 3
  • 规则引擎Drools使用 第十一篇 Drools 的高级语法之LHS增强

    前面我们已经知道了在规则体中的LHS部分是介于when和then之间的部分 主要用于模式匹配 只有匹配结果为true时 才会触发RHS部分的执行 下面我们会针对LHS部分学习几个新的用法 目录 复合值限制in not in 条件元素eval
  • 升压电路(BOOST)与降压电路(BUCK)

    一 电路中产生电流的条件是 1 电路里必须有电源供电 2 电路必须形成闭合回路 降压元器件 升降压电路构成的核心元器件 1 电感 储存能量 电感是无法突变的 工作状态是线性的 2 二极管 3 mos管 首先先分清楚mos是N mos还是P
  • Qt全局宏和变量

    1 Qt 全局宏定义 Qt版本号 QT VERSION major lt lt 16 minor lt lt 8 patch 检测版本号 QT VERSION CHECK major minor patch major lt lt 16 m
  • virtio代码分析(一)-qemu部分

    virtio内容众多 代码分布于qemu linux dpdk等中 而且分为frontend和backend 可以运行于userspace也可以运行于kernelspace 极其难以理解 不看代码只看原理性文档往往流于表面 只有真正看懂了代
  • 大数据准备——安装JDK

    1 解压Linux版本的JDK压缩包 命令行敲入 mkdir home software cd home software rz 上传jdk tar包 这里添加自己tar包的名字 如果rz命令不能使用 先执行yum install lrzs
  • C语言关键字解析

    在C语言中有32个关键字 如下表所示 释 1 声明 1 告诉编译器 这个名字已经匹配到一块内存上 2 告诉编译器 这个名字已经预定了 其他地方再也不能用它来作为变量名或对象名 2 定义 编译器创建一个对象 为这个对象分配一块内存空间 并给它
  • 前端 配色网站 自用 免费 颜色很全

    1 中国色彩 http zhongguose com 3 ColorHex https www colorhexa com 4 优色网配色专区 https color uisdc com 4 ColorDrop https www colo
  • cuda学习

    GPU中有多个流处理器SM 当一个线程块被指定给一个SM后 里面的线程会被划分成线程束 32个线程 在SM上交替运行 也就是说SM上一个时刻只有一个线程束在运行 函数修饰符 global 表示该函数只能在GPU上运行 但是可以从CPU或者G
  • qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method

    最近在做一个网络音乐播放器时 由于出现qt network ssl QSslSocket cannot call unresolved function SSLv23 client method 而不能播放网络歌曲 上网搜了半天 都说要在电
  • Jmeter(二十七) - 从入门到精通 - Jmeter Http协议录制脚本(详解教程)

    1 简介 LoadRunner的录制功能让性能测试脚本编写对于不懂代码的人变成了一件容易上手的事 但是由于LoadRunner收费高昂 庞大 一般企业很少用 除非必须使用 Jmeter作为性能测试中的王者也少不了提供录制功能 Jmeter的