Jmeter脚本录制
1、引言
无论是做接口自动化还是性能测试,Jmeter都非常广受测试行业人员的热爱,但说到底Jmeter也只是工具,是为达到测试目的的一种工具或或是入门学习的途径工具罢了,最近看有同事在用Jmeter,但看在编辑Jmeter脚本时非常的难受,公司接口不太规范,没有正规的接口说明文档,也没有swagger即使有也不能拿过来直接使用,所以大部分都会用浏览器自带的开发者工具(F12调用)或其他的抓包工具,再对照业务 一个个的找到对应的接口再手动写到Jmeter里,这样的工作效率将大大折扣。最近本人也在使用Jmeter,对上做了一些研究Jmeter录制脚本,如遇到此情况能提高一下工作效率吧,所以在使用过程中也总结了一些心得分享大家。 其实真如果出现了上面的情况,那就说明对接口测试的强制不高,也就简简单单的使用,脚本录制,回放就OK了。所以本文介绍的也是最基本的常用的录制脚本,修改脚本,不做过多的涉及到其他方面的介绍。
2、录制原理
在录制之前先简单说明一下原理,给个简单的图示来说明会容易明白一些,我们录制的也大部门是http(s)协议的脚本,http协议其实就是请求与响应,最简单一些就如下图一条链路“客户端到服务器端”,稍微复杂一点的就经过了“客户端->代理->防火墙->路由器->交换机->服务器” 而我们所使用的Jmeter去录制脚本其实就相当于在客户端到服务器端通讯之间加了一个代理。
3、代理设置
知道了Jmeter录制原理后,我们就知道了为什么要设置代理了。
3.1、以Google Chrome为例进行设置代理的操作步骤
- 点击浏览器右上角的"三个点"找到设置项(或使用快捷键“ctrl+shift+del”),打开浏览器的“设置”。
- 在搜索框中输入“代理”。
- 打开本机的代理设置。
- 打开手动设置代理服务器,输入“地址、端口”。
- 保存手动设置的代理信息。
4、Jmeter录制设置
4.1、添加HTTP(S)测试脚本录制器
添加HTTP(S)测试脚本录制器“TestPlan->add->Non-Test Elements->HTTP(S) Script Recorder”
4.2、HTTP(S)测试脚本录制器设置项说明
4.2.1、HTTP(S) Test Script Recorder
**Name:**显示在左侧计划树结构里的描述信息。 **Comments:**对此脚本录制的说明,只是一个备注说明信息。
**State:**就是一个动作按钮 **Start:**开始录制; **Stop:**停止录制; **Restart:**重新录制 启动录制时会需要认证,如果浏览器没有安装相关证书需要提前安装,一般根据提示确认就行了。
4.2.2、Global Settings**
**Port:**端口,默认是8888,注意这里的端口值要与上节设置的代理端口值一致。 **HTTPS Domains:HTTPS的域(或主机)名称列表。使用此方法预生成要记录的所有服务器的证书。 例如,.example.com, .subdomain.example.com,请注意通配符域只适用于一个级别,即abc.subdomain.example.com匹配.subdomain.example.com,而不匹配.example.com
4.2.3、Test Plan Creation
测试脚本的创建设置,在启动时生效。 Test plan content **Target Controller:**代理将在其中存储生成的示例的控制器。默认情况下,它会寻找一个记录控制器并将它们存储在那里。 左侧计划里创建了几个线程组,在下拉框里显示几个选项,切记不要选择“Use Recording Controller”这个只是个提示,并不一定存在,除非手动创建一个与其名称一样的线程组。
Grouping **Do not group samplers:**按顺序存储所有记录的采样器,没有任何分组。 **Add separators between groups:**添加名为“--------------”的控制器来创建组之间的视觉分隔。否则采样器将按顺序存储。 **Put each group in a new controller:**为每个组创建一个新的Simple Controller,并将该组的所有采样器存储在其中。 **Store 1st sampler of each group only:**每组中只有第一个请求将被记录。只有“Follow Redirects”和“Retrieve All Embedded Resources…”被打开时才生效。 **Put each group in a new transaction controller:**为每个组创建一个新的事务控制器,并将该组的所有采样器存储在其中。
Capture Http Headers 应该在计划中添加标题吗?如果指定,头管理器将被添加到每个HTTP采样器。代理服务器总是从生成的报头管理器中删除Cookie和授权报头。默认情况下,它还删除If-Modified-Since和If-None-Match头。它们用于确定浏览器缓存项是否最新;当录制时,我们通常希望下载所有的内容。要更改要删除的附加头信息,可以将JMeter属性proxy.headers.remove定义为一个以逗号分隔的头信息列表。
**Add Assertions:**为每个请求增加一个空白断言,没有啥用一般不选。
**Regex Matching:**当替换变量时使用正则表达式匹配?如果勾选了replacement,将使用单词边界,也就是说,它将只替换变量的单词匹配值,而不是单词的一部分。Perl5定义之后有一个词边界,它等价于\b。 注,这个也是在有“User Defined Variables”用户自定义变量时,会根据变量名与值自动替换请求中与变量值相同的信息替换成变量名信息。
4.2.4、HTTP Sampler settings
采样器设置 **Transaction name:**名字,如“登录” Naming scheme: **Prefix:**录制脚本名的前缀,即录制的脚本显示“登录path”,这里的“登录”即上面的Transaction name,path即为url中的相对路径。 **Transaction name:**录制脚本的名称,即“登录”。 **Suffix:**录制脚本名的后缀,即“path登录”。 **Use format string:**用户自定义,可根据后面自定义如"#{counter,number,000} - #{path} (#{name})",即000-path登录。
下面不常用的就不做介绍了,感兴趣的可以自己研究一下。 接下来说一下“Requests Filtering”即请求过滤
4.2.5、Requests Filtering
**Content-type filter:**基于内容类型过滤请求——例如。“text / html; charset = utf - 8”。字段是正则表达式,检查它们是否包含在内容类型中。[不必匹配整个字段]。首先检查包含过滤器,然后检查排除过滤器。过滤出来的请求将不被保存。 注,Content-type filter此过滤也应用于响应的内容类型。
text / html; charset = utf - 8
**URL Patterns to Incloude:**与采样的完整URL匹配的正则表达式。允许过滤被记录的请求。所有请求都通过,但只有那些满足Include/Exclude字段要求的请求才会被记录。如果Include和Exclude都为空,那么所有内容都将被记录(这可能导致为每个页面记录几十个示例,如图像、样式表等)。
URL Patterns to Include 记录请求信息包括URL 正则匹配到的信息, 如前面没有设置HTTPS Domains,并且只想录制指定地址或域下的信息,此处可以设置为“http://172.16.20.88:8090.*”,只会录制与此相关的请求信息,其他请求信息自动过滤掉。
http://172.16.20.88:8090.*
URL Patterns to Exclude 请求记录过滤掉正则相匹配到的信息
(?i).*.(bmp|css|js|gif|ico|jpe?g|png|swf|woff|woff2)
5、注意事项
5.1、本文中使用的工具的版本说明:
Google Chrome:版本 92.0.4515.159(正式版本) (64 位)
Jmeter:版本5.4.1
jdk:版本1.8.0_231
6、其他
因实例都是使用的http协议,相对来说比较简单一些,而https与http是一 样的设置,只不过相对来说安全性会更高一些需要一提前安装一些证书和一些插件,这个会在以后的文章中单独说明,今天在此就不进行说明了。
|