性能_1 Jmeter脚本编写
Posted 甜~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能_1 Jmeter脚本编写相关的知识,希望对你有一定的参考价值。
一、万能法
-
先把项目启动
-
打开项目接口文档,接口文档: 一般是开发
-
特别注意事项:当你的接口请求参数为json格式时,一定要写请求头,请求头中一定要有 Content-Type: application/json(响应体的格式)
如果没有这个信息,100%报错,不局限于jmeter
-
http请求包括哪些部分
请求行:请求方法,请求地址URI
请求头:Content-Type、cookie、User-Agent
空一行
请求体:参数: 表单 和消息体数据: json 、xml
-
json格式:"key":"value","key1":1 键值对
-
开发人员接口中定义的返回码code,和http response_code不一样
http response_code:
2xx: 网络请求超过 200
3xx: 重定向相关 301
4xx: 请求URL地址有问题 400 404
5xx: 服务器内部异常 500、502 bad gatway
而开发人员在接口中定义的code为响应代码,如0、1、2、3,会有码表来查询
-
写脚本
-
测试计划上右键, 添加 线程组
-
线程组上右键,添加 取样器> http请求 (http协议簇)
-
线程组上右键,添加 监听器 > 查看结果树
一个最简单的jmeter脚本,包括,线程组、取样器、监听器
线程组: 性能测试中用于场景设计的,写脚本阶段不用改动。
取样器: 根据不同的协议,编写不同的脚本(填空)。
监听器: 调试脚本时使用,性能测试执行时,禁用。原因是不管哪种监听器,都是对结果数据进行不同维度的展示,这些展示,是需要消耗本地资源的。
HTTP信息头管理器:添加 Content-Type:application/json
8. tomcat的默认端口:8080
http协议的默认端口:80
https协议默认端口: 443
内容编码:utf-8
脚本需要保存之后再运行:jmeter的默认保存路径,jmeter的bin文件夹,可以更改名字
二、请注意:
-
当请求体为json, 一定要有请求头 Content-Type:application/json。
-
json格式有问题,请求会通过,返回值有错误。
-
协议: 当协议为http时,可以不写,如果是https,那就必须写。
-
服务器名称或IP:不能带有/,会报错。
-
post方法不可以丢到浏览器访问,get可以。
-
路径:不要带域名或ip,和端口,路径开头用/
不要带有空格,带有空格请求URL会出现%20这类的urlencoded编码。
URI是资源地址,URL是带有域名的domain。
-
内容编码:utf-8
请求内容出现乱码处理方法:
-
内容编码: utf-8
-
请求头加上,;charset=utf-8
-
请求体为参数类型:勾选参数“编码” 编码:urlencoded编码,在参数值为非字符(汉字、特殊符号) 我都需要勾选编码,给大家的建议:参数值,不管什么类型,都建议勾选编码,密码加密时base64也要勾选。
响应内容出现乱码处理方法:需求修改jmeter.properties中sampler.result.encoding
不是简单的设置为utf8、 gbk、gb2312、big5,同一个接口,用postmen请求,响应是正常,用jmeter请求响应中文乱码?原因是: jmeter的编码是根据操作系统编码。在国内,中文windows系统的字符集编码是gbk 936, mac系统中文编码utf-8。
-
所有非必填的都要传进参数,以确保资源消耗最大,更能反应性能(最大值)。
-
参数、消息体数量的选择
当我们的请求接口文档中说,请求体为json格式,那么我们就选择用消息体数据,来写json, soap=http+xml
参数: 我们的请求体为form-data,Content-Type: application/x-www-form-urlencoded 或者不指明请求体类型,get
-
自动重定向:不会显示中间重定向过程,无法从过程中,提取信息
跟随重定向:会自动显示重定向过程,能从过程中,提取想要信息,用于后面接口请求
使用keepAlive:保持连接, 长连接,因为现在用http协议版本为1.1就是长连接,所以默认勾选keepAlive,但是在性能测试中,我们会根据需要,去掉这个勾。
愿意:因为性能访问量太大还一直保持连接,会影响数据。
本文来自博客园,作者:Alisa-sweet,转载请注明原文链接:https://www.cnblogs.com/Alisa-sweet/p/17365118.html
测试沉思录21. 如何用 JMeter 编写性能测试脚本?
作者:宋赟 编辑:毕小烦
Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本?
1. 编写 HTTP 性能测试脚本
STEP 1. 添加 HTTP 请求
STEP 2. 了解配置信息
HTTP 请求各项信息说明(以 JMeter 5.1 为例)。
如下图所示:
- **Web服务器:**指定协议、HTTP 请求的主机地址和端口号,不需要加上“
http://
”,JMeter 会自动加上,一般的 Web 服务端口号默认是 80,如果你访问的地址中带有其他端口号在此填入,协议根据目标地址实际情况填入http
或https
。 - **客户端实现:**实现里面有
HttpClient4
和Java
两个选项。HTTPClient4
可以看成是一个没有界面的浏览器,可以通过它高效的访问Http协议的资源;Java
选项是使用 JDK 提供的net
包中的工具类来访问。 - **方法:**下拉列表中有 8 个选项,我们常用的是 POST 和 GET。GET 是提交请求时将参数连接在浏览器地址栏,且长度有限制(1 MB 以内);POST 提交请求没有长度限制,用户一般也看不到提交的内容,相对来说安全些,其他相关选项请大家自行参考 HTTP 协议。
- **路径:**除去主机地址部分的访问链接。
- **内容编码:**字符编码格式,默认是
iso8859
,一般写成UTF-8
即可,当然也可以和开发人员确认。 - **自动重定向:**自动重定向可以自动转向到最终目标页面,但 JMeter 是不记录重定向过程内容的,勾选了这一项后,【跟随重定向】则会失效,且无法做关联。
- **跟随重定向:**HTTP 请求的默认选项,当响应
code
是3xx
时,自动跳转到目标地址。与自动重定向不同,JMeter 会记录重定向过程中的所有请求响应,在查看结果树中可以看到服务器返回的内容,选了这个可以对响应内容做关联。 - **使用 KeepAlive:**HTTP 请求的默认选项,对应
HTTP
响应投中的Connection:keep-Alive
。 - **对 POST 使用multipart/form-data:**这个属性是和方法 POST 绑定的,一般文件上传时会用到它。
- **与浏览器兼容的头:**浏览器兼容模式,若选了【对
POST
使用multipart/form-data
】,建议也勾选此项。 - **同请求一起发送参数:**填要发送的参数和值的区域,参数项是以 key 和 value 形式填写,消息体数据是以JSON 格式填写,文件上传项需要填写文件名称、参数名称和 MIME 类型,如果你不知道 MIME 类型,可咨询开发人员或使用抓包工具查看。
填好以上这些选项后,HTTP 单接口就准备的差不多了,这里给 GET、POST、文件上传三个示例图,供参考。
- GET 请求 + 参数
- POST 请求 + 消息体数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vTHhiZC-1670241566972)(https://cdn.nlark.com/yuque/0/2022/png/12443024/1667203503971-476b6771-2798-4e1c-8d9f-a64f506fe5e0.png)]
- POST 请求 + 文件上传
STEP 3. 响应断言
脚本制作原则里有说到每个请求必须要有响应断言,是因为若对接口返回不做判断的话,我们无法判断请求的有效性,从而无法评估出性能测试的真实性,故每个请求必须要有响应断言。接下里我们看看响应断言。
断言是通过获取服务器响应数据,再根据断言规则去匹配这些响应数据;若匹配到了是正常现象,不会进行任何提示,若匹配不到,JMeter 则会断定这个请求失败,在后面调试脚本中我们会看到查看结果树中的请求名称是红色字体。断言组件有很多,我这里讲到的响应断言基本能满足 80% 以上的断言需求。
首先,我们增加断言,在请求名称上右键->添加->断言->响应断言:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89EQa4zd-1670241566972)(https://cdn.nlark.com/yuque/0/2022/png/12443024/1667207902090-aac27328-8832-4eb6-abf4-ac2f7d59c16f.png)]
再说说响应断言中一些参数的意义:
-
**名称和注释:**可以随意设置,最后有业务意义。
-
**Apply to:**应用范围,有 4 个选项
-
- **Main sample and sub-samples:**匹配范围包括当前父取样器并覆盖子取样器
- **Main sample only:**匹配范围是当前父取样器
- **Sub-sample only:**仅匹配子取样器
- **JMeter Variable:**支持JMeter变量值进行匹配
-
测试字段:对响应数据的不同部分进行匹配,有 7 个选项。
-
- **响应文本:**返回的文本内容
STEP 4. 调试脚本
写好脚本后,接下来是调试脚本,JMeter 一般是结合察看结果树来调试脚本,可以从察看结果树元件中看到服务器的返回信息。察看结果树会显示取样器的每一次请求,若是有大量的请求,在压测时建议关闭,否则会比较消耗压测机资源。
察看结果树这元件一般只用来调试脚本,这里也大概科普下察看结果树各项参数用途。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0uvgrP7-1670241566973)(https://cdn.nlark.com/yuque/0/2022/png/12443024/1669282076262-23ec4d07-bc66-4f00-85f7-97657f4ca628.png)]
- **名称:**自定义内容,默认为察看结果树,可为空。
- **注释:**默认为空,可以为空,自定义内容。
- **所有数据写入一个文件:**可以将结果保存,这里是一个路劲地址。
- **Text 下拉列表:**显示请求内容的形式列表,这个下拉列表里有 Text、Xpath Tester、JSON 等。
- **取样器结果:**显示取样器结果,这里的信息和浏览器上展示的内容差不多。
- **请求:**展现请求表单内容,不同的取样器有不同显示格式。
- **响应数据:**显示服务器响应数据,分为 Response Body 和 Response headers,提供了查询功能,也可以区分大小写查询和正则表达式查询。
2. 编写 Dubbo 性能测试脚本
STEP 1. 将我们自己实现的请求 Dubbo 的服务打成 jar 包放到 JMeter/lib/ext
目录下。
STEP 2. 打开 JMeter,添加线程组,在线程组中添加 Java 请求。
STEP 3. 在 Java 请求中类名称中选择自己上传的类,在参数栏填入相关参数内容。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4de3G87B-1670241566974)(https://cdn.nlark.com/yuque/0/2022/png/12443024/1669362853559-76be1d85-0a8e-4e18-8dc1-5c6fbfdf64ab.png)]
STEP 4. 对 Java 请求增加相应断言以及通过察看结果树调试脚本,和 HTTP 脚本一致,不再赘述。
3. 编写性能测试脚本的参考规范
代码有编码规范,写脚本也有规范,比较推荐的规范是:
- **脚本中只能有一个测试计划。**JMeter 脚本在客户端界面中展示的树型结构,测试计划是根节点,根节点只能是一个。
- **测试计划中至少有一个线程组。**JMeter 执行压测都是从线程组发起的,所以测试计划中至少要有一个线程组,另外 JMeter 支持多个线程组。
- **至少要有一个取样器。**脚本中若无取样器则是一个空脚本,无法模拟用户请求,无任何执行意义。
- **每个取样器必须有断言。**无断言则无法判断请求是否成功,更无法判断压测有效性。
- **至少要有一个监听器。**非命令行执行脚本时,需要查看执行结果,则会需要有聚合报告等监听器;若使用命令行执行脚本时,则可生成结果文件。监听器是用来展示执行结果,而执行结果则是用来分析系统性能的。
- **非调试时禁用察看结果树。**察看结果树一般是用来调试脚本的,但压测时使用的话,大量的请求返回数据会消耗压测机资源,可能导致压力机性能下降。
- **减少使用不必要的插件。**JMeter 插件是很丰富,但使用不当会影响 JMeter 本身性能,从而导致压力机自身成为压测瓶颈,比如使用监控插件,大量的服务器资源采集会影响压测机的磁盘 IO 及消耗压测机其他资源。
遵循这些规则可以让我们养成良好的习惯,避免不必要的错误。
总结
本文简单介绍了编写 HTTP 和 Dubbo 性能测试脚本的步骤,并且给出了性能测试脚本的参考规范,希望对大家有帮助。
(完)
以上是关于性能_1 Jmeter脚本编写的主要内容,如果未能解决你的问题,请参考以下文章