跳到主要内容

软件测试速查表

这份速查表汇总了软件测试的核心概念、方法和最佳实践,方便快速查阅。

测试类型速查

按测试阶段分类

类型定义特点工具示例
单元测试测试最小可测试单元快速、隔离pytest, JUnit, Jest, Go test
集成测试测试模块间交互中等速度TestContainers, pytest
系统测试测试完整系统慢、全面Selenium, Playwright
E2E测试模拟用户完整流程最慢、最真实Playwright, Cypress

按测试方法分类

类型说明常见技术
黑盒测试不关注内部实现等价类划分、边界值分析、决策表
白盒测试基于代码结构语句覆盖、分支覆盖、路径覆盖
灰盒测试结合黑盒白盒部分可见内部结构

按测试目的分类

类型目的关注点
功能测试验证功能正确性业务需求满足度
性能测试验证性能指标响应时间、吞吐量
安全测试发现安全漏洞认证、授权、注入
兼容性测试验证跨平台兼容浏览器、操作系统
回归测试防止引入新问题已有功能正常

测试金字塔

            /\            
/ \ E2E 测试(10%)- 最少、最慢、最接近用户
/____\
/ \ 集成测试(20%)- 中等数量、中等速度
/________\
/ \ 单元测试(70%)- 最多、最快、最易维护
/____________\

原则:底层测试多而快,顶层测试少而慢。

测试命名规范

测试文件

test_<module>.py        # Python
<Module>Test.java # Java
<module>.test.js # JavaScript
<module>_test.go # Go

测试方法

test_<method>_<scenario>_<expected_result>

# 示例
test_login_with_valid_credentials_returns_success()
test_login_with_invalid_password_returns_error()
test_divide_by_zero_throws_exception()

AAA 模式

def test_example():
# Arrange(准备)
calculator = Calculator()
a, b = 2, 3

# Act(执行)
result = calculator.add(a, b)

# Assert(断言)
assert result == 5

测试替身速查

类型用途特点
Dummy填充参数不被使用
Fake简化实现可工作但不适用生产
Stub预设返回值不响应外部调用
Spy记录调用信息可验证调用
Mock验证行为预设期望和验证
# Python Mock 示例
from unittest.mock import Mock, patch

# 创建 Mock
mock = Mock()
mock.method.return_value = "result"

# 使用 patch
@patch('module.Class')
def test(mock_class):
mock_class.return_value.method.return_value = "mocked"

常用断言

Python (pytest)

# 基本断言
assert value == expected
assert value != unexpected
assert value is True
assert value is False
assert value is None
assert value is not None

# 集合断言
assert item in collection
assert item not in collection

# 异常断言
with pytest.raises(ValueError):
raise ValueError("error")

# 近似断言
assert abs(value - expected) < 0.001

JavaScript (Jest)

// 基本断言
expect(value).toBe(expected);
expect(value).toEqual(expected);
expect(value).toBeTruthy();
expect(value).toBeFalsy();
expect(value).toBeNull();
expect(value).toBeUndefined();

// 数字断言
expect(value).toBeGreaterThan(10);
expect(value).toBeLessThan(20);

// 集合断言
expect(array).toContain(item);
expect(array).toHaveLength(3);

// 异常断言
expect(() => fn()).toThrow(Error);

// Mock 断言
expect(mockFn).toHaveBeenCalled();
expect(mockFn).toHaveBeenCalledWith(arg1, arg2);

Java (JUnit 5)

// 基本断言
assertEquals(expected, actual);
assertNotEquals(unexpected, actual);
assertTrue(condition);
assertFalse(condition);
assertNull(value);
assertNotNull(value);

// 数组断言
assertArrayEquals(expectedArray, actualArray);

// 异常断言
assertThrows(IllegalArgumentException.class, () -> {
method();
});

// 超时断言
assertTimeout(Duration.ofSeconds(1), () -> {
slowMethod();
});

Go

// 基本断言
if result != expected {
t.Errorf("got %v, want %v", result, expected)
}

// 使用 testify
import "github.com/stretchr/testify/assert"

assert.Equal(t, expected, result)
assert.True(t, condition)
assert.Nil(t, err)
assert.NotNil(t, value)
assert.Error(t, err)
assert.NoError(t, err)

性能测试指标

指标说明建议阈值
响应时间请求到响应的时间P95 < 500ms
吞吐量每秒处理请求数根据业务需求
错误率失败请求比例< 1%
并发用户同时在线用户数根据业务需求
资源利用率CPU/内存使用率< 80%

OWASP Top 10 (2021)

排名风险
A01访问控制失效
A02加密失败
A03注入攻击
A04不安全设计
A05安全配置错误
A06易受攻击组件
A07认证失效
A08软件和数据完整性失败
A09日志监控不足
A10服务端请求伪造 SSRF

常见安全测试检查点

输入验证

  • SQL 注入测试
  • XSS(跨站脚本)测试
  • 命令注入测试
  • 路径遍历测试
  • 输入长度限制测试

认证授权

  • 弱密码测试
  • 暴力破解防护测试
  • 会话管理测试
  • 权限越权测试
  • 密码重置安全测试

数据保护

  • 敏感数据加密测试
  • HTTPS 强制测试
  • Cookie 安全属性测试
  • 敏感信息泄露测试

配置安全

  • 默认账户测试
  • 敏感端点访问测试
  • 安全头设置测试
  • 错误信息泄露测试

覆盖率目标参考

代码类型建议覆盖率
核心业务逻辑90%+
通用工具类80%+
API 层70-80%
UI 组件60-70%
配置代码可忽略

测试工具速查

单元测试

语言工具运行命令
Pythonpytestpytest tests/
JavaJUnit 5mvn test
JavaScriptJestnpm test
Gogo testgo test ./...

E2E 测试

工具特点官网
Playwright多浏览器、多语言playwright.dev
Cypress简单易用、调试好cypress.io
Selenium成熟稳定、生态大selenium.dev

性能测试

工具特点官网
JMeter功能全面、GUIjmeter.apache.org
K6云原生、JS脚本k6.io
LocustPython脚本locust.io

安全测试

工具类型官网
OWASP ZAPDASTzapproxy.org
Burp SuiteDASTportswigger.net
SonarQubeSASTsonarqube.org
SnykSCAsnyk.io

测试最佳实践清单

测试设计

  • 测试命名清晰描述行为
  • 每个测试只验证一个概念
  • 测试之间相互独立
  • 覆盖边界条件和错误情况
  • 使用参数化减少重复

测试执行

  • 测试执行速度快
  • 测试结果可重复
  • 失败时易于定位问题
  • 使用 Mock 隔离外部依赖

测试维护

  • 测试代码与生产代码同等重要
  • 定期重构测试代码
  • 及时修复失败的测试
  • 保持测试覆盖率监控

CI/CD 集成

  • 测试在 CI 中自动运行
  • 设置覆盖率阈值
  • 失败时阻止合并
  • 生成测试报告

常用测试命令

Python

# 运行所有测试
pytest

# 运行特定文件
pytest tests/test_module.py

# 运行特定测试
pytest tests/test_module.py::test_function

# 显示打印输出
pytest -s

# 详细输出
pytest -v

# 只运行失败的测试
pytest --lf

# 覆盖率
pytest --cov=myapp --cov-report=html

JavaScript

# 运行所有测试
npm test

# 监视模式
npm test -- --watch

# 运行特定文件
npm test -- path/to/test.js

# 更新快照
npm test -- -u

# 覆盖率
npm test -- --coverage

Java

# Maven
mvn test
mvn test -Dtest=TestClass
mvn test -Dtest=TestClass#testMethod

# Gradle
./gradlew test
./gradlew test --tests TestClass

Go

# 运行所有测试
go test ./...

# 详细输出
go test -v ./...

# 运行特定测试
go test -run TestFunction ./...

# 覆盖率
go test -cover ./...
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out

测试报告模板

# 测试报告

## 测试概要
- 测试日期:2024-01-01
- 测试环境:staging
- 测试范围:用户模块

## 测试结果
- 总用例数:100
- 通过:95
- 失败:3
- 跳过:2
- 通过率:95%

## 失败用例
| 用例ID | 用例名称 | 失败原因 |
|--------|----------|----------|
| TC001 | 登录测试 | 超时 |
| TC002 | 注册测试 | 断言失败 |

## 覆盖率
- 语句覆盖:85%
- 分支覆盖:78%
- 函数覆盖:92%

## 建议
1. 修复失败用例
2. 提高分支覆盖率
3. 添加边界条件测试