当前位置:首页  >  IT问答库  >  零基础学软件测试

软件测试学习笔记:10核心知识点_千锋教育

发布:cli 2026-07-03 11:59

推荐答案

核心知识点一览

序号知识点一句话概括
1测试用例设计用有限用例覆盖最多场景
2等价类划分输入数据分区间,一个代表一类
3边界值分析多数Bug藏在边界上
4黑盒vs白盒功能验证 vs 代码逻辑验证
5缺陷生命周期从提交到关闭的完整流程
6自动化测试框架用代码代替手动点击
7性能测试指标响应时间、吞吐量、并发用户数
8接口测试直接验证服务端逻辑
9测试环境搭建隔离、可控、可复现
10测试报告撰写用数据说话,而非主观感受

---

1. 测试用例设计

核心问题:如何用最少的用例发现最多的Bug?

是什么:测试用例(Test Case)是一组输入、执行条件和预期结果的集合,用于验证软件功能是否按预期工作。

为什么重要:无计划的测试就像在迷宫里乱撞——你可能永远走不到出口。一份好的测试用例集,能保证即使换了测试人员,也能覆盖核心功能。

怎么做:

  • ►先列出所有功能点(比如登录:输入用户名、密码、点击登录按钮)
  • ►对每个功能点应用等价类划分和边界值分析(见第2、3点)
  • ►每个用例包含:编号、模块、前置条件、测试步骤、输入数据、预期结果、实际结果、状态

真实案例:测试一个登录功能

  • ►用例1:输入正确用户名和密码 → 登录成功,跳转首页
  • ►用例2:输入正确用户名,错误密码 → 提示“密码错误”
  • ►用例3:输入空用户名 → 提示“用户名不能为空”
  • ►用例4:用户名包含特殊字符 → 根据需求判断是否允许

---

2. 等价类划分

核心问题:当输入数据范围很大时,怎么选测试数据?

是什么:把输入数据分成若干个“等价类”,每个等价类中的任意一个数据,对测试结果的影响是一样的。你只需要从每个类中选一个代表来测试。

为什么有效:假设一个输入框接受1-100的整数,你不需要测1,2,3,...,100。只需测一个有效值(如50)和一个无效值(如0或101)就够了。这大幅减少了测试用例数量。

怎么做:

1. 确定输入条件(如:年龄字段,范围18-60)

2. 划分有效等价类:18-60(一个类)

3. 划分无效等价类:<18、>60、非数字、空值(四个类)

4. 从每个类中选一个值测试

示例:

等价类代表值预期结果
有效(18-60)30通过
无效(<18)15提示“年龄不符合要求”
无效(>60)65提示“年龄不符合要求”
无效(非数字)"abc"提示“请输入数字”

---

3. 边界值分析

核心问题:为什么Bug大多出现在边界上?

是什么:边界值分析(Boundary Value Analysis)专门针对输入条件的边界值进行测试。比如范围是1-100,边界就是1和100,以及它们相邻的值:0、1、2、99、100、101。

为什么有效:程序员写代码时,常犯的错误就是“多了一个”或“少了一个”,比如 if (age >= 18) 写成了 if (age > 18),导致刚好18岁的人被拒绝。

怎么做:

  • ►对每个边界,测试:边界值、边界值-1、边界值+1
  • ►组合等价类和边界值:先划分等价类,再对每个等价类的边界做边界值测试

示例:测试一个密码长度6-20位

  • ►边界值:6位、20位
  • ►边界值-1:5位、19位
  • ►边界值+1:7位、21位
  • ►共6个测试数据,覆盖了所有边界情况

---

4. 黑盒测试 vs 白盒测试

核心问题:测试时到底要不要懂代码?

黑盒测试:

  • ►不看代码,只看功能
  • ►输入什么 → 输出什么
  • ►适合:功能测试、验收测试、系统测试
  • ►工具:Selenium、Postman、JMeter

白盒测试:

  • ►看代码,验证逻辑正确性
  • ►覆盖语句、分支、路径、条件
  • ►适合:单元测试、代码审查
  • ►工具:JUnit、PyTest、SonarQube

什么时候用哪个?

  • ►测试一个登录按钮 → 黑盒:点一下看能不能登录
  • ►测试一个排序算法 → 白盒:检查代码中循环和条件分支是否正确
  • ►实际项目中,两者结合使用:白盒保证代码质量,黑盒保证用户能正常使用

---

5. 缺陷生命周期

核心问题:发现Bug后,接下来会发生什么?

标准流程:

1. 提交:测试人员记录Bug(标题、步骤、截图、环境、严重级别)

2. 确认:测试经理或开发负责人确认是否是Bug

3. 分配:分配给对应开发人员

4. 修复:开发修复代码

5. 验证:测试人员在新版本上验证是否修复

6. 关闭:验证通过,关闭Bug

常见状态:

  • ►NEW(新提交)
  • ►ASSIGNED(已分配)
  • ►FIXED(已修复)
  • ►VERIFIED(已验证)
  • ►CLOSED(已关闭)
  • ►REOPENED(重新打开,验证未通过时)

一个小技巧:提交Bug时,附上清晰的截图和日志,能大幅缩短开发定位问题的时间。

---

6. 自动化测试框架

核心问题:手动测试太慢,怎么用代码代替?

是什么:自动化测试框架是一套工具和规则的集合,让你能编写脚本自动执行测试用例,并生成报告。

为什么需要:

  • ►回归测试:每次发版都要跑一遍,手动跑太慢
  • ►重复性高:同样的操作,每天跑几十遍
  • ►稳定性:代码执行不会疲劳,不会漏步骤

常用框架:

  • ►Web UI:Selenium(Python/Java)+ WebDriver
  • ►移动端:Appium(支持iOS和Android)
  • ►接口:Requests(Python)+ pytest
  • ►性能:JMeter、Locust

一个简单的Selenium示例(Python):

打开浏览器

driver = webdriver.Chrome()

driver.get("https://example.com/login")

输入用户名和密码

driver.find_element(By.ID, "username").send_keys("test_user")

driver.find_element(By.ID, "password").send_keys("test_pass")

点击登录

driver.find_element(By.ID, "login_btn").click()

验证登录成功

assert "Dashboard" in driver.title

关闭浏览器

driver.quit()

text

**踩坑指南**:
- 元素定位:优先用ID,其次用CSS Selector,最后用XPath
- 等待:显式等待(WebDriverWait)比隐式等待更可靠
- 数据隔离:测试数据不要和生产环境共用

---

<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;">7. </span><span style="font-size:17px;font-weight:700;color:#1565C0;">性能测试指标</span></div><div style="padding:16px 20px;"><p><strong>核心问题:系统到底能扛多少人同时用?</strong></p>
<p><strong>关键指标</strong>:</p>
<p>1. <strong>响应时间</strong>:用户发请求到收到响应的时间。通常要求:<200ms(优秀)、<500ms(良好)、<1s(可接受)</p>
<p>2. <strong>吞吐量</strong>:单位时间内系统处理的请求数。单位:TPS(每秒事务数)或QPS(每秒查询数)</p>
<p>3. <strong>并发用户数</strong>:同一时刻系统能同时处理的活跃用户数</p>
<p>4. <strong>错误率</strong>:失败请求占总请求的百分比。通常要求<1%</p>
<p>5. <strong>资源利用率</strong>:CPU、内存、磁盘、网络的使用情况</p>
<p><strong>怎么测</strong>:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>工具:JMeter、LoadRunner、Gatling</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>过程:制定场景 → 录制脚本 → 参数化 → 设置并发 → 运行监控 → 分析报告</li>
</ul>
<p><strong>一个JMeter示例(概念)</strong>:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>线程组:设置100个并发用户</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>HTTP请求:配置目标URL和参数</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>监听器:聚合报告、响应时间图</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>运行10分钟,观察TPS和错误率</li>
</ul>
<p><strong>常见问题</strong>:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>响应时间慢 → 检查数据库查询、缓存、代码逻辑</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>错误率高 → 检查服务器连接池、内存溢出、超时设置</li>
</ul>
<p>---</p></div></div>
<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;">8. </span><span style="font-size:17px;font-weight:700;color:#1565C0;">接口测试</span></div><div style="padding:16px 20px;"><p><strong>核心问题:UI还没做好,能先测后端逻辑吗?</strong></p>
<p><strong>是什么</strong>:直接对API(应用编程接口)进行测试,不经过UI。比如测试一个“获取用户信息”的接口,直接发送HTTP请求,验证返回的JSON数据是否正确。</p>
<p><strong>为什么重要</strong>:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>前置:UI开发完之前就能测,大幅提前测试时间</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>稳定:接口比UI稳定,UI变了接口可能不变</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>效率:一次接口测试能覆盖多个UI测试场景</li>
</ul>
<p><strong>怎么做</strong>:</p>
<ul style="list-style:none;padding-left:0;margin:12px 0;">
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>工具:Postman(手动)、Requests(Python代码)、pytest(自动化)</li>
<li style="position:relative;padding:4px 0 4px 24px;line-height:1.8;"><span style="color:#2196F3;font-weight:bold;position:absolute;left:4px;">&#9658;</span>验证点:状态码、返回数据格式、业务逻辑正确性、异常处理</li>
</ul>
<p><strong>Python + Requests 示例</strong>:</p></div></div>
# 测试登录接口
url = "https://api.example.com/login"
payload = {"username": "test", "password": "test123"}
headers = {"Content-Type": "application/json"}

response = requests.post(url, data=json.dumps(payload), headers=headers)

# 验证状态码
assert response.status_code == 200

# 验证返回数据
data = response.json()
assert data["code"] == 0
assert "token" in data

接口测试清单:

  • ►正常参数 → 返回正确结果
  • ►缺少参数 → 返回错误提示
  • ►参数格式错误 → 返回错误
  • ►超大数据 → 验证处理能力
  • ►空数据 → 验证异常处理

---

9. 测试环境搭建

核心问题:为什么测试环境总是不够用?

是什么:测试环境是独立于生产环境的、用于执行测试的软件和硬件环境。它应该尽可能模拟生产环境,但又完全隔离。

为什么重要:在错误的环境里测试,等于没测。比如你在Windows上测了,但用户都用Mac,那发现的问题可能和用户实际遇到的问题不一样。

怎么做:

1. 环境隔离:测试环境、预发布环境、生产环境必须分开

2. 数据独立:测试数据不能影响生产数据,反之亦然

3. 版本一致:测试环境使用的软件版本(如数据库、中间件)要和生产环境一致

4. 可复现:每次测试前,环境要能恢复到初始状态

常见架构:

  • ►单机环境:开发机直接跑,适合小项目
  • ►Docker环境:用容器隔离,快速搭建和销毁
  • ►云环境:阿里云、腾讯云、AWS,按需创建

一个Docker环境示例(概念):

启动一个MySQL容器

docker run -d --name test-mysql -e MYSQL_ROOT_PASSWORD=root mysql:8.0

启动一个Redis容器

docker run -d --name test-redis redis:7.0

启动被测应用(假设是Spring Boot)

docker run -d --name app --link test-mysql:mysql --link test-redis:redis myapp:latest

相关问题

软件测试学习笔记:10核心知识点_千锋教育

零基础学软件测试的面试准备策略_千锋教育

软件测试学习笔记:5核心知识点_千锋教育

3步搞定软件测试培训助学贷款,省下2万学费_千锋教育

南宁软件测试培训机构教学风格对比:千锋教育为什么称霸?_千锋教育

哈尔滨软件测试培训机构师资稳定性:千锋教育如何打破“老师跑路”魔咒?_千锋教育