测试用例覆盖率是度量测试完整性和有效性的一个重要手段,通常使用测试用例对于需求或代码的覆盖百分比来计算。这里的需求,可以包括涉众请求、需求规格等文档中的业务路径和规则,也涵盖据此衍生出的功能和非功能性方面的一些要求,后一部分内容通常细化于概要设计、测试设计等相关的文档中。
API规格文档用于详细描述其客户端如何调用这些接口,目前主流的规范有Swagger2、OpenAPI3两种,且Swagger3的最新版本版本已经和OpenAPI3相融合。Swagger通过在代码中嵌入注解来自动生成API规格文档,好处是可显著提高API文档对开发者的可维护性和理解性。近几年,一些API管理工具也逐步被越来越多的公司所引入,用户可以通过指定格式的WIKI或自定义的设计器来方便地编写和维护接口规范文档。
接口测试用例不仅可以用于验证API实现的有效性,也可以同时包含API规范、以及性能、安全性等方面的非功能性内容。在接口层面开展更多的测试,不仅可以获得比单元测试更高的业务累计覆盖率,也可以有比基于界面的自动化测试更高的效率。有关接口测试的优势,有兴趣的同学可以查看笔者以前发布的这篇文章。
接下来,我们从3个方面,给大家介绍下接口测试用例设计的一些常见思路。
1.从API规格文档生成接口测试用例
以下是一个OpenAPI3文档示例。
openapi: 3.0.0
info:
title: User Registration
version: 1.0
paths:
/register:
post:
summary: Register a new user
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterRequest'
responses:
'201':
description: User registered successfully
'400':
description: Invalid request
/login:
xxx
components:
schemas:
RegisterRequest:
type: object
required:
- username
- password
- email
properties:
username:
type: string
password:
type: string
minLength: 8
email:
type: string
format: email
required:
- username
- password
- email
设计的用例可以:
- 包含用户注册、登录等文中列出的所有API功能端点(path);
- 设计至少一个参数正确且可成功注册和登录的一个基本流测试用例;
- 设计违反上述HTTP请求约束的异常用例,如空用户名、过短的密码和错误的邮箱格式等等;
- 为不同的响应Code(此处为201和400)设计不同的测试用例。
我们开发的DeepTest,可以协助大家自动生成基于各个请求参数、请求头、请求体中的不同字段约束的异常用例。有兴趣的小伙伴可访问这里试用。
2.参照需求、设计文档中的用户操作和业务规则条款,设计可以在接口层面验证的功能测试用例。对于基于微服务或前后端分离的应用,在API接口层可覆盖绝大部分的后端业务处理场景。例如:
- 使用相同的用户名重复注册;
- 使用相同的邮箱重复注册;
- 用户成功登录;
- 登录账号过期;
- 登录密码错误;
- 登录密码错误3次,账号被锁定;
- 密码错误非连续累计3次,账号不锁定。
目前市场上常见的一些接口测试工具如PostMan、Metersphere、APIFox和Deeptest,提供了测试场景的编排功能,无代码创建基于数据驱动、关键字驱动的接口自动化测试已十分方便。
3.基于接口开展其他的非功能性测试
比如安全性方面,可以测试系统管理接口对于某些用户的限制访问(基于角色的用户授权);项目A的用户不能够访问项目B的数据(数据安全控制)。
性能方面,测试各个接口是否达到预期的并发QPS和请求响应时间要求;也可以模拟双十一等特定时间的业务峰值,验证一组常用的业务操作组合的性能是达到预期。
对于一个长期提供服务的系统,老版本接口的回归测试显得尤为重要,建议大家可以选择主流的一些支持版本控制的接口管理和测试工具。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。