Skip to content

配置测试环境

测试环境配置

测试金字塔策略:

测试类型占比工具覆盖范围
单元测试70%Jest/Mocha验证单个函数/模块逻辑
集成测试20%Supertest验证 API 端点间的交互
E2E 测试10%Cypress/Postman验证完整用户流程

测试工具配置:

bash
# 安装测试依赖
npm install mocha chai supertest sinon --save-dev

测试脚本配置(package.json):

json
{
  "scripts": {
    "test:unit": "mocha test/unit/*.test.js",
    "test:integration": "mocha test/integration/*.test.js",
    "test:e2e": "cypress run",
    "test": "npm run test:unit && npm run test:integration"
  }
}

代理接口伪实现参考(用于测试)

javascript
app.get("/api/proxy", async (req, res) => {
  const { target } = req.query;

  // 验证必需参数
  if (!target) {
    return res.status(400).json({ error: "缺少target参数" });
  }

  try {
    // 模拟代理请求
    const startTime = Date.now();
    const response = await axios.get(target); // 实际使用axios或node-fetch
    const latency = `${Date.now() - startTime}ms`;

    res.json({
      url: target,
      latency,
      status: 1, // 1=成功
      statusCode: response.status,
      timestamp: new Date().toISOString(),
    });
  } catch (error) {
    res.status(502).json({
      error: "目标服务不可达",
      details: error.message,
      timestamp: new Date().toISOString(),
    });
  }
});

安全测试补充项

  1. 健康检查接口安全
  • 验证响应不包含敏感信息(如服务器路径、密钥片段)
  • 添加身份验证(如 JWT)保护生产环境的健康检查端点
  1. 代理接口防护
  • 实施目标 URL 白名单机制
  • 添加速率限制(如 express-rate-limit)
  • 设置超时(3000ms 自动取消请求)
  • 过滤内部网络地址(防止 SSRF 攻击)
  1. 输入验证
javascript
// 示例:使用express-validator进行输入验证
const { query, validationResult } = require("express-validator");

app.get(
  "/api/greet",
  [
    query("name")
      .optional()
      .trim()
      .escape() // 防止XSS
      .isLength({ max: 50 })
      .withMessage("名称过长"),
  ],
  (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }
    // 正常处理逻辑...
  }
);