配置测试环境
测试环境配置
测试金字塔策略:
测试类型 | 占比 | 工具 | 覆盖范围 |
---|---|---|---|
单元测试 | 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(),
});
}
});
安全测试补充项
- 健康检查接口安全
- 验证响应不包含敏感信息(如服务器路径、密钥片段)
- 添加身份验证(如 JWT)保护生产环境的健康检查端点
- 代理接口防护
- 实施目标 URL 白名单机制
- 添加速率限制(如 express-rate-limit)
- 设置超时(3000ms 自动取消请求)
- 过滤内部网络地址(防止 SSRF 攻击)
- 输入验证
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() });
}
// 正常处理逻辑...
}
);