根据表1用户登陆脚本、【案例随机购买商品脚本用例】

测试脚本开发
图1登陆脚本用例

随机购买商品业务脚本用例如表2所示:

测试脚本开发
图2随机购买商品脚本用例

表2随机购买商品两个脚本用例,进行测试脚本的开发。

1. 用户登陆脚本开发

(1) 利用BadBoy录制用户登陆过程,生成Jmeter脚本。

(2) 登陆用户名进行参数化。

为模拟不同用户登陆,更符合实际业务情景,需针对用户名进行参数化。选择“step1”,右键,“添加”-“配置元件”-“CSV Data Set Config”,设置相关信息,“Sharing mode”需设置为“All threads”,具体设置信息如图3所示。

测试脚本开发
图3登陆用户名参数化设置

设置好CSV后,在请求中进行替换,替换后如图4所示。

测试脚本开发
图4用户登陆用户名替换参数

(3) 设置计时器

脚本录制过程中,用户输入帐号及密码,大概需5秒左右,其余操作则不考虑等待时间(可根据具体需求确定),需添加3个计时器:用户登陆信息输入5秒计时器、登陆成功等待选择3秒计时器、用户退出等待选择3秒计时器,具体设计如图5所示。

测试脚本开发
图5用户登陆业务计时器设置

(4) 设置断言

为了判定用户登陆是否成功,可设置断言,检验用户登陆成功标志位是否出现。经过分析,ECShop如果用户登陆成功,在UI界面上将提示“登陆成功”信息,测试工程师则可以此为断言信息。点击发送登陆信息的请求,右键“添加”-“断言”-“响应断言”,输入“要测试的模式”,如“登陆成功”,如图6所示。

测试脚本开发
图6用户登陆状态断言

断言设置后,如果失败,则显示如下内容,如果成功,则无结果返回。

Assertion error: false

Assertion failure: true

Assertion failure message: Test failed: text expected to contain /登陆成功/

(5) 添加“察看结果树”、“聚合报告”,便于统计测试脚本执行过程中的数据表现。

(6) 如有需要,可将每个请求名称修改为可识别的信息,因本脚本请求较少,故不做修改。

通过上述操作设置,用户登陆脚本设计完成。

2. 随机购买商品脚本开发

(1) 用BadBoy录制用户登陆、浏览商品、加入购物车、设置快递方式、付款方式及收货信息提交订单等过程,生成Jmeter脚本。

(2) 针对用户名进行参数化,方法类似用户登陆脚本设置,这里不做赘述。

(3) 为了实现随机选择某种商品,然后进行购买行为,需在页面中随机获取该商品的信息,通过对服务器返回结果分析,利用正则表达式提取器实现随机获取商品id。点击登陆成功后返回首页的请求,右键,“添加”-“后置处理器”-“正则表达式提取器”,设置相关信息如图7所示。

测试脚本开发
图7 设置正则表达式提取器

本处详细介绍正则表达式提取器用法:

“名称”:为了便于识别组件作用,将“名称”改为“获取商品编号”,测试工程师工作中可根据具体需求确定。

“引用名称”:表示Jmeter其他组件调用该变量时的名称。此处设置为“goods_id”,表示为商品id。

“正则表达式”:设为“\?id=(.*)\"> <div class=”,需注意,“?”、“"”需进行转义。“(.*)”表示在“id=”及“">”之间去任意长度的字符。

“模版”:表示取哪个匹配值,本处只有一个,故设置为“$1$”。

“匹配数字”:表述获取数据的方式,为了达到随机的效果,这里设置为“0”。

“缺省值”:当没有获取到匹配的数据时,可取此处的缺省值。

其余选项默认设置即可。

测试工程师在实际测试中,为了更方便的利用正则表达式提取器获取脚本所需的动态数据,可利用“RegexTester”正则表达式提取器工具进行测试,确定数据获取正确后,再配置Jmeter中的正则表达式提取器。“RegexTester”使用界面如图8所示。

测试脚本开发
图8 RegexTester工具使用

通过“RegexTester”工具使用,可以快速的确定正则表达式编写是否正确,是否取得测试脚本所需的动态数据。

(4) 获取了动态的商品id后,在请求中替换,如图9所示。

测试脚本开发
图9替换商品id参数

(5) 分析脚本请求,发现Badboy并未录制到将所选商品添加到购物的请求,因此需手动添加该请求。通过利用Fidder工具抓包分析,分析请求方式。如图10所示。

测试脚本开发
图10添加购物车请求方式

通过“Headers”头文件信息,发现“添加购物车”请求方式为“Post”,再分析Post传递内容,查看“TextView”内容,如图11所示。

测试脚本开发
图11添加购物车传递数据内容

“TextView”中表明该Post请求发送了如下内容:

goods={"quick":1,"spec":[],"goods_id":70,"number":"1","parent":0}

通过上述分析活动,手动添加HTTP请求,模拟添加购物车活动。

选择“Step1”,右键,“添加”-“Sampler”-“HTTP请求”,如图12所示。

测试脚本开发
图12 HTTP请求创建界面

“名称”:设置易懂的名称即可。这里可以设置为当前请求的作用,如“添加商品到购物车”。

“服务器名称或IP”:设置服务器的IP,如“192.168.0.110”。

“端口号”:设置服务器提供服务的端口号,ECShop使用的Apache+PHP模式,故端口号为“80”。

“Implementation”:与其他请求一样,选择“Java”即可。

“协议”:填入“HTTP”

“方法”:通过Fidller分析可知,此处为“Post”

“路径”:填写发送请求的路径,通过Fidller抓包分析可知,添加购物车请求路径为“/ecshop/flow.php?step=add_to_cart”。

通过根据Fidller分析可知,本次Post请求内容为Body Data:

goods={"quick":1,"spec":[],"goods_id":70,"number":"1","parent":0}

调整“goods_id”为随机参数,则添加购物车请求所有设置如图13所示。

测试脚本开发
图13添加购物车请求设置完成

(6) 设置收货信息

每一个新会员首次购买商品时,需设置收货地址信息,如图14所示。

测试脚本开发
图14 ECShop编辑收货地址

BadBoy录制过程中,使用的帐号是已经购买过商品的帐号,收货信息已经存在,因此并没有录制到添加收货地址的操作,测试工程师同样可通过Fidller抓包分析,手动添加请求。添加HTTP请求后如图15所示。

测试脚本开发
图15编辑收货地址请求

(7) 添加计时器

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

测试脚本开发
图16随机购买商品计时器

订单是否成功,可在ECShop后台直接查询,因此,本处不设置。

(8) 添加“察看结果树”、“聚合报告”,便于统计测试脚本执行过程中的数据表现。

(9) 将所有请求名称修改为可识别的信息,便于后续测试过程中定位问题,最终结果如图17所示。

测试脚本开发
图17随机购物脚本请求列表