Jmeter

[JPT_05]性能测试-脚本开发(登录&随机购买业务)

2018-09-22  本文已影响20人  Fighting_001

目录结构

一、用户登录脚本开发
    1.用Badboy录制登录脚本
    2.导出脚本添加到JMeter中
    3.优化脚本:设置对登录用户名进行参数化,调用csv读取登录数据
    4.添加定时器(控制登录步骤的等待时间)
    5.设置响应断言,判断登录是否成功
    6.执行1个线程1次循环,检验脚本运行效果
二、随机购买商品脚本开发
    1.用Badboy录制商品购买业务的脚本
    2.导入脚本到JMeter中,设置对登录用户名进行参数化
    3.利用Fiddler抓包获取添加商品到购物车的请求数据,补充添加到JMeter
    4.利用Regex Tester正则表达式测试器,检验获取随机商品id的正则表达式效果
    5.配置JMeter中的正则表达式提取器,设置goods_id为随机变量
    6.添加定时器
    7.设置响应断言,判断是否购买成功
    8.添加查看结果树、聚合报告,统计脚本运行的数据
    9.执行检验脚本运行效果

本次ECShop测试站点:http://localhost/ecshop36/ecshop/

一、用户登录脚本开发

测试要点:
1.利用BadBoy录制用户登录ECShop站点的过程,生成JMeter脚本
2.在JMeter中对登录用户名进行参数化。为模拟不同用户登录,更符合实际业务场景,因此需要针对用户名进行参数化

具体操作过程如下:

1.用Badboy录制登录脚本
2.导出脚本添加到JMeter中
3.优化脚本:设置对登录用户名进行参数化,调用csv读取登录数据

添加 CSV Data Set Config

登录信息中设置用户名为参数化对应的变量

4.添加定时器(控制登录步骤的等待时间)

脚本录制过程中,用户输入帐号及密码,大概需5s左右,其余操作则不考虑等待时间(可根据具体需求确定),需添加3个计时器:

>> 用户登录前等待信息输入:5s 计时器
>> 登录成功等待返回首页:3s 计时器
>> 用户退出等待返回首页:3s 计时器

以上时间的设置是基于前文 [JPT_03]性能测试-测试模型构建 & 用例设计登录业务线程数确定时假定的模拟用户的时间花费而定。

添加 Constant Timer(固定定时器):

5.设置响应断言,判断登录是否成功

添加 Response Assertion(响应断言):

设置断言内容为:"登录成功"
若Response数据中包含此字符串,则代表登录成功

添加View Results Tree(查看结果数)、Summary Report(聚合报告),用于统计测试脚本执行过程中的数据表现

6.执行1个线程1次循环,检验脚本运行效果
登录成功

以上,本次ECShop站点登录业务的脚本开发完成

二、随机购买商品脚本开发

测试要点:
1.用BadBoy录制用户登录、浏览商品、加入购物车、设置物流方式、支付方式及收货信息提交订单等过程,生成JMeter脚本
2.为了实现随机选择某种商品,然后进行购买的行为,需在页面中随机获取商品的id。登录成功后,通过分析商品首页的HTML源代码,利用JMeter正则表达式提取器实现随机获取商品id
3.在实际测试中,可利用Regex Tester正则表达式测试器运行获取脚本所需的动态数据,当确定数据获取正确后,再配置JMeter中的正则表达式提取器
4.参数化:登录用户名、商品随机浏览的id、商品随机购买添加到购物车的id

具体操作过程:

1.用Badboy录制商品购买业务的脚本
2.导入脚本到JMeter中,设置对登录用户名进行参数化
3.利用Fiddler抓包获取添加商品到购物车的请求数据,补充添加到JMeter

分析脚本请求,发现Badboy并未录制到将所选商品具体属性添加到购物车的请求,因此需要手动添加补充才能完整运行脚本。此时利用FIddler工具抓包分析,可找出对应请求,包括:Request url、Body Data数据...
Request url:http://.../ecshop/flow.php?step=add_to_cart
POST Data:goods={"quick":1,"spec":[],"goods_id":72,"number":"1","parent":0}

配置项 取值设置
1 Name 自定义的名称,如:添加商品到购物车
2 Server Name or IP 服务器域名或IP
3 Port Number 设置服务器提供服务的端口号,ECShop使用的Apache+PHP模式,常规情况端口号为80
4 Implementation 客户端执行语言。与其他请求一样,选择Java即可
5 Protocol HTTP协议
6 Method Fidller抓包分析,为POST请求
7 Path 发送请求的路径,Fiddler抓包获取添加购物车请求的路径:.../ecshop/flow.php?step=add_to_cart
8 Body Data 利用Fiddler抓包,Body Data:goods={"quick":1,"spec":[],"goods_id":72,"number":"1","parent":0}
设置“goods_id”为随机参数

PS:BadBoy录制过程中,①若使用的帐号是已经购买过商品的帐号,且收货信息已经存在于数据库中,则录制不到新添加收货地址的操作,此时亦可利用Fidller抓包获取相应请求数据,手动添加到JMeter中;②当然也可以用全新未购买过商品的账号进行录制,就不需要单独去抓取添加收获地址的操作请求

4.利用Regex Tester正则表达式测试器,检验获取随机商品id的正则表达式效果

Regex Tester工具下载传送门:https://www.jb51.net/tools/regex_tester/

利用Regex Tester正则表达式测试器对所设置的正则表达式进行测试验证效果,源文本是从商品首页对应的HTML源代码获取,运行匹配规则之后,从运行结果可以看出已经匹配获取到商品的id编号(72,70,69,68,...)

5.配置JMeter中的正则表达式提取器,设置goods_id为随机变量

2个地方对商品id参数化:根据goods_id进入商品详细页;添加对应goods_id的商品到购物车

对登录成功后的商品首页,右键添加正则表达式提取器,以获取商品的随机id编号,用于后续步骤中

JMeter中正则表达式提取器的用法:

配置项 取值设置
1 Name 便于识别组件,可将名称改为直观的文字。如:“获取商品id编号”
2 Name of created variable 表示JMeter其他组件调用该变量时的名称。此处设置为"goods_id",表示商品id
3 Regular Expression 设置为goods.php\?id=(.*)\"> <div,注意需对问号?、双引号"进行转义。
(.*):表示在id=">之间取任意长度的任意字符
4 Template 表示取哪个匹配值,本处只有一个,故设置为“$1$”
5 Match No. 表示获取数据的方式,0代表随机获取
6 Default Value 当没有获取到匹配的数据时,可取此处的缺省值(id=72,即首页默认的第一个商品)

将获取到的随机商品id,替换到后续请求中进行引用

6.添加定时器

脚本录制过程中,用户输入用户名及密码,需5s左右;用户登录成功后,系统默认有3s左右的用户选择操作时间;用户选择某件商品,然后添加到购物车,这个过程可增加计时器5s;编写收货信息5s;填写快递信息及付款方式5s;用户退出系统时,也存在同样的选择时间,大约3s。

>> 用户登录前等待信息输入:5s 计时器
>> 登录成功等待返回首页:3s 计时器
>> 选择商品、添加到购物车:5s 计时器
>> 填写收货信息:5s 计时器
>> 填写物流信息、支付方式选择:5s 计时器
>> 用户退出等待返回首页:3s 计时器
7.设置响应断言,判断是否购买成功

Add-->Assertions-->Response Assertion
Add-->Listener-->Assertion Results

PS: 订单是否成功,也可在ECShop后台直接查询

同时通过Fiddler抓包分析,发现"填写收货信息进行提交"请求存在POST请求的302定向,此时为了确保前后页面登录信息的关联性,需要勾选"Follow Redirects", 或者两种定向方式都不勾选则默认"Follow Redirects"

8.添加查看结果树、聚合报告,统计脚本运行的数据

添加View Results Tree、Summary Report,便于统计测试脚本执行过程中的数据表现

9.执行检验脚本运行效果
配置项 配置数值
Thread Group Number of Thread: 1
Step 1 Loop Count: 1

按照1个线程循环1次进行检验效果,已执行成功提交订单,如下:

在本地数据库中,也可查询到刚才在JMeter中执行脚本获取到用户的收获地址信息、订单信息的记录,如下:

以上,本次ECShop站点随机浏览购买商品业务的脚本开发完成

上一篇下一篇

猜你喜欢

热点阅读