测试用例

功能测试
-
管理员功能
-
接口发布流程
-
创建/编辑接口文档(参数校验)
-
接口上下线状态切换
-
-
权限管理
-
开通/关闭用户调用权限
-
充值调用次数(正常/超额/负数场景)
-
-
数据可视化
-
接口调用统计图表准确性
-
实时数据刷新验证
-
-
-
用户功能
-
接口浏览与搜索
-
模糊搜索功能验证
-
接口详情页显示完整性
-
-
在线调试工具
-
参数输入校验
-
响应结果格式化展示
-
-
SDK集成验证
-
一行代码调用成功案例
-
SDK异常处理(网络错误/密钥错误)
-
-
接口测试
-
API基础测试
-
用户认证接口
-
正常登录/Token过期/无效凭证
-
-
权限校验接口
-
有权限调用 vs 无权限调用
-
-
接口调用统计接口
-
高频调用计数准确性
-
-
-
安全场景
-
签名认证算法验证
-
篡改签名后的错误响应
-
过期时间戳重放攻击模拟
-
-
网关鉴权穿透测试
-
未携带accessKey直接访问后端接口
-
-
-
异常测试
-
错误参数格式(空值/超长/特殊字符)
-
超频调用触发限流(返回429状态码)
-
服务降级场景(模拟Dubbo服务不可用)
-
UI测试
-
管理后台
-
数据图表加载速度
-
表单提交后状态反馈
-
权限操作二次确认弹窗
-
-
用户门户
-
在线调试工具交互流畅性
-
SDK代码示例复制功能
-
响应结果高亮/折叠显示
-
其他专项测试
-
性能测试
-
网关吞吐量测试(JMeter模拟1000+并发)
-
Dubbo RPC调用延迟监控
-
数据库查询性能(百万级调用记录统计)
-
-
安全测试
-
SHA256加密逆向破解尝试
-
SQL注入/XSS攻击渗透测试
-
敏感信息泄露检查(如日志中的密钥)
-
-
兼容性测试
-
浏览器:Chrome/Firefox/Safari/Edge
-
操作系统:Windows/macOS/Linux服务器环境
-
JDK版本:JDK8/11/17兼容性验证
-
-
SDK专项
-
多语言支持(Java/Python/Go)
-
版本升级兼容性(v1.0→v2.0平滑迁移)
-
IDE警告检查(如过时方法提示)
-
自动化测试脚本
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.util.*;
public class APIOpenPlatformTest {
private static final String GATEWAY_URL = "http://api-gateway:8080";
private static final String ACCESS_KEY = "test_access_key";
private static final String SECRET_KEY = "test_secret_key";
// 签名生成工具方法
private String generateSign(String secretKey, Map<String, String> params) {
// 1. 参数按字典序排序
List<String> keys = new ArrayList<>(params.keySet());
Collections.sort(keys);
// 2. 拼接参数
StringBuilder sb = new StringBuilder();
for (String key : keys) {
sb.append(key).append("=").append(params.get(key)).append("&");
}
sb.append("secretKey=").append(secretKey);
// 3. SHA256加密
return DigestUtils.sha256Hex(sb.toString());
}
@Test(priority = 1)
public void testUserLogin() throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
HttpGet request = new HttpGet(GATEWAY_URL + "/api/user/login?username=testuser&password=123456");
HttpResponse response = client.execute(request);
String responseBody = EntityUtils.toString(response.getEntity());
Assert.assertEquals(response.getStatusLine().getStatusCode(), 200);
Assert.assertTrue(responseBody.contains("token"));
}
@Test(priority = 2)
public void testAPICallWithValidSign() throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
// 构造请求参数
Map<String, String> params = new HashMap<>();
params.put("accessKey", ACCESS_KEY);
params.put("nonce", UUID.randomUUID().toString());
params.put("timestamp", String.valueOf(System.currentTimeMillis()));
params.put("id", "123");
// 生成签名
String sign = generateSign(SECRET_KEY, params);
params.put("sign", sign);
// 构造请求URL
StringBuilder url = new StringBuilder(GATEWAY_URL + "/api/invoke?");
params.forEach((k, v) -> url.append(k).append("=").append(v).append("&"));
HttpGet request = new HttpGet(url.toString());
HttpResponse response = client.execute(request);
Assert.assertEquals(response.getStatusLine().getStatusCode(), 200);
}
@Test(priority = 3)
public void testAPICallWithInvalidSign() throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
Map<String, String> params = new HashMap<>();
params.put("accessKey", ACCESS_KEY);
params.put("nonce", UUID.randomUUID().toString());
params.put("timestamp", String.valueOf(System.currentTimeMillis()));
params.put("id", "123");
// 使用错误的密钥生成签名
String invalidSign = generateSign("wrong_secret_key", params);
params.put("sign", invalidSign);
StringBuilder url = new StringBuilder(GATEWAY_URL + "/api/invoke?");
params.forEach((k, v) -> url.append(k).append("=").append(v).append("&"));
HttpGet request = new HttpGet(url.toString());
HttpResponse response = client.execute(request);
Assert.assertEquals(response.getStatusLine().getStatusCode(), 401);
String body = EntityUtils.toString(response.getEntity());
Assert.assertTrue(body.contains("Invalid signature"));
}
}
<dependencies>
<!-- TestNG -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.7.0</version>
</dependency>
<!-- HTTP Client -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<!-- SHA256工具 -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
</dependencies>
测试用例说明:
-
用户登录测试:验证基础认证流程
-
有效签名调用:测试正常签名生成与网关鉴权
-
无效签名调用:验证安全校验机制
&spm=1001.2101.3001.5002&articleId=145781430&d=1&t=3&u=4e1ec41511f44bc59820a655fa529ea8)
2046

被折叠的 条评论
为什么被折叠?



