menu dzf
search self_improvement
目录
接口测试围绕哪些方面设计用例
dzf
dzf 2023年06月18日  ·  阅读 286

在软件开发过程中,接口测试扮演着举足轻重的角色,它是保障系统各组件间交互顺畅、功能稳定的关键环节。为了高效精准的设计接口测试用例,总结出一份相关接口测试策略文档是测试人员构建全面有效的接口测试方案的一大助力,下面讲讲我们公司的接口测试策略文档。

一、接口测试的核心意义

接口测试专注于验证系统或组件之间接口的正确性、可靠性与安全性。其重要性在于能够提前发现接口层面的缺陷,避免在系统集成阶段才暴露问题,从而大幅降低修复成本,提升系统整体质量。

二.为什么要定义接口测试策略文档

  • 降低理解成本:为团队成员提供统一遵循的规则,减少因个人理解差异导致的用例设计分歧,避免不必要的沟通与误解成本。
  • 提高工作效率:避免成员各自为政,使大家按照规范高效开展工作,尤其在不同项目间能保持一致性,提升整体项目推进速度,减少因方案差异造成的时间浪费。
  • 统一项目质量:确保不同项目在测试环节有统一的质量把控标准,避免质量差异过大,保障项目整体质量稳定可靠。
  • 利于通用方案制定:为上下游流程如自动化框架学习与应用提供基础,可基于规范设计通用方法实现,例如开发通用的必填项用例生成工具或函数,减少编程编码成本,提升自动化测试效率与效益,促进测试流程的标准化与协同化。

三、接口测试点提取的依据与方法

  • 深入剖析接口文档
    接口文档是接口测试的重要依据,其中涵盖了接口的功能描述、输入输出参数定义、请求方式、响应格式等关键信息。通过仔细研读文档,测试人员能够梳理出基本的测试点。例如,对于一个用户注册接口,文档规定用户名参数为必填项,且长度限制在 6 - 20 个字符之间,测试点便可确定为:验证用户名缺失时接口的响应、输入长度小于 6 或大于 20 的用户名时接口的处理情况。

  • 紧密围绕业务逻辑
    理解业务流程是挖掘接口测试点的关键。从业务角度出发,考虑接口在不同业务场景下的行为模式。以电商系统的订单提交接口为例,其涉及商品选择、库存校验、价格计算、用户地址验证等多个业务环节。测试点应包括:选择不同数量和种类的商品时接口对库存的校验、修改商品价格后接口计算总价的准确性、输入错误或不完整的用户地址时接口的提示信息等。

  • 主动构造异常场景
    故意提供异常输入数据是检验接口健壮性的有效手段。常见的异常情况包括空值、边界值、非法字符等。比如,对于一个数字输入框的接口,可输入边界值(如最小值减 1、最大值加 1)、特殊值(如 0、-1)以及非数字字符,观察接口是否能正确处理并给出合理的错误提示。

  • 细致跟踪数据流向
    追踪数据在接口间的传递和处理过程,确保数据的完整性、准确性和一致性。在一个包含用户认证、数据查询和更新的系统中,需关注用户登录后的数据获取是否正确、数据更新操作后数据库中的数据是否与接口返回结果一致。

四、接口测试点的详细分类

针对以上阐述的接口测试依据,我们给出对应的接口测试策略文档标准,在写测试用例时大家都参考接口测试策略文档标准,分为input,handle,output三层,下面详细介绍一下。

接口输入参数校验(input)

  1. 必填项校验
    案例:登录接口,要求用户名和密码必填。
    测试点:不输入用户名或密码,检查接口返回的错误码是否正确,提示信息是否清晰明确,如 “用户名不能为空”“密码不能为空”。
    验证方法:发送不带用户名或密码的请求,观察接口响应。
    关注点:
    文档对齐,必填项缺失时是否有非200状态码返回以及对应msg;
    如果字段为非必填时,一样要校验,移除该字段时是否会影响接口结果;
    后端服务一定会用到的参数是否为必填项,比如说查询购物车订单的order_id
  2. 数值型校验
    案例:年龄输入接口,限制年龄范围为 1 - 120 岁。
    边界值测试:输入 0、1、120、121,验证接口对边界值的处理是否符合预期,如输入 0 时应提示 “年龄不能小于 1 岁”,输入 121 时应提示 “年龄不能大于 120 岁”。
    特殊值测试:输入 -1、0,检查接口的响应,确保不接受不合理的特殊值。
    数值范围外测试:输入 150,查看接口是否能正确识别并处理超出范围的值。
    关注点:
    边界值,1-10,验证0、1、10、11;如果没有给出边界值,需要根据业务场景定义一个较大的边界数来校验长度,如果没有进行长度校验,我们可以提交严重程度较低的缺陷甚至是建议级别的缺陷给开发。
    特殊值,0、-1;
    int最小值(-2147483649)和最大值(2147483648); java
    小数,1.5
    字符串形式的数值,比如说”1”和1
    空 None null
  3. 字符串校验
    案例:昵称输入接口,允许输入长度为 2 - 10 个字符的字符串。
    边界值测试:输入长度为 1、2、10、11 的字符串,如 “a”“ab”“abcdefghij”“abcdefghijk”,验证接口对字符串长度的限制是否生效,对于不符合长度要求的输入应给出相应提示。
    特殊字符测试:输入包含特殊字符(如 “@#%^&*” )的字符串,检查接口是否能正确处理,是否有过滤或转义特殊字符的机制。
    关注点:
    取值范围内外的值,边界值,比如说mysql定义字符长度varchar(200)或者说产品文档给出了固定范围值; 4-10
    空字符串,python中以””来表示;len(str)=0
    特殊字符 中文,中a@#¥%……&*(;
    英文的大小写;
    空 None null
  4. 列表或字典校验
    案例:兴趣爱好选择接口,接收一个兴趣爱好列表。
    边界值测试:传入空列表 []、只包含一个元素的列表 [“阅读”] 和超过预期数量元素的列表(如包含 10 个兴趣爱好的列表,而接口规定最多选择 5 个),验证接口对列表长度和内容的处理是否正确。
    特殊值测试:传入包含特殊值(如 None)的列表,观察接口的行为。
    关注点:
    取值范围内外的值,边界值;
    特殊值 为空[]、{}
    空 None null
    存在子对象 存在递归的逻辑,需要考虑 [234, [123, 123]] {“key”: {“a”: 123}}
  5. Bool 型校验
    案例:用户状态切换接口,接受一个布尔值表示用户是否激活。
    测试点:分别传入 true、false 和 null,验证接口对布尔值的正确处理,确保用户状态能按照预期进行切换或提示错误信息。
  6. 时间戳校验
    案例:查询订单接口,可根据时间范围筛选订单,时间范围限制为最近 30 天内。
    边界值测试:传入当前时间减 31 天的时间戳和当前时间加 1 天的时间戳,检查接口是否能正确筛选出符合时间范围的订单,对于超出时间范围的查询应给出合理提示。
    特殊值测试:传入一个极小或极大的时间戳,如 0 或一个未来很长时间的时间戳,观察接口的处理结果。
  7. 输入参数与调用方需求匹配度
    案例:根据用户 ID 查询用户信息接口,调用方期望返回用户的基本信息、订单记录和收藏列表。
    测试点:调用接口后,检查返回的结果是否包含用户基本信息、订单记录和收藏列表,且数据格式和内容是否符合预期,确保接口提供的数据满足调用方的业务需求。
  8. 接口定义的调用方法是否方便
    案例:一个查询用户订单的接口,如果需要传入过多不必要的参数,如用户的详细个人信息(除了用于查询的关键标识外),会增加调用方的负担,且容易出错。
  9. 身份秘钥校验
    案例:在一个需要用户登录才能访问的订单管理系统中,用户输入正确的用户名和密码(相当于身份秘钥)后,应能够成功登录并查看、管理自己的订单。
    测试点:模拟正常的登录场景,验证接口是否正确验证秘钥并返回预期的结果(如用户订单列表)。
    关注点:
    正确秘钥
    不存在的秘钥
    过期的秘钥
    未加密的数据是否能被处理
  10. 敏感信息加密
    案例:用户登录时输入的密码经过加密后存储在数据库中,当用户再次登录验证密码时,接口应能够正确地将用户输入的密码加密后与数据库中存储的加密密码进行比对,验证过程中不应出现数据丢失或错误解密导致登录失败的情况。

接口处理逻辑验证(handle)

  1. 约束条件检查
    案例:文件上传接口,普通用户每天最多上传 3 个文件。
    数值限制测试:当普通用户上传第 4 个文件时,检查接口是否返回 “超出每日上传文件数量限制” 的提示信息,并阻止文件上传。
    状态限制测试:在文件上传过程中,模拟网络中断等情况,使文件处于上传中状态,然后检查接口是否提供了查询上传状态、继续上传或取消上传的功能,以及在不同状态下接口的处理逻辑是否正确。
    关注点:
    数值限制,超过数值限制时的处理,比如说扫描文件次数仅有5次,用完5次后的表现形式; “msg”:”userId 812931 XXXX file out of scan time XXX”
    状态限制(不同的数据类型),处理中的状态;不同状态的处理逻辑或者业务操作步骤在不同时序时。接口请求维度,什么样的场景才允许请求该接口;提取对象,遍历对象所有的状态
    关系限制,需要团队成员才能获取团队资料;
    权限限制,管理员和普通用户;
    时间限制,比方说非客户工作日时间上传数据
  2. 越权测试
    案例:用户资料查看接口,用户只能查看自己的资料,不能查看其他用户资料。
    测试点:使用用户 A 的身份尝试查看用户 B 的资料,验证接口是否拒绝访问,并返回相应的权限不足提示信息,确保接口的访问控制机制有效。
  3. 重复数据处理(在数据写的情况下考虑)
    案例:用户注册接口,不允许注册已存在的用户名。
    测试方法:尝试使用已注册的用户名再次注册,检查接口是否能识别重复数据,并给出 “用户名已存在” 的提示信息,保证系统中不会出现重复的用户记录。
    关注点:围绕有唯一性标识的数据自行甄别,有的业务场景需要重复数据,有的重复数据会导致多条记录生成,比如说存在相同姓名的用户信息同时处理的场景
  4. 不同处理数量测试
    案例:分页查询商品列表接口,每页最多显示 10 条商品信息。
    测试点:查询第 1 页时,验证接口返回的商品数量是否不超过 10 条;查询第 2 页时,同样检查返回的商品数量是否符合预期,且数据的正确性和完整性不受影响。
  5. 数据交集或并集处理
    案例:查询商品接口,可根据商品类别和价格范围进行筛选,商品类别包括电子产品、服装、食品,价格范围可自定义。
    测试方法:分别选择不同的商品类别和价格范围组合进行查询,如查询电子产品且价格在 100 - 500 元之间的商品,验证接口返回的结果是否为电子产品类别与指定价格范围内商品的交集,确保接口对数据组合查询的处理正确。
  6. 枚举值遍历
    案例:订单状态更新接口,订单状态有已支付、已发货、已完成、已取消四个枚举值。
    测试点:分别传入这四个枚举值以及一个非枚举值(如 “待处理”),验证接口对不同状态值的更新操作是否正确,对于非法的状态值应给出错误提示,确保接口能正确处理各种可能的订单状态变化。
  7. 状态转换测试
    案例:视频上传接口,包括开始上传、上传中、上传完成、上传失败四个状态。
    测试方法:模拟视频上传过程,检查接口在各个状态转换时的行为是否符合预期。例如,开始上传后接口应返回上传进度信息;上传中时中断网络连接,观察接口是否能正确处理上传中断情况,并在网络恢复后支持继续上传;上传完成后检查视频是否成功保存到指定位置,且接口返回成功提示;上传失败时检查接口是否能准确记录失败原因并告知用户。
  8. 缓存机制校验
    案例:商品详情查询接口,使用 Redis 缓存商品信息,缓存有效期为 1 小时。
    未命中缓存测试:在缓存过期后或首次查询商品时,检查接口是否从数据库获取最新数据,并将数据存入缓存;同时观察接口返回数据的准确性和及时性。
    命中缓存测试:在缓存有效期内多次查询同一商品,验证接口是否直接从缓存中获取数据并返回,返回的数据应与之前存入缓存的数据一致;可通过修改数据库中商品信息,在缓存未更新前再次查询,检查接口返回的是否仍是缓存中的旧数据,确保缓存机制的正确性。
    数据更新与缓存一致性测试:更新商品信息后,立即查询该商品,检查接口是否能及时更新缓存中的数据,使后续查询返回的是更新后的最新信息,保证数据的一致性。
    缓存淘汰机制测试:模拟缓存中存储的数据超过设定的最大数量(如 100 条),继续查询新的商品信息,观察缓存淘汰策略是否按照预期执行,如淘汰最近最少使用的数据,确保缓存机制的有效性和性能。
  9. 其他服务异常处理
    案例:用户登录接口依赖用户认证服务和数据库服务。
    服务连接异常测试:模拟用户认证服务不可用(如关闭认证服务进程),尝试登录,检查接口是否能正确处理连接异常,返回友好的错误提示信息,如 “用户认证服务暂时不可用,请稍后重试”。
    服务返回异常状态码测试:使用 Charles 或 Burpsuite 等工具模拟用户认证服务返回 401(未授权)状态码,检查登录接口是否能识别并处理该异常状态码,提示用户重新登录或联系管理员。
    服务返回空数据测试:模拟数据库查询用户信息为空(如删除用户记录),登录时检查接口是否能正确处理空数据情况,避免出现空指针异常等问题,并给出合理的提示信息,如 “用户不存在,请检查用户名是否正确”。

接口输出结果验证(output)

  1. 异常场景处理
    案例:支付接口,在支付过程中出现系统错误。
    测试点:故意触发系统错误(如修改接口代码使其抛出异常),检查接口返回的错误信息是否安全,避免暴露系统内部敏感信息,如堆栈跟踪等;同时观察接口是否能正确记录错误日志,以便后续排查问题。
  2. 敏感信息加密
    案例:获取用户信息接口,包含用户身份证号、银行卡号等敏感信息。
    测试方法:调用接口后,检查返回结果中敏感信息是否以加密形式呈现,如身份证号显示为 “**************1234”,银行卡号显示为 “**********1234”,确保敏感信息在传输和存储过程中的安全性。
  3. 文档与输出一致性
    案例:根据订单 ID 获取订单详情接口,接口文档定义返回订单编号、商品列表、总价、下单时间四个参数。
    测试点:调用接口后,检查返回结果是否包含这四个参数,且参数的数据类型是否正确(如订单编号为字符串类型,总价为数值类型);同时验证是否存在额外未在文档中定义的参数,确保接口输出与文档描述严格一致。
  4. 数据源校验
    案例:查询用户订单历史接口,数据存储在数据库中。
    直接查询数据源验证:通过数据库查询语句直接获取用户的订单历史数据,与接口返回的订单历史数据进行对比,确保两者完全一致,包括订单数量、订单内容、订单状态等各个方面。
    依赖外部查询接口验证:若存在其他可靠的订单查询接口,可调用该接口获取数据,并与被测接口返回的数据进行比对,从不同角度验证接口输出数据的准确性和完整性。
    关注点:
    (设计合理性)
    (1)是否存在未处理的异常场景 安全测试范畴 (关注点)
    请求异常时返回代码路径会有渗透风险。
    (2)敏感信息加密(关注点)
    身份证、密码、银行卡等不能直接明文返回。
    (3)文档对齐(断言)
    正常的输出参数。
    是否有额外参数未体现在文档中。
    返回的参数类型
    值正确性
    (4)数据源校验(断言)
    ①直接查询数据源
    ②依赖外部查询接口进行校验
    (5)输出参数是否满足调用方(关注点,设计评审时的)

接口测试点的提取需要综合考虑接口文档、业务逻辑、异常情况和数据流向等多方面因素。通过详细分类并结合实际案例进行测试,能够全面有效地发现接口潜在问题,为系统的稳定运行提供有力保障。应在实践中不断积累经验,灵活运用各种测试方法,确保接口测试的质量和效率。

分类:
标签: