树枝接口开放平台Xmind测试用例 + 自动化测试代码(JAVA + TestNG)

测试用例

功能测试

  1. 管理员功能

    • 接口发布流程

      • 创建/编辑接口文档(参数校验)

      • 接口上下线状态切换

    • 权限管理

      • 开通/关闭用户调用权限

      • 充值调用次数(正常/超额/负数场景)

    • 数据可视化

      • 接口调用统计图表准确性

      • 实时数据刷新验证

  2. 用户功能

    • 接口浏览与搜索

      • 模糊搜索功能验证

      • 接口详情页显示完整性

    • 在线调试工具

      • 参数输入校验

      • 响应结果格式化展示

    • SDK集成验证

      • 一行代码调用成功案例

      • SDK异常处理(网络错误/密钥错误)


接口测试

  1. API基础测试

    • 用户认证接口

      • 正常登录/Token过期/无效凭证

    • 权限校验接口

      • 有权限调用 vs 无权限调用

    • 接口调用统计接口

      • 高频调用计数准确性

  2. 安全场景

    • 签名认证算法验证

      • 篡改签名后的错误响应

      • 过期时间戳重放攻击模拟

    • 网关鉴权穿透测试

      • 未携带accessKey直接访问后端接口

  3. 异常测试

    • 错误参数格式(空值/超长/特殊字符)

    • 超频调用触发限流(返回429状态码)

    • 服务降级场景(模拟Dubbo服务不可用)


UI测试

  1. 管理后台

    • 数据图表加载速度

    • 表单提交后状态反馈

    • 权限操作二次确认弹窗

  2. 用户门户

    • 在线调试工具交互流畅性

    • SDK代码示例复制功能

    • 响应结果高亮/折叠显示


其他专项测试

  1. 性能测试

    • 网关吞吐量测试(JMeter模拟1000+并发)

    • Dubbo RPC调用延迟监控

    • 数据库查询性能(百万级调用记录统计)

  2. 安全测试

    • SHA256加密逆向破解尝试

    • SQL注入/XSS攻击渗透测试

    • 敏感信息泄露检查(如日志中的密钥)

  3. 兼容性测试

    • 浏览器:Chrome/Firefox/Safari/Edge

    • 操作系统:Windows/macOS/Linux服务器环境

    • JDK版本:JDK8/11/17兼容性验证

  4. 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>

测试用例说明:

  1. 用户登录测试:验证基础认证流程

  2. 有效签名调用:测试正常签名生成与网关鉴权

  3. 无效签名调用:验证安全校验机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值