JMeter 自身代理服务器录制WEB/APP脚本,相关页面中各字段解释。
1.Test Plan
2.新增线程组
Test Plan右键——Add——Threads(Users)——Thread Group
名称:可以给线程组设置一个个性化的命名,注意尽量不要使用中文(测试计划也是),在linux上通过no-gui模式执行时可能会找不到对应的测试计划或线程组。
注释:可以对线程组添加备注以标记
在取样器错误后要执行的动作:就是在错误之后要如何执行,可选继续执行后续的、停止执行等。
线程数:就是需要设置多少线程执行测试(如果同时使用了Synchronizing Timer且该定时器的Timeout in milliseconds值为0,需要保证线程数大于该定时器的Numbers of Simulated Users to Group by的值,否则会一直等待下去,除非手动停止)。
Ramp-up Period (in Seconds):用于告知JMeter要在多长时间内建立全部的线程。多长时间内需要把上面的线程数均匀启动完。 默认值是0。如果未指定ramp-upperiod ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。 一般设置ramp-up=线程数启动,并上下调整到所需的。
循环次数:就是决定一个线程要跑多少次测试。
Delay Thread creation until needed:直到需要时延迟线程的创建,这个选项和定时器以及并发提交的关系可以参考下面两段话:
Timer comes into place while sending the samplers. Not for thread creation.
When selected, JMeter will allocate threads according to the ramp up times. Otherwise all threads are allocated to the JVM process the moment the test is started, regardless of ramp up time.
This has no relation to whether or not the threads are allowed to begin sending samples. That always depends on ramp-up time and and test plan timers.
调度器:选中之后可以配置启动时间,立即或者预定的时间。
启动时间:测试计划什么时候启动,启动延迟会覆盖它。当启动时间已过或手动运行脚本时,当前时间也会覆盖它(但启动时间页面显示不会变)。
结束时间:测试计划什么时候结束,持续时间会覆盖它。
持续时间(秒):测试计划持续多长时间,会覆盖结束时间。
启动延迟(秒):测试计划延迟多长时间启动,会覆盖启动时间。
3.新增Http请求默认值
Thread Group右键——Add——配置元件(Config Element)——Http请求默认值(HTTP Request Defaults)
设置要测试的系统的服务器IP、端口号和路径
参数列表:
Attribute | Description | Required |
Name |
组件名 | No |
Server |
域名或IP | No |
Port | 端口 | No |
Connect Timeout | 连接超时时间(单位毫秒) | No |
Response Timeout | 响应超时时间(单位毫秒) | No |
Implementation | 实现方式,默认值为Jmeter属性:jemter.httpsampler | No |
Protocol | 协议,HTTP or HTTPS | No |
Method | 请求方法:HTTP GET or HTTP POST | No |
Path | 请求资源路径 | No |
Send Parameters With the Request | 参数列表 | No |
Server (proxy) | 代理服务器的域名或IP | No |
Port | 代理服务器的端口 | No, unless proxy hostname is specified |
Username | 代理服务器的用户名 | No |
Password | 代理服务器的密码 | No |
Retrieve All Embedded Resources from HTML Files | 告诉Jmeter解析HTML文件并发送所有资源请求(包括图片,java小程序,JS,CSS等) | No |
Use concurrent pool | 用一个连接池来获取嵌入的资源 | No |
Size | 用于获取嵌入式资源的并发连接池大小 | No |
Embedded URLs must match: | URL匹配,过滤 | No |
4.添加Http代理服务器
Thread Group右键——Add——Non-Test Element——Http(S)Test Script Recorder
设置与本地电脑的无冲突的端口号(可以在cmd通过netstat -ano查看电脑中未使用的端口号)、选择目标控制器(这里选择录制控制器),分组选择“每个组放入新的控制器”
a. 名称,注释可以随便添加;
b. Global Settings 端口要设置一个未使用的端口,因为不管是手机还是WEB实际上都是使用的本地IP地址,所以端口要取一个本地机器上未占用的端口(例如我的机器9988),HTTPS Domains 添加https请求的域名,如果有多个中间用英文下的 "," 隔开;
c. test plan content: 目标控制器:该下拉选择要保存脚本的根节点,可以创建一个录制控制器,保存在录制控制器下(录制控制器的好处就是如果不喜欢可清空节点下录制的sampler重新再录一遍)
d. 分组有几种方式:不对样本分组(很好理解,就是请求什么就记录什么,也不会分组);在组间添加分隔(每一个sampler结束都会有分隔符间隔开);每个组放入一个控制器(每一个sampler请求开始时都会有一个简单控制器生成);只存储每个组的第一个样本(每个sampler请求时,如果有子请求那子请求是不会被记录的,只记录第一个URL请求的样本,这种情况虽然很多人说比较推荐,但是个人觉得会丢失许多重要的请求,建议大家还是视情况选择);put each group in a new transaction controller(每个sampler请求开始时都会生成一个事务控制器)。后面可以选择记录HTTP信息头,断言,正则表达式匹配,如果这些勾选上,那请求sampler的时候会生成信息头和断言,正则表达式这里的匹配我还没搞清楚,不知道用在什么情况,后期研究吧。
e. HTTP Sampler setting:跟http的请求设置一样的,如果不清楚的话,建议大家翻翻HTTP请求的文档
f. Content-type filter, 包含模式,排除模式,这里是正则表达式匹配的,这几项很有用,主要是筛选一下自己想要获取的各种请求。因为录制的时候浏览器会有许多其他不必要的请求,像图片,css,qq,360等等许多请求,那这里就可以做过滤操作,把一些不想要的请求筛选掉,有助于自己后期维护录制的脚本。
g.最后一项后台监听sampler,这个默认勾选,app后台运行的时候如果有请求,这里是有用的。
5.Jmeter设置完成,设置浏览器
使用firefox做演示,浏览器需要设置一下代理,打开浏览器的选项设置,手动设置代理,ip一定要设置127.0.0.1(firefox一定要这样写,如果写localhost一点用没有,如果用chrome倒是可以的),端口设置为Jmeter里的端口,两边要保持一致的端口
6.WEB录制
两边设置完成了,到Jmeter代理服务器的设置界面,点击”启动“按钮。
回到浏览器界面,输入测试的web地址操作,然后Jmeter下就会有一系列的请求生成了
注:这样录制就算完成了,后期脚本的维护工作量还是蛮大的。另外,如果是有https的请求,并且有安全证书问题的时候,比如支付,还需要jmeter的ssl管理器加载相应的证书,要不然会通不过。
还有手机的录制,很简单,就手机设置一下代理就可以了~~~
7.设置Jmeter之APP代理
注意:做这个代理,必须确保APP与你Jmeter所在的电脑在同一个局域网中!!
第一步:设置Jmeter代理服务器,与设置web代理一样。
第二步:找到本机链接的WIFI的IP地址:打开cmd命令行工具,输入ipconfig
第三步:打开手机WiFi设置,并设置好端口,如下图所示:
第四步:你可以启动手机上的APP,录制到Jmeter