一、HTTP Request 采样器简介
宝子们,JMeter 里的 HTTP Request 采样器可厉害啦,它就像是一个万能的网络小助手,能模拟各种各样的网页请求,不管是日常的网页浏览、网上购物,还是登录各种平台,它都能帮我们检测系统在这些操作下的性能表现。接下来,咱就深入了解一下这个神奇的采样器吧。
二、添加和设置 HTTP Request 采样器
在 JMeter 里找到线程组,右键轻轻一点 “添加”,就能瞅见 HTTP Request 采样器啦。这就像是在你的测试工具百宝箱里找到了一把关键的钥匙,开启了模拟网页请求的大门。
三、关键参数深度解析
这些是 HTTP Request 采样器常用的配置项,接下来我们逐一解析,让大家彻底搞明白每个参数的作用和使用场景哦。
(一)协议(Protocol)
这就好比你选逛街的地方,是普通集市(http)还是高级商场(https)。比如说,我们要测试一个普通的资讯网站,像 “example.com”,这种情况下使用 http 协议就足够了,因为它主要是获取一些公开的文字信息,对安全性要求不高。而当我们测试像网上银行或者电商支付页面这类涉及敏感信息和资金交易的网站,如 “bank.example.com”,就必须使用 https 协议,它能对数据进行加密传输,就像给数据穿上了一层坚固的铠甲,防止信息被窃取。通过这样的对比,大家是不是能更清楚地理解 http 和 https 协议在测试中的不同应用场景啦?
(二)服务器名称或 IP(Server Name or IP)
这就是商场的地址,比如 “www.taobao.com”,宝子们可千万要写对哦,要是写错了,那 JMeter 就像个迷路的孩子,根本找不到要测试的地方,也就没办法模拟用户在这个网站上的操作啦。
(三)端口号(Port Number)
一般来说,http 是 80,https 是 443,这就像是商场的大门号。不过有些网站有自己的 “秘密通道”,有特殊的端口号,那咱就得按实际情况填。要是不填对,就像找错了门,进不去商场,测试也就没法正常进行咯。
(四)方法(Method)
这是你在商场的动作哦,不同的动作对应不同的 Method。常用的方法有 GET、POST、PUT、DELETE,每种方法都有其特定的适用场景。
- GET:就像你只是看看货架上有啥,用于获取资源。比如你在百度搜索框里搜东西,就是用 GET 方法向服务器请求搜索结果页面,它只是从服务器获取数据,不会对服务器上的资源进行修改。在这种情况下,请求的参数会显示在 URL 后面,就像你告诉店员你想看的商品类别,直接说出来让大家都能听到(可见)。
- POST:这就像你把东西卖给店员,让店员检查是不是合格,用于向服务器提交数据,通常会改变服务器的状态。比如登录网站,得把用户名和密码传给服务器验证,这就得用 POST 方法,因为用户名和密码是敏感信息,放在 URL 中不安全,而且登录操作会改变服务器上的用户登录状态。
- PUT:可以想象成你要更新货架上某个商品的信息,它用于向服务器上传资源或更新资源,并且是幂等的,多次相同的 PUT 请求应该产生相同的结果。比如你要更新服务器上的一篇文章内容,就可以使用 PUT 方法。
- DELETE:这就像你从货架上拿走一个商品,用于从服务器删除资源,也是幂等的,多次相同的 DELETE 请求与一次 DELETE 请求的效果相同。例如,你要删除服务器上的一个文件或者一条记录,就可以使用 DELETE 方法。
(五)路径(Path)
这相当于商场里的店铺位置,比如 “/search”,这可能就是搜索功能对应的店铺。再加上参数,就像跟店员说要红色 S 码衣服,就在参数里写 “color=red&size=S”。比如你要测试一个电商网站的商品筛选功能,路径可能是 “/product/filter”,参数可以是 “category=clothes&priceRange=50 - 100”,这样就能精准地模拟各种操作啦,是不是很神奇?
(六)Content encoding(内容编码)
这就像是你和店员交流用的语言编码,一般情况下,保持默认的 UTF - 8 就行,它能确保 JMeter 和服务器之间能正确地理解和传输包含各种部位的数据,就像你和店员都用普通话交流,不会出现听不懂的情况。但如果服务器有特殊的编码要求,那咱就得按照它的要求来设置,不然就会出现乱码,就像你和店员说外语,互相听不懂,那就没法好好测试啦。
(七)Redirect Automatically(自动重定向)和 Follow Redirects(跟随重定向)
有些网站可调皮了,你访问一个页面,它会突然告诉你去另一个页面找东西(重定向)。
- 自动重定向(Redirect Automatically):当勾选这个选项时,当服务器返回重定向响应(如 301、302 状态码),JMeter 会像个机灵的小跟班,自动跟着新地址去获取真正的资源,不需要你手动操作。比如有些网站登录后会自动跳转到用户的个人主页,勾选这个选项,JMeter 就能自动跟上这个跳转,继续测试后面的页面,是不是很方便?这种方式对于简单的重定向场景,能快速获取最终的响应内容,提高测试效率。
- 跟随重定向(Follow Redirects):这和自动重定向类似,但它会记录更多关于重定向过程的信息,就像一个小侦探,会把重定向过程中的每一个细节都记下来。比如说经过了哪些跳转步骤,每个步骤的请求和响应情况等。当你对重定向的细节很关注,想要深入分析重定向是不是按照你预想的那样进行,有没有出现什么奇怪的情况,就可以勾选这个。比如测试一个复杂的电商下单流程,其中可能涉及多个页面的重定向,勾选这个就能更好地排查问题,看看是不是每个跳转都正常。在一些需要精确分析重定向路径和性能的场景中,这个选项就非常有用。
(八)Use KeepAlive(使用持久连接)
宝子们,想象一下,你在商场里逛,一会儿去这家店,一会儿去那家店,如果每次都重新找门进去(建立新连接),是不是很麻烦?勾选这个,JMeter 在发送多个 HTTP 请求到同一个服务器时,就会像个聪明的购物者,保持 TCP 连接不关闭,下次请求直接用这个已经建立好的连接,这样就能节省时间和资源,让测试跑得更快。特别是在高并发场景下,频繁地建立和关闭连接会消耗大量的时间和服务器资源。比如说,我们要模拟大量用户同时登录一个网站,然后进行一系列操作,如查看个人信息、浏览商品等,如果使用持久连接,就可以减少连接建立的开销,提高整体的测试效率和性能。
(九)Use multipart/form - data(使用 multipart/form - data 格式)
这是一种特殊的 HTTP 请求数据格式,主要用于在 POST 请求中上传文件或者二进制数据,同时也可以包含一些普通的表单数据。宝子们可以把它想象成一个神奇的魔法盒子,能把各种类型的数据都装进去发给服务器。比如说你要测试一个招聘网站的简历上传功能,或者一个社交平台的图片上传功能,就需要勾选这个,然后在下面的 “Files Upload” 部分设置好要上传的文件相关信息,这样 JMeter 就能像你真的在浏览器里选择文件并点击上传一样,把文件准确地发给服务器,看看服务器能不能正确接收和处理。
(十)Browser - compatible headers(浏览器兼容的头)
有些网站可挑剔了,会根据请求的头部信息来判断这个请求是不是从正规浏览器发出来的。勾选这个,JMeter 就会在请求中添加一些符合浏览器发送请求习惯的头部信息,让服务器以为这个请求是从浏览器发出来的,而不是从 JMeter 这个测试工具发出来的。这样就能避免一些因为头部信息不匹配而导致的问题,让测试更贴近真实情况。比如测试一些基于浏览器用户代理识别来提供不同内容或者功能的网站,勾选这个就能让测试结果更准确,就像你戴着合适的面具去参加派对,不会被人发现你是个 “外来者”。
(十一)Parameters(参数)
这就像是你去商店买东西,要告诉店员你想买什么东西(参数),以及数量、颜色等具体的要求(参数值)。在很多情况下,服务器需要根据我们发送的参数来返回不同的结果。比如在测试搜索功能时,你要告诉服务器你搜索的关键词是什么;在测试登录功能时,你要把用户名和密码作为参数发给服务器进行验证。宝子们只要在这儿把参数设置好,JMeter 就能像个聪明的顾客,准确地把你的需求传达给服务器,看看服务器的反应是不是符合预期。
假设我们要测试一个电商网站的商品搜索功能,我们可以在 Parameters 中添加 “keyword” 作为参数名,“手机” 作为参数值,这样就模拟了用户在搜索框中输入 “手机” 进行搜索的操作。
(十二)Body Data(请求体数据)
这是请求的正文部分,当你要发送一些比较复杂的数据给服务器,而且这些数据不是简单的参数形式时,就可以把数据写在这里。比如说服务器要求用 XML 格式或者 JSON 格式的数据来接收请求,你就可以把符合格式的请求数据写在这里,就像给服务器写一封详细的信,让它能够正确解析和处理。比如测试一个天气预报网站的获取天气数据接口,可能需要发送一个包含城市代码、日期范围等信息的 JSON 数据作为请求体,这样服务器就能根据你提供的信息准确地返回天气情况啦。
(十三)Files Upload(文件上传)
宝子们,这个就是专门用于设置文件上传的相关信息的。当你要模拟文件上传操作时,在这里点击 “添加” 按钮,在弹出的对话框中,选择本地的一个测试文件(比如一个 MP4 格式的视频教程文件),填写好文件名(要和本地文件名一致),文件类型(根据实际文件类型填写,这里是 “video/mp4”),以及文件路径(选择本地文件的完整路径)。然后和前面提到的 Use multipart/form - data 格式配合使用,JMeter 就会像你真的在浏览器里上传文件一样,把文件准确地发给服务器,看看服务器能不能正确接收和处理,是不是很厉害?
在设置文件上传时,我们还可以进一步设置上传的文件大小限制等参数。比如,有些网站对上传文件的大小有限制,如果我们要测试在文件接近或超过这个限制时系统的性能表现,就可以在 JMeter 中设置相应的文件大小参数,模拟这种边界情况的上传操作。
四、HTTP Request 采样器与其他组件结合使用示例
(一)与线程组结合模拟多用户并发操作
- 首先添加一个线程组,这就像是一群虚拟的顾客准备去逛商场啦。在线程组里设置好线程数(也就是虚拟用户数量),比如说设置为 100,这就代表有 100 个虚拟顾客同时在操作;设置 ramp - up period(启动时间间隔)为 10 秒,意味着这 100 个顾客会在 10 秒内陆续进入商场,就像商场开门后顾客慢慢进来,而不是一下子全涌进来,这样更贴近真实情况;循环次数设置为 5,就表示每个顾客会在商场里逛 5 圈(模拟重复操作 5 次)。
- 然后在这个线程组下面添加 HTTP Request 采样器,配置好要测试的网页请求,比如测试一个电商网站的商品详情页加载。当运行测试时,JMeter 就会模拟这 100 个虚拟用户同时并发地去请求商品详情页,这样我们就能看看这个页面在高并发情况下的性能表现,比如加载速度快不快,会不会卡顿等。
(二)与参数化组件结合实现动态数据输入
- 假设我们要测试一个登录功能,并且要模拟多个不同用户登录。我们可以添加一个 CSV Data Set Config 组件(这就是参数化组件哦),在这个组件里配置好包含用户名和密码的 CSV 文件路径,比如 “/path/to/userdata.csv”,文件里每行对应一组用户名和密码。
- 然后在 HTTP Request 采样器的参数部分,用户名和密码的参数值分别用 “和{password}” 来表示,这里的 “username” 和 “password” 就是在 CSV Data Set Config 里设置的变量名。这样,当运行测试时,JMeter 会从 CSV 文件里读取不同的用户名和密码组合,然后在每个请求中使用不同的账号登录,就像有很多真实用户在尝试登录一样,这样能更全面地测试登录功能对不同用户的处理情况。
(三)与断言组件结合验证请求响应结果
- 在 HTTP Request 采样器后面添加一个响应断言组件。比如说我们测试一个搜索功能,期望搜索结果页面包含某个特定的关键词,比如 “手机”(假设搜索的是手机相关产品)。
- 在响应断言组件里,设置要检查的响应字段为 “响应文本”,模式匹配规则为 “包括”,然后在 “要测试的模式” 里写上 “手机”。这样,当 JMeter 发送搜索请求后,会检查服务器返回的响应文本里是否包含 “手机” 这个关键词,如果包含,就说明搜索功能正常返回了符合预期的结果;如果不包含,这个请求就会被标记为失败,这样我们就能快速发现搜索功能是不是出了问题。
(四)与监听器组件结合分析性能数据
- 在测试计划里添加一个聚合报告监听器和一个查看结果树监听器。
- 当运行包含 HTTP Request 采样器的测试后,聚合报告监听器会像一个智能小助手一样,汇总 HTTP Request 采样器的性能数据,比如平均响应时间、吞吐量、错误率等。我们可以通过这些数据快速了解这个网页请求在多次测试中的整体性能表现,就像看一份体检报告,知道系统的健康状况。
- 查看结果树监听器则像一个超级放大镜,能让我们查看每个请求的详细响应情况,包括请求头、响应头、响应内容等。如果某个请求出了问题,我们可以通过查看这里的详细信息,快速定位问题所在,就像侦探查看犯罪现场的细节一样。
五、HTTP 请求头组合使用场景 - 通过请求头模拟不同浏览器和设备的访问场景
(一)模拟不同浏览器访问
有些网站会根据用户的浏览器类型提供不同的页面展示或者功能。比如,对于使用 Chrome 浏览器的用户,网站可能会展示更多的特效或者新的交互功能,而对于使用旧版本浏览器的用户,可能会提供一个简化版的页面。
我们可以在 HTTP Request 采样器中,通过 “Browser - compatible headers” 选项来模拟不同的浏览器请求头。例如,要模拟 Chrome 浏览器,我们可以添加以下请求头:
“User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36”
这样,当我们发送 HTTP 请求时,服务器就会以为这个请求是来自 Chrome 浏览器,从而我们可以测试网站在面对不同浏览器时的兼容性和性能表现。
同样,如果要模拟 Firefox 浏览器,请求头可以设置为:
“User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0”
通过这种方式,我们可以在 JMeter 中轻松切换不同的浏览器请求头,对网站进行全面的兼容性测试,看看它是不是能满足各种浏览器用户的需求。
以下是在 JMeter 的 HTTP Request 采样器中设置 Chrome 浏览器请求头的界面示例:
[此处插入一张设置 Chrome 浏览器请求头的 JMeter 界面截图]
(二)移动端与 PC 端区分访问
现在很多网站都有专门的移动端页面和 PC 端页面,服务器会根据请求头中的信息来判断是移动端设备还是 PC 端设备访问,然后返回相应的页面。
要模拟移动端访问,我们可以添加以下请求头:
“User - Agent: Mozilla/5.0 (Linux; Android 10; SM - G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Mobile Safari/537.36”
并且还可以添加一些移动端特有的请求头,比如:
“Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed - exchange;v=b3;q=0.9”
“X - Requested - With: XMLHttpRequest”
这样,JMeter 发送的请求就会被服务器当作是从移动端设备发出的,我们就可以测试网站的移动端页面性能和功能。
而要模拟 PC 端访问,就使用前面提到的 PC 浏览器的请求头即可。通过这种方式,我们可以分别测试网站在移动端和 PC 端的表现,看看有没有出现页面显示异常、功能缺失等问题。
以下是在 JMeter 中设置移动端请求头的命令行示例:
jmeter -Juser.agent="Mozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Mobile Safari/537.36" -Jaccept="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"