美文网首页Jmeter
[JPT_05]性能测试-脚本开发(登录&随机购买业务)

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

作者: Fighting_001 | 来源:发表于2018-09-22 01:01 被阅读20次

    目录结构

    一、用户登录脚本开发
        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站点随机浏览购买商品业务的脚本开发完成

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/tfcywftx.html