zoukankan      html  css  js  c++  java
  • 接口测试用例设计实践总结

    设计思路

    1)   优先级--针对所有接口

    1、暴露在外面的接口,因为通常该接口会给第三方调用;

    2、供系统内部调用的核心功能接口;

    3、供系统内部调用非核心功能接口;

    2)   优先级--针对单个接口

    1、正向用例优先测试,逆向用例次之(通常情况,非绝对);

    2、是否满足前提条件 > 是否携带默认参值参数 > 参数是否必填 > 参数之间是否存在关联 > 参数数据类型限制 >参数数据类型自身的数据范围值限制

    3)   设计分析

    通常,设计接口测试用例需要考虑以下几个方面:

    1、是否满足前提条件

    有些接口需要满足前置条件,才可成功获取数据。常见的,需要登陆Token。

    逆向用例:

    针对是否满足前置条件(假设为n个条件),设计0~n条用例

    2、是否携带默认值参数

    正向用例:

    带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其它不填写,设计1条用例;

    3、业务规则、功能需求

    这里根据实际情况,结合接口参数说明,可能需要设计n条正向用例和逆向用例

    5、参数是否必填

    逆向用例:

    针对每个必填参数,都设计1条参数值为空的逆向用例

    4、参数之间是否存在关联

    有些参数彼此之间存在相互制约的关系

    逆向用例:

    根据实际情况,可能需要设计0~n条用例

    5、参数数据类型限制

    逆向用例:

    针对每个参数都设计1条参数值类型不符的逆向用例

    6、参数数据类型自身的数据范围值限制

    正向用例:

    针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例

    逆向用例:

    针对每个参数(假设n个),设计n条每个参数的参数值都超出数据范围最大值的逆向用例

    针对每个参数(假设n个),设计n条每个参数的参数值都小于数据范围最小值的逆向用例

    以上几个方面考虑全的话,基本可以做到如下几个方面的覆盖:

    主流程测试用例:正常的主流程功能校验;

    分支流测试用例:正常的分支流功能校验。

    异常流测试用例:异常容错校验

    4)   编写描述

    尽量逻辑化,这样方便后续的维护

    5)   实践操作

    接口样例

    获取订单列表接口(多条件)

    获取店铺指定期间的所有订单列表(多种条件组合),默认根据日期倒序排序。

    接口方向

    客户端 -> 服务端

    接口协议

    接口地址:$xxx_Home/xxx/鉴权前缀/xxxxx/getAllOrderList

    接口协议:JSON

    HTTP请求方式:GET

    消息请求

    字段列表如下:

    字段名

    数据类型

    默认值

    必填项 

    备注

    shopId

    int

     

    商铺编号

    token

    string

     

    条件

    设备令牌。Token鉴权方式必填

    dateType

    int

    1

    订单查询时间字段。

    1:下单时间(order_time)

    2:订单完成时间(order_finish_time)

    3:结算时间(shop_settle_time)

    startDate

    date

     

    查询日期

    endDate

    Date

     

    查询结束日期。

    orderStatus

    String

     

    订单状态。

    不填表示所有状态

    多个状态之间以英文逗号分割

    0:已预定

    1:已开单

    2:派送中

    3:已完成(原已结帐)

    4:退单中

    5:已退单

    8:自助下单

    9:待确认

    orderTransactionType

    Int

     

    订单交易状态。

    不填表示所有。

    1:未完成,

    2:已完成(3:已完成, 5:已退单)

    payType

    int

     

    支付方式。

    不填表示所有。

    1:现金

    2:POS

    3:线上

    cashierId

    int

     

    收银员

    billerId

    int

     

    导购员

    pNo

    int

     

    页码,从第1页开始,默认为1

    pSize

    int

     

    每页记录数,默认为10

    消息请求样例:

    ?shopId=1111111111&token=123411nmk515155&queryDate=2015-10-10

    消息响应

    字段元素如下:

    字段名

    数据类型

    默认值

    必填项 

    备注

    orderTotalPriceTotal

    double

     

    实收金额合计(已完成的合计)

    platformTotalIncomePriceTotal

    double

     

    平台服务费合计

    cashPayTotal

    double

     

    现金支付(已完成的合计)

    posPayTotal

    double

     

    POS支付(已完成的合计)

    onLinePayTotal

    double

     

    线上支付(已完成的合计)

    lst

    object

     

    明细列表

    明细列表对象字段元素定义:

    字段名

    数据类型

    默认值

    必填项 

    备注

    orderId

    string

     

    订单ID

    orderTitle

    string

     

    订单标题

    mobile

    string

    会员账号,如果是会员则显示手机号,为空时表示“非会员”

    settlePrice

    double

     

    交易金额

    orderTime

    datetime

     

    下单时间

    serviceAmount

    double

     

    平台服务费

    Status

    Int

     

    订单状态。

    0:已预定

    1:已开单

    2:派送中

    3:已完成(原已结帐)

    4:退单中

    5:已退单

    8:自助下单

    9:待确认

    cashPay

    double

     

    现金支付

    posPay

    double

     

    POS支付

    onLinePay

    double

     

    线上支付

    成功时,返回JSON数据包:

    {

        "code": 0,

        "msg": "查询订单列表成功!",

        "data": {

            "pNo": 1,

            "rCount": 5,

            "orderTotalPriceTotal": 23.3,

            "platformTotalIncomePriceTotal": 0,

            "lst": [

                {

                    "orderTitle": "kouxiangtang",

                    "settlePrice": 15.89,

                    "cashTotal": 15.89,

                    "posTotal": 0,

                    "onLineTotal": 0,

                    "orderTime": "2015-09-29 13:44:26",

                    "orderId": "12345679282015092913440268141",

                    "mobile": "13424183952"

                },

                {

                    "orderTitle": "红塔山",

                    "settlePrice": 7.5,

                    "cashTotal": 7.5,

                    "posTotal": 0,

                    "onLineTotal": 0,

                    "orderTime": "2015-09-29 11:37:58",

                    "orderId": "12345679282015092911370588273"

                }

            ]

        }

    }

     

    用例设计

    测试思想-测试设计 <wbr>接口测试用例设计实践总结

    测试思想-测试设计 <wbr>接口测试用例设计实践总结


    测试思想-测试设计 <wbr>接口测试用例设计实践总结

    测试思想-测试设计 <wbr>接口测试用例设计实践总结

     

    存在问题:

    如上,还没写完就有40几条用例了,要是接口参数再多点,接口数量再增加点,工作量可想而知,所以,问题来了,咋办呢?

    个人见解:

    1、根据接口的使用对象(外部,系统内部),有选择的去、留部分用例

    2、根据接口的是否核心接口,有选择的去、留部分用例

    3、根据参数说明,及实际情况,有选择的去、留部分用例

    实例:

    上例这个接口,是供app、商铺后台调用的,且为系统内部调用,所以,以下用例可酌情略去:

    test-E-按商铺id查询-商铺id非int型

    test-E-按设备token查询-token非string类型

    test-E-按订单时间类型查询-时间类型非int型

    test-E-按起始日期查询-时间类型非date型

    test-E-按结束日期查询-时间类型非date型

    test-E-按订单状态查询-订单状态非string类型

    test-E-按交易状态查询-交易状态非int型

    test-E-按支付方式查询-支付方式非int值

    test-E-按收银员查询-收银员id非int值

    test-E-按导购员查询-导购员id非int值

    test-E-按页码查询-页码非int值

    理由:

    这个接口是给其它开发于系统内部调用的,开发过程中,开发者肯定需要调用这些接口,如果类型错了,他们也就获取不到预期的数据,这些错误,他们肯定可以发现,所以,他们传递的参数值一般能保证类型正确。

    test-N-按参数类型最大值查询    所有参数

    test-E-按商铺id查询-商铺id超过类型范围值

    test-E-按订单状态查询-订单状态值超过类型最大值

    test-E-按交易状态查询-交易状态值超过int类型最大值

    略去的用例部分(参数值超过类型最大值)

    理由:

    1、内部调用,参数值不是外部手动输入的,输入数据长度、值大小可控,当然如果数据一直增长,那再大的类型可能都无法保证不超出,比如自动增长的商铺id

    2、部分参数的参数值是自定义的,比如 订单时间类型,就那几种,除非传错了,不然不可能超出范围

    最后简化后的用例数差不多28条,如果是手工测试,对于正向用例,根据等价类原理,可以制造一条数据,覆盖多条用例,当然,也可以冗余处理,即一条用例一条数据,这样的好处就是每次的验证点比较单一一点,比较有针对性。

    问题

    如果是自动化测试呢,这里是设计一个方法覆盖多条用例呢(如上,一条数据,覆盖多条用例)?还是一个方法覆盖一条用例呢?

    我个人的答案是一个方法一条用例,你的呢?

     

  • 相关阅读:
    bzoj1015星球大战(并查集+离线)
    bzoj1085骑士精神(搜索)
    bzoj1051受欢迎的牛(Tarjan)
    左偏树学习
    hdu1512 Monkey King(并查集,左偏堆)
    左偏树(模板)
    PAT (Basic Level) Practice (中文) 1079 延迟的回文数 (20分) (大数加法)
    PAT (Basic Level) Practice (中文) 1078 字符串压缩与解压 (20分) (字符转数字——栈存放)
    PAT (Basic Level) Practice (中文) 1077 互评成绩计算 (20分) (四舍五入保留整数)
    PAT (Basic Level) Practice (中文) 1076 Wifi密码 (15分)
  • 原文地址:https://www.cnblogs.com/tiechui2015/p/9143905.html
Copyright © 2011-2022 走看看