引言
软件测试是保障软件质量的核心环节。对于零基础的学习者,理解基础概念比背诵术语更重要。本文精选7个最核心的概念,用场景化解释和代码示例帮你快速入门。
1. 测试用例(Test Case)
是什么:测试用例是描述“如何验证软件功能”的文档,包含输入、步骤、预期结果。
为什么重要:没有测试用例的测试是“凭感觉测”,容易遗漏场景且无法复现。
怎么做:一个标准测试用例包含:
- ►用例ID
- ►测试描述
- ►前置条件
- ►测试数据
- ►测试步骤
- ►预期结果
案例:测试登录页面“密码错误”场景。
| 字段 | 内容 |
| 用例ID | TC_Login_001 |
| 描述 | 验证密码错误时提示正确信息 |
| 前置条件 | 用户已注册,账号:test@example.com |
| 测试数据 | 密码:wrongpass |
| 步骤 | 1. 输入邮箱 2. 输入密码 3. 点击登录 |
| 预期结果 | 页面显示“密码错误,请重试” |
2. 缺陷(Bug / Defect)
是什么:软件实际行为与需求文档或用户期望不一致的地方。
为什么重要:发现并管理缺陷是测试的核心产出。
怎么做:缺陷报告需要包含:
- ►标题:简洁描述问题
- ►复现步骤:别人按此操作能100%复现
- ►实际结果 vs 预期结果
- ►严重程度:致命/严重/一般/轻微
案例:电商网站“加入购物车”按钮无反应。
text
标题:商品详情页点击“加入购物车”按钮无响应
步骤:
1. 打开商品页(商品ID:12345)
2. 点击“加入购物车”按钮
实际结果:页面无变化,控制台无报错
预期结果:按钮变为“已加入”,购物车数量+1
严重程度:严重
3. 黑盒测试(Black-box Testing)
是什么:不关注内部代码,只测试软件“输入什么→输出什么”。
为什么重要:这是测试人员最常用的方法,模拟真实用户使用场景。
怎么做:设计测试数据时使用等价类划分和边界值分析。
案例:测试一个“年龄输入框”(要求1-120岁)。
等价类划分法:
- ►有效类:1-120(选中间值 25)
- ►无效类:<1(0)、>120(200)、非数字(abc)
边界值分析法:
- ►最小值边界:0、1、2
- ►最大值边界:119、120、121
用Python写一个简单的边界测试:
被测函数
def validate_age(age):
if 1 <= age <= 120:
return True
return False
边界值测试
assert validate_age(0) == False # 下边界-1
assert validate_age(1) == True # 下边界
assert validate_age(2) == True # 下边界+1
assert validate_age(119) == True # 上边界-1
assert validate_age(120) == True # 上边界
assert validate_age(121) == False # 上边界+1
text
<div style="margin:24px 0;border:1px solid #E3F2FD;border-radius:8px;background:#FAFAFA;overflow:hidden;"><div style="display:flex;align-items:center;gap:12px;padding:12px 20px;background:linear-gradient(135deg,#E3F2FD,#BBDEFB);"><span style="width:36px;height:36px;background:#2196F3;color:#fff;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-weight:bold;font-size:16px;flex-shrink:0;">4. </span><span style="font-size:17px;font-weight:700;color:#1565C0;">自动化测试(Automation Testing)</span></div><div style="padding:16px 20px;"><p><strong>是什么</strong>:用代码代替人工执行测试用例。</p>
<p><strong>为什么重要</strong>:回归测试(每次改代码后重新测)人工做成本高,自动化能大幅缩短时间。</p>
<p><strong>怎么做</strong>:使用Selenium WebDriver模拟浏览器操作。</p>
<p><strong>案例</strong>:自动化测试一个简单登录流程。</p></div></div>
# 输入账号密码
driver.find_element(By.ID, "email").send_keys("test@example.com")
driver.find_element(By.ID, "password").send_keys("myPassword123")
driver.find_element(By.ID, "login_btn").click()
# 验证登录成功
assert driver.current_url == "https://example.com/dashboard"
driver.quit()
注意:不是所有场景都适合自动化。界面频繁变动的模块,自动化维护成本反而高。
5. 回归测试(Regression Testing)
是什么:修改代码后,重新测试所有受影响的功能,确保旧功能没被破坏。
为什么重要:开发修一个bug可能会引入新bug,回归测试能尽早发现。
怎么做:优先选择核心功能和高风险模块进行回归。自动化测试是回归测试的利器。
案例:开发修复了“支付页面金额显示错误”后,需要回归:
- ►支付页面金额显示(修复点)
- ►登录功能(未改,但需确认)
- ►商品列表(未改,但需确认)
- ►订单查询(未改,但需确认)
6. 单元测试(Unit Testing)
是什么:测试代码中最小的可测试单元(通常是一个函数或方法)。
为什么重要:尽早发现代码逻辑错误,降低后期修复成本。
怎么做:开发人员编写,测试人员可参与评审。
案例:测试一个计算折扣的函数。
单元测试
def test_calculate_discount():
assert calculate_discount(100, "SAVE10") == 90.0
assert calculate_discount(100, "SAVE20") == 80.0
assert calculate_discount(100, "INVALID") == 100.0
assert calculate_discount(0, "SAVE10") == 0.0