Jmeter接口自动化实践一--如何开始做

初识jmeter是在半年前,这半年也做了不少东西是时候来个总结了。

为什么要做接口自动化?

1.版本迭代后,如何保证老的接口依然正常使用,通过对接口进行可用性测试,可快速对其进行验证,但这也只是确认接口可用。

2.如何保证老接口可用,并且接口的业务功能正确?当然最简单的办法便是对所有可自动化的接口,进行自动化用例的编写。

3.如何避免手工接口测试时的遗漏,以及接口文档前后不一致的情况(实际工作中遇到不少)。通过接口的自动化测试提前设定好,不仅可以保证接口测试的稳定性,还可以节省不少时间,提升测试效率。有闲的时间喝喝茶不好吗?哈哈

那何为自动化?又如何去做呢?自动化用例设计又该遵循什么原则?

我的原则是首先评估可做自动化的接口,然后按模块进行划分。最重要的原则是:你编写的用例,在每次自动化执行时,用例的稳定性。这点是说每次自动化执行脚本后,不会对下一次执行脚本产生影响。

现在开始啦!

业务背景说明:这是一款直播软件,其中有一个功能模块名叫部落,部落中有一个神秘商店,只有加入部落的人才能够看到此商店,我们要测试的接口就是神秘商店列表。

此接口的接口文档:

请求url:

/tribe/queryShopList

请求方式:

POST

参数:

tribeId  必传,long,部落id

返回示例:

{
  "code": 1000,
  "msg": "成功",
  "data": {
    "refreshNum": 8,
    "amountId": 1,
    "refreshAmount": "50",
    "shopList": [
      {
        "id": 446,
        "goodsId": 60,
        "goodsName": "魔法扫帚",
        "goodsNum": 1,
        "goodsType": 2,
        "goodsPrice": 5000,
        "goodsURL": "https://cdn-live.maopp.cn/live/gift/33.png",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": 0,
        "unlockType": 0,
        "unlockValue": 1,
        "unlockDesc": "",
        "various": 1
      },
      {
        "id": 447,
        "goodsId": 116,
        "goodsName": "白龙碎片",
        "goodsNum": 1,
        "goodsType": 2,
        "goodsPrice": 800,
        "goodsURL": "https://cdn-live.maopp.cn/live/tribe/shop/1@3x.png",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": 0,
        "unlockType": 0,
        "unlockValue": 2,
        "unlockDesc": "",
        "various": 1
      },
      {
        "id": 448,
        "goodsId": 6,
        "goodsName": "别克碎片",
        "goodsNum": 3,
        "goodsType": 2,
        "goodsPrice": 90,
        "goodsURL": "https://cdn-live.maopp.cn/live/tribe/shop/4@3x.png",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": 0,
        "unlockType": 0,
        "unlockValue": 3,
        "unlockDesc": "",
        "various": 3
      },
      {
        "id": 449,
        "goodsId": 125,
        "goodsName": "幻夜灵骑碎片",
        "goodsNum": 1,
        "goodsType": 2,
        "goodsPrice": 800,
        "goodsURL": "https://cdn-live.maopp.cn/live/tribe/shop/2@3x.png",
        "backgroundColor": "#E4EFFF",
        "goodsStatus": -1,
        "unlockType": 0,
        "unlockValue": 4,
        "unlockDesc": "Lv1部落可解锁",
        "various": 1
      },
      {
        "id": 450,
        "goodsId": 63,
        "goodsName": "复活天使",
        "goodsNum": 1,
        "goodsType": 2,
        "goodsPrice": 5000,
        "goodsURL": "https://cdn-live.maopp.cn/live/gift/497.png",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": -1,
        "unlockType": 0,
        "unlockValue": 5,
        "unlockDesc": "Lv2部落可解锁",
        "various": 1
      },
      {
        "id": 451,
        "goodsId": 3,
        "goodsName": "奔驰",
        "goodsNum": 7,
        "goodsType": 2,
        "goodsPrice": 5000,
        "goodsURL": "https://cdn-live.maopp.cn/live/car/benz.png",
        "backgroundColor": "#F9FAFC",
        "goodsStatus": -1,
        "unlockType": 0,
        "unlockValue": 6,
        "unlockDesc": "Lv3部落可解锁",
        "various": 7
      }
    ]
  }
}

错误码说明:

71000:部落不存在

71002:用户不在该部落

71038:商店初始化失败

如何对此接口进行自动化呢?

1.巧用逻辑控制器中的简单控制器作为文件夹,命名规则自主定义

2.根据接口功能列出需要测试的用例

3.对列出的测试用例添加前置条件,断言结果,后置扫尾完成自动化

如第一条case,对未加入部落的用户,访问神秘商店列表进行验证,在这里我们传入的tribeId是已存在的部落Id,用户userid则是未加入任何部落的用户。

那这个tribeId怎么获得呢?

当然我们可以直接从mysql里的表里找一个tribeId填进去,但是这样一个固定的值很容易受到影响,一旦该tribeId发生改变,那么结果将有可能与预期不一致,这样的用例是不稳定的。

要想让这个tribeId变得稳定起来,我们最稳妥的方法有两种:一种是新建一个部落,另外一个便是从数据中查询一个现有存在的部落id。

如果采用第一种新建部落的方法,那么我们的后置必然还需将此部落解散,涉及到后置,我们先采用最简单的从数据库查询的方法。

1)首先在配置元件添加一个数据库连接配置,网上教程非常多,这里不详细说明。值得注意的是需要下载一个mysql的驱动包放在jmeter的lib目录下。

2)添加一个jdbc的请求,输入sql语句,查询有效的部落id,将它赋值给tid

3)通过tid获得部落id

这时可以通过添加debug sampler 来查看下tid 的数据 tid_#代表一共查询出多少条数据。tid_1,tide_2等等就是取出来的部落id

4)将取得的部落id,作为部落列表的传参

5)加一个断言

到此为止,就是部落列表的一个完整用例。

 

 

 

 

 

 

 

 

  • 9
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值