badboy录制jmeter脚本
A. Jmeter进阶--参数化
前言
参数化是自动化测试脚本的一种常用技巧。简单来说,参数化的一般用法就是将脚本中的 某些输入 使用参数来代替,比如登录传参、post、delete、put等请求传参,在脚本运行时指定参数的取值范围和规则;
这样,脚本在运行时就可以根据需要选取不同的参数值作为输入。这种方式通常被称为数据驱动测试(Data Driven Test),参数的取值范围被称为数据池(Data Pool)。
jmeter的test plan中,支持如下 4种参数化方式 :
CSV Data Set Config:CSV数据控件(常用)
函数助手:_CSVRead
User Defined Variables:用户定义的变量
User Variables:用户参数
本文列举post传参请求的参数化,系统:mac,jmeter版本:3.3
首先新建一个测试脚本,可以自己手动编写(或者通过工具(badboy)录制),推荐手动编写
界面如下:
这里可以对参数id、name进行参数化,将用户名密码写入txt文档, 保存为.dat格式,编码类型选择UTF-8 ;
因为配置元件——CSV Data Set Config对参数化的格式要求比较严格,用户名密码一一对应,之间用 半角英文逗号隔开
然后将保存的.dat文件放入计算机中,这里我放入路径为:/Users/xxxxxx/apache-jmeter-3.3/test/data
下面具体介绍参数化常用的的四种方法:
一、配置元件——CSV Data Set Config
点击线程组→配置元件→ CSV Data Set Config:
说明:
Filename: .dat文件名,保存参数化数据的文件目录,可选择相对或者绝对路径(建议填写相对路径,避免脚本迁移时需要修改路径);
File encoding: UTF-8,.dat文件的编码格式,在保存时保存编码格式为UTF-8即可;
Variable Names (comma-delimited):对对应参数文件每列的变量名,类似excel文件的文件头,起到标示作用,同时也是后续引用的标识符,建议采用有意义的英文标示;
(如:有几列参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,这里的 user,pwd,可以被利用变量名来引用:user,user,{pwd};
Delimitet: 参数文件分隔符,用来在“Variable Names”中分隔参数,与参数文件中的分隔符保持一致即可;
Allow quote data: 是否允许引用数据,默认false,选项选为“true”的时候对全角字符的处理出现乱码 ;
Recycle on EOF?: 是否循环读取参数文件内容;因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入;
△ Ture:为true时,当已读取完参数文件内的测试用例数据,还需继续获取用例数据时,此时会循环读取参数文件数据(即:读取文件到结尾时,再重头读取文件);
△ False:为false时,若已至文件末尾,则不再继续读取测试数据;通常在“线程组线程数* 线程组循环次数>参数文件行数”时,选用false(即:读取文件到结尾时,停止读取文件);
Stop thread on EOF?: 当Recycle on EOF为False时(读取文件到结尾),停止进程,当Recycle on EOF为True时,此项无意义;
△ 若为ture,则在读取到参数文件行末尾时,终止参数文件读取线程;
△ 若为false,此时线程继续读取,但会请求错误,因此时读取的数据为EOF;
Sharing mode: 共享模式,即参数文件的作用域,有以下几种方式:
△ All threads:当前测试计划中的所有线程中的所有的线程都有效,默认;
△ Current thread group:当前线程组中的线程有效;
△ Current thread:当前线程有效;
完成之后,将刚才生成的参数写入参数对应的值里面:
设置线程组循环次数:
运行,可以看到每次运行依次往下取值:
二、函数助手:_CSVRead(参数化功能较弱)
点击jmeter的界面,功能栏选项→ 函数助手对话框→ _CSVRead
CSV file to get values from | *alias :CSV文件取值路径,这里写入参数化文档存放路径
CSV文件列号| next|*alias :文件起始列号:CSV文件列号是从0开始的,第一列为0,第二列为1,以此类推。。。
函数字符串 :即生成的参数化后的参数,可以直接在登陆请求中的参数中引用,第一列为用户名,函数字段号为0,第二列为密码,函数字段号为1,以此类推进行修改使用即可
设置线程数,注意:这里如果仍按方法一里设置循环次数,执行时始终只取第一个数据,所以要设置线程数
执行脚本,察看结果树,可以看到请求的参数都是参数化后的数据
三、配置元件——User Defined Variables
点击线程组添加配置元件→ User Defined Variables(用户定义的变量):
如上图所示,在该参数组中已经定义了两个参数,通过界面下方的添加、删除按钮可以向参数列表增加和删除参数,Up和Down可以上下移动参数的位置;
值可以直接输入,也可通过函数__CSVRead从文件中读取, 还可以通过前缀加随机数和方法获取 。
比如用户名为user_0到user_100的用户,那么用户名可设置名user_${__Random(0,100,)}
但是这种每次执行的多个线程所替换的参数一样,因为先获取到随机参数,再执行多个HTTP请求。
PS: User Defined Variables中定义的参数值在test plan执行过程中不能发生取值的改变,因此一般仅将test plan中不需要随迭代发生改变的参数(只取一次的参数)
设置在此处;例如:被测应用的host和port值。
四、前置处理器——User Variables
点击线程组添加前置处理器——User Variables(用户参数):
如上图所示,在该参数组中已经设置了两个参数,username和password分别有2组不同的取值,通过页面下方的四个按钮,可以增加删除参数的可能取值。
PS:User Variables中设置的参数可以在test plan执行过程中发生变化。
以上就是jmeter参数化的四种方式,其中:
1、函数助手_CSVRead的参数化功能相比CSV Data Set Config较弱;
2、CSV Data Set Config适用于参数取值范围较大的时候使用,该方法具有更大的灵活性;
3、User Defined Variables一般用于test plan中不需要随请求迭代的参数设置;
4、User Variables适用于参数取值范围很小的时候使用;
PS: 相比于loadrunner来说,jmeter参数化有以下不同:
1.jmeter参数文件第一行没有列名称
2.参数文件的编码,尽量保存为UTF-8(编码问题在使用CSV Data Set Config参数化时要求的比较严格)
3.Jmeter的参数化没有LoadRunner做的出色,它是依赖于线程设置的(只有CSV Data Set Config参数化方法才有)
B. jmeter-脚本录制(F12)
问:为什么要用F12录制?
答:因为实际工作中大哥们都是用F12录的 没见过谁用badboy 代理也少 F12能解决很多问题
我以之前搭建过的jform论坛登录为例子给演示一下如何使用F12去录制脚本
将list页的get请求录入到jmeter里
点击登录输入用户名密码继续
跳转到登录后页面
将jforum页面的信息录入到jmeter里(因为这个页面是post请求 所以在jmeter里要录入对应参数,我的习惯是直接将该页面的请求标头的信息源粘贴到消息体数据中并添加信息头管理器添加对应Content-Type值) 如下图
Content-Type 是指http/https发送信息至服务器时的内容编码类型
最后再加一个响应断言判断登录结果
这样就完成了一套登录动作录制
C. JMeter 脚本技术(参数化)
前面我们已经学习过用 Badboy 录制 webtours 网站 的注册脚本,录制下来的脚本可以直接回放并注册成功一个新用户(前提是录制脚本时创建的用户要先清除,系统用户名有唯一性)。
如果我们想保留之前注册成功的用户,然后继续创建新的用户,这种情况应该如何操作呢?大家可能想到去改脚本,把之前注册用户时填写的用户信息改成新用户的信息。一个用户可以这样操作,但要注册10个,100个,1000个新用户呢?
大家想想都应该知道不可能每注册一个用户时都去修改一次脚本,这样牛都会累死的。
我们平时录制的脚本内容都是固定死在脚本里的,每次运行脚本时使用的是同样的数据。那我们有没有办法把这些“死”的脚本救“活”呢?这个就是我们接下来要学习的脚本参数化。
在操作之前我们先来看看提交用户注册信息的请求。
上图圈出来的内容就是用户注册时填写的信息,我们需要对这部分的内容进行参数化。参数化其实就是把脚本里具体的内容改成调用变量的方式。
既然我们知道了操作的方向,那如何调用变量呢?变量我们现在还没创建,创建变量有多种方式,可以在测试计划下创建全局变量,也可以在用户参数下创建用户变量,还可以在配置元件下创建数据 CSV 数据文件导入变量。
在这里,我们只学习平时用得比较多的一种方式,在配置元件下添加 CSV 数据文件导入变量。下面我们来看一下配置选项:
名称: 自定义,给该元件起个名字。
注释: 自定义,一般写改元件的作用。
文件名: 表示参数文件存放的路径,文件不一定是 CSV 格式文件,可以是 CSV 文件 ,也可以是 txt 文件,如 d: est.txt 。这个配置项在 JMeter 一些低的版本里面是没有右边的 浏览 按钮选择文件的,只能手写文件路径。
文件编码: 读取文件时的编码格式,如果为空的话则为本地系统默认的编码方式,Windows 默认是 GBK,Linux 默认是 UTF-8。
变量名称: 参数名字,如果有多个就用英文状态下的逗号分隔,如 name,password 。如果参数名称为空, JMeter 会默认将参数文件的第一行值作为参数名字,从第二行开始调用参数值 。
忽略首行: 忽略 CSV 文件的第一行,只在上一项变量名称不为空时使用,如果变量名为空,则第一行必须包含头信息。
分隔符: 一般标准的 CSV 文件都是采用的逗号作为列分隔符,这里只需要和参数文件的分割方式匹配即可。
是否允许带引号?: 是否允许参数中包含被引用的值。这个是什么意思呢?其实 JMeter 允许引用字段中包含 分隔符 ,如逗号,但引用的字段要用双引号括起来。举个栗子: 1,"2,3",4 ,这样表示1是一个整体,2,3是一个整体,4是一个整体。另外, JMeter 还允许引用字段中包含双引号,如果要包含双引号请使用 两个 双引号 。再举栗子: "5""6",7 ,这样表示5"6是一个整体,7是一个整体。
遇到文件结束符再次循环?: 当读取到参数文件的最后一个值时,是否允许循环取值?
遇到文件结束符停止线程?: 当读取到参数文件的最后一个值时,是否停止线程?这个配置项和上一个配置项只能有一个是 true。
线程共享模式: 共享模式,设置线程或者线程组对于参数文件的共享方式。有四种共享方式,默认是所有线程共享一个参数文件。
学习了上面的配置操作后,我们来创建一个 CSV 文件并且把脚本中要使用的数据都准备好。
接着,把 CSV 数据文件设置选项设置好。
设置完成后,接下来要做的是导入 CSV 文件并且调用数据到脚本中使用,在 JMeter 里面调用变量格式是 ${变量名称} 。
设置脚本循环运行4次,看看能否调用到 CSV 文件数据。
从上图可以看出,脚本居然能调用到 CSV 文件的数据,说明脚本已经实现了参数化。
D. Jmeter5.0脚本录制器及生成测试报告
①、使用Jmeter本身设置代理服务器进行录制
②、使用Badboy进行录制
1、通过在终端中输入jmeter启动,或者通过快捷方式启动(最好以管理员的方式启动)
2、在测试计划(Test Plan)中添加一个线程组(Thread Group),线程组主要用于存放录制的脚本
3、给测试计划(Test Plan)配置一个Http代理服务器(HTTP(S) TestScript Recorder)
4、配置Http代理服务器(HTTP(S) TestScript Recorder)
5、过滤录制过程中不需要的请求和移除静态资源
6、配置火狐浏览器的代理,打开火狐浏览器点击右上角的【三】图标,选择其中的【设置】,并在常规中找到【网络设置】点击【设置】
7、因为录制的是https的脚本,所以还需要导入证书到火狐浏览器,证书会自动生成,再jmeter的bin目录下面找到就可以了
8、要在计算机中导入这个证书,计算机中不导入这个证书也是不能录制https的脚本,按win+r,输入certmgr.msc打开证书,如果导入过就不用导入了
9、选择受信任的根证书颁布导入证书就行了,注意:没导入一定要导入,这里卡了我好久,主要目的就是让这个证书添加信任
10、前面的配置都配置好了,下面就可以点击【启动】来录制脚本了,点击【停止】可以停止脚本的录制
11、证书信任和录制暂停
12、用火狐浏览器输入网络,打开之后大功告成
13、停止之后可以看到录制的脚本了
14、可以通过筛选将不需要的接口删除,也可以给脚本添加断言、添加结果树、聚合报告、Active Threads Over Time、PerfMon Metrics Collector、 Response Times Over Time等来验证脚本
15、通过线程组配置好需要的压力
16、JMeter自动生成压力测试报告
将生成的.jmx文件执行压测并生成.jtl文件
生成压力测试报告,可以在当前的目录中生成
本例目录:D:\apache-jmeter-4.0\bin
E. 什么是脚本录制
1. 什么是脚本录制
在进行测试的时候,可能有好多脚本或者界面需要操作测试,并且有些测试链接需要重复多线程高并发进行测试,我们一般会针对这一些操作,进行一个脚本录制,录制好之后,之后测试就可以在这个基础上进行测试。
2. Jemeter脚本录制方式
web端:BadBoy脚本录制app端:使用Jmeter自带的代理服务器进行脚本录制
3. Android手机端脚本录制
前提:电脑和手机在同一网络段上
1:添加http代理服务器
2:在线程中添加录制控制器
3:在http代理服务器中指定录制脚本的路径,默认端口8888
4:查看本地的ip(wifi热点)
5:设置移动端代理,IP和端口号
6:启动
点击”ok”
7:打开手机app,抓取接口
8:点击”停止”按钮,结束录制
4.web端脚本录制
4.1. 安装badboy脚本软件
傻瓜式安装即可
4.2. 打开badboy软件
4.3. badboy脚本录制
点击录制按钮进行脚本录制,完成打开搜狗搜索,搜索测试岗位薪资操作,然后停止,回放,(回放的时候,会因为编码原因导致乱码,需要手动调乱码问题)
4.4. 添加验证点
验证点的作用就是验证脚本是否按照我们测试的思路执行,判断脚本执行过程中是否存现问题
4.5. badboy参数化
所谓参数化,是指请求的某个参数提前设定多个值,在具体请求的时候,去获取提前设定的值,不同的业务场景设置的参数不一致。
4.6. 导出Jmeter脚本
4.7. 在Jmeter中导入badboy生成的脚本,验证测试
4.8. badboy并发测试
选择tools run background
4.9. badboy测试报告
在badboy-->view--->report下可以看到测试报告
F. jmeter怎么导入badboy录制脚本
jmeter导入badboy录制脚本的方法
一、Badboy的下载和安装
Badboy下载。
网络搜索"Badboy下载",可在第三方网站下载到,也进入官网(Badboy Software Home Page)下载。
安装Badboy。
双击BadboyInstaller-2.2.exe,然后根据提示进行Badboy安装。
二、使用Badboy录制脚本并导出为jmx格式
启动Badboy工具,进入Badboy安装目录下双击badboy.exe。下图是Badboy主界面。
以登陆网络为例录制脚本,输入网络网址后敲回车,即进入网络界面。
登陆网络。
登陆成功后进入个人用户界面。
将录制脚本导出为jmx格式。
点击File→Export to JMeter...→另存为"网络登陆.jmx"→保存。
三、使用JMeter运行导出的jmx脚本
启动JMeter,导入"网络登陆.jmx"。
--点击文件→打开→选中“网络登陆.jmx”→打开。
添加"查看结束树"和"聚合报告"。
--右击Thread Group→添加→监听器→查看结果树。
--右击Thread Group→添加→监听器→聚合报告。
启动脚本运行完毕后"查看结果树"。(点击启动或"Ctrl+R"运行脚本)
注:网络网站安全级别高,将录制的脚本直接重新运行会出现相应异常,故此查看结构树和聚合报告都有异常。需做相应配置即可成功登陆。
启动脚本运行完毕后查看"聚合报告"。
G. 在badboy中录制的脚本怎么在jmeter中运行
打开Badboy,在界面上输入需要测试的地址并操作,导出为Jmeter支持的jmx类型。
不建议Badboy录制,最好就使用抓包工具抓取请求自己手动填写。
H. 使用badboy录制脚本在jmeter里跑 需要设置代理吗
不需要设置,不建议使用Badboy录制脚本。Badboy录制的话会漏掉很多的页面请求,建议用抓包工具抓取然后自己手动的填写
I. JMeter入门指南-6.BadBoy录制脚本
整体UI布局:
上方工具栏:
从左到右依次为
录制/停止录制
停止回放
回放
回放所有脚本
倒放
单独运行一个请求
下方总结栏:
Played:运行脚本或者回放脚本的次数
Assertions:断言失败次数
Succeeded:运行脚本或者回放脚本的成功次数
Warnings:生成警告的次数
Failed:运行脚本或者回放脚本的失败次数
Timeouts:运行脚本或者回放脚本的超时次数
AvgTime(ms):平均响应时间
MaxTime(ms):最大响应时间
上方地址栏:
用于访问url
左侧脚本栏:
用于记录脚本
右侧操作栏:
在此处的操作均被录制为脚本
点击录制按钮,按钮状态变成如图七,即可开始在右侧操作栏进行操作
在右侧进行一系列的模拟用户操作后,可看见脚本栏中有很多链接,这样即为录制成功
点击左上角Flie->Export to JMeter,保存为JMX文件。
点击文件->打开 选择之前保存的JMX即可。
J. jmeter录制脚本工具有哪些
方法一: 使用badboy来录制脚本
badboy本身是一个针对Web的测试工具,它录制的脚本可以直接供Jmeter使用
打开badboy, 如何录制脚本, 录制完后,点File -> Export to JMeter. 如何Jmeter就能直接使用这些脚本
方法二: 利用Jmeter录制脚本
把Jmeter配置成一个Web代理,用Jmter自己来录制脚本
第一步: 创建一个Thread Group (邮件点击: Test Plan -> Add -> Thread Group)
第二步: 创建http 代理服务器 (邮件点击"工作台"(WorkBench), Add-> Non-Test Elements -> HTTP(S) Test Script Recorder)
然后设置浏览器的代理服务器。 设置好后,在浏览器中访问网站。 Jmeter就能录制下来了。
Jmeter 中录制的脚本乱七八糟的, 什么图片,js都有,根本没法用,真不如自己写脚本。
应该设置下忽略这些没用的请求