这几年陆陆续续带过不少从零转行做软件测试的新人,也面试过上百个候选者。我的一个真实感受是:软件测试这个岗位,入门门槛确实不高,但想干明白、拿到好 offer、在项目里不被当成“点点点”的工具人,需要补的东西其实非常多。很多朋友上来就问我“测试到底怎么学”“面试怎么准备”“没有真实项目经验怎么办”,这些问题都很实在,但也说明大家对软件测试的理解还比较散。这篇学习文档,我就按照自己带新人的思路,把软件测试从基础概念、完整流程、项目实战,到自动化测试、物联网设备测试,再到面试和简历准备,串成一条清晰的主线来写。标题里带个“(一)”,是因为这个领域真要展开写,一篇肯定装不下,这一篇先把最核心、最容易卡住新人的部分讲透。
这篇内容适合谁?简单说三类人:一是完全零基础、想转行测试但不知道怎么下手的;二是已经入行半年到一年、感觉自己只会手工点点点、想系统提一下的;三是正在准备软件测试面试,想快速把项目经验和知识体系理顺的。文章会尽量说人话,凡是概念性的东西都用例子去套,凡是实操性的东西都给具体步骤,你跟着走一遍,比单纯看一堆“八股”要管用得多。
1. 先搞明白软件测试到底在做什么
1.1 一个能让外行听懂的定义
我经常用一句话给新人解释测试:软件测试就是带着“找茬思维”去验证一个软件产品是否满足预期需求的过程。注意,这里有两个关键词,“验证”和“是否满足”。你不是随便乱点,也不是为了找 bug 而找 bug,而是对照需求和设计,用各种手段去确认这个软件的行为对不对、稳不稳定、好不好用。
生活里最贴近的类比就是验房。你买了一套房,开发(施工方)说交付了,质量没问题。你不会直接签字入住,你得请验房师或者自己拿着尺子、测电笔到处看:墙面平不平、水管漏不漏、插座通不通电、窗户关不严实。验房师就是软件测试工程师,施工方就是开发工程师,而那一份《房屋验收清单》就是测试用例。这么一想你就明白了,测试不是“没事找事”,它是在交付前用相对低的成本堵住问题,避免问题上线后造成更大的损失。
从行业分工来看,软件测试在研发团队里属于质量保障角色。它不像开发那样直接创造功能,但它确保功能是可用的、靠谱的。尤其是现在互联网产品迭代特别快,一个小版本出问题,可能直接影响用户口碑和公司收入,所以测试这个环节在正规团队里是绝对不可跳过的。
1.2 为什么软件测试成了高性价比的入行选择
我见过太多背景五花八门的人转行测试:学机械的、学会计的、做运营的,甚至有之前开滴滴的。为什么?首先,测试岗位对专业背景要求相对宽容,它更看重你的逻辑思维、细心程度和沟通能力,这些和大学专业没关系。其次,测试岗位的成长路径清晰:功能测试 → 自动化测试 → 测试开发 → 测试专家/质量经理,每一步都有明确的能力要求和对应的薪资空间。再者,测试工作有一个特别好的特点——它需要接触整个项目的方方面面,需求、设计、开发、运维、产品,你都会碰到,这对个人视野的拓宽很有帮助。
但我也得泼一盆冷水。测试入门简单,竞争同样激烈。这几年基础功能测试的求职门槛已经被抬高,很多公司明确要求“会自动化”“懂接口测试”“有测试框架经验”。所以这篇文档我不会只讲手工测试,后面会用相当篇幅带你接触自动化和项目实战,这才是你现在开始学测试真正需要尽早补上的东西。
1.3 测试工程师的核心能力模型
很多新人以为测试的核心能力就是“会找 bug”,这其实是个误区。我把测试工程师的核心能力拆成四块,你在学习和准备简历时都可以对照这个模型去检查自己:
- 业务理解能力:能看懂需求文档、能理解用户使用场景。这是测试的前提。
- 测试设计能力:能把一个复杂的业务拆成一条条可执行的测试用例,覆盖正常路径和异常路径。这是核心中的核心。
- 技术执行能力:会搭建测试环境、会写 SQL 查数据、会抓包看接口、会写自动化脚本。这是决定你薪资上限的部分。
- 沟通推动能力:发现问题后能准确表述给开发,能推动 bug 修复,能在评审会上提出有效意见。
这四个能力不用同时练到满分,但你需要有方向地去补。比如你现在是零基础,优先练业务理解和测试设计,然后慢慢补执行能力中的 SQL、Linux、接口工具。等你把这些串起来,你就不是“点工”,而是真正意义上的测试工程师了。
2. 第一课必须掌握的核心概念
2.1 测试类型:不同维度看同一个软件
测试类型这个概念,你可以理解成“从不同角度去检查这个软件”。我把最常用的几种给你列出来,并配上实际场景说明:
| 测试类型 | 在测什么 | 生活化理解 | 常见工具/手段 |
|---|---|---|---|
| 功能测试 | 功能是否符合需求和设计 | 验证这扇门能不能正常开合、锁能不能锁上 | 手工执行、用例管理工具 |
| 接口测试 | 系统之间或模块之间的数据传输是否正确 | 检查水电管道是否通畅、压力是否正常 | Postman、Requests、Jmeter |
| 性能测试 | 系统在高并发、高负载下是否稳定、响应是否达标 | 看这座桥在高峰期能不能扛住车流 | JMeter、LoadRunner、Locust |
| 兼容性测试 | 软件在不同设备、系统、浏览器上表现是否一致 | 看这双鞋合不合不同脚型 | 真机实验室、云测平台 |
| 安全测试 | 系统是否有漏洞、数据是否会被窃取或篡改 | 看房子的门窗锁是否防得住不速之客 | Burp Suite、AppScan、手工渗透 |
我建议你不要一开始就想着把每个类型都学精,那不现实。优先把功能测试做扎实,然后学接口测试,因为接口测试性价比极高,它既能帮你理解系统结构,又是自动化测试的基础,面试时也是必问内容。性能和安全,可以等有了一定经验后再深入。
2.2 测试级别:从一段代码到一个完整产品
测试级别描述的是“测试的粒度”,从单元到整个系统,一层层往上。很多新人一上来就盯着整个 App 点点点,反而忽略了更底层的测试。
- 单元测试:针对开发写的一个函数、一个类。这通常由开发自己做,但作为测试你得明白它存在,因为它能提前拦住很多低级问题。
- 集成测试:把多个模块组合起来测,验证模块之间的接口和交互是否正确。比如购物车模块和订单模块合在一起,下单后数据能不能正确流转。
- 系统测试:把整个软件系统当作一个整体来测,模拟用户真实使用场景,验证功能、性能、兼容性等各方面是否符合需求。这是功能测试工作的主战场。
- 验收测试:由需求方或最终用户确认软件是否满足预期,决定能不能上线交付。UAT(用户验收测试)就是这一环。
说句实在话,日常工作中功能测试主要落在“系统测试”这一层,但你在学习时必须知道上面还有单元和集成,因为后面你接触接口测试和自动化测试时,会频繁用这些概念来划分工作边界。
2.3 测试用例怎么设计才叫专业
测试用例是整个测试执行的地图。它写得好不好,直接决定你这个版本的测试质量高不高。我见过不少新人写的用例,要么就是“输入正确的用户名密码,点击登录,验证登录成功”,一句话带过,完全没法执行。要么就是密密麻麻列了几百条,但大部分都是无效重复。
一份能让人拿去就能执行的测试用例,至少要包含这些字段:用例编号、所属模块、前置条件、测试步骤、测试数据、预期结果、实际结果、优先级。给你一个例子,就拿电商 App 的登录模块来说:
| 用例编号 | 模块 | 前置条件 | 测试步骤 | 测试数据 | 预期结果 | 优先级 |
|---|---|---|---|---|---|---|
| LOGIN_001 | 登录 | 已安装App,处于未登录状态 | 输入正确手机号和密码,点击登录 | 手机号138****1234,密码abc123 | 登录成功,跳转首页,显示用户昵称 | P0 |
| LOGIN_002 | 登录 | 已安装App,处于未登录状态 | 输入正确手机号,错误密码,点击登录 | 手机号138****1234,密码wrong | 登录失败,提示“密码错误” | P1 |
| LOGIN_003 | 登录 | 已安装App,处于未登录状态 | 输入错误格式手机号,点击登录 | 手机号12345 | 无法提交或提示“手机号格式不正确” | P1 |
| LOGIN_004 | 登录 | 已安装App,处于未登录状态 | 点击同意协议,使用手机号验证码登录 | 验证码123456 | 登录成功 | P0 |
| LOGIN_005 | 登录 | 已安装App,处于未登录状态 | 输入正确手机号密码,点击登录后断网 | 正确手机号密码 | 提示“网络异常,请重试”,不会闪退 | P2 |
看完这个表你应该有感觉了,所谓“专业”并不是写得长,而是每个步骤可操作、每个结果可判断、每一条都是真实场景可能发生的。写用例时你心里要始终有一个问题:如果这个功能坏了,我用什么步骤、什么数据能最快把它测出来。
设计用例的方法,我建议大家先把“等价类划分”和“边界值分析”用熟,这两个足够覆盖大部分场景。等价类划分是把输入数据分成有效和无效的类别,不必每个值都测。比如手机号格式,有效等价类是一串11位数字,无效等价类是少于11位、含字母等。边界值分析则是专门在临界状态取数,比如“密码长度为6到20位”,那6位、20位、5位、21位这四个值一定要测,因为编程里边界是错误的高发地带。其他像场景法适合业务流程测试,因果图法适合复杂逻辑判断,你后面再慢慢扩展。
2.4 用例覆盖度:怎么衡量测够了没有
新人常问的一句话是“到底要写多少用例才够”。我一般不建议追求绝对数量,而看两条标准:第一,需求文档里所有可验证的点是否都有对应用例。你可以做一个需求跟踪矩阵,把需求编号和用例编号一一对应,做完一版测试就对照检查一遍,这是最不容易漏测的办法。第二,核心重要路径(比如注册、登录、下单、支付、退款)必须有正向用例、逆向用例、异常场景用例。
覆盖度是可以量化的。比如需求里有10个功能点,你写了20条用例,其中12条执行通过,那么功能覆盖率为100%(10个点都有涉及),用例通过率为60%(12/20)。有了这两个数字,你在写测试报告的时候就不会只说“测完了没问题”,而是可以说“覆盖率100%,通过率92%”,这个表达质量立刻不一样。
3. 一整套测试流程,从需求到上线
3.1 流程全景:测试不是从写用例才开始的
很多人以为测试的工作从“开发提测”开始,其实正规团队里的测试工作从需求阶段就介入了。完整的测试流程大致是:
需求评审 → 测试计划 → 测试设计(写用例) → 测试执行(冒烟测试→系统测试→回归测试) → 缺陷跟踪 → 测试报告 → 上线验证。
我强调一遍:测试人员一定要参加需求评审。为什么?因为很多需求文档本身就有歧义、有漏洞,甚至有不合理的逻辑。如果你在需求阶段就发现并提出“优惠券和满减叠加计算规则没有定义清楚”“退款成功后优惠券是否返还”等问题,你就不用在后续开发完成后堵着一堆 bug 去沟通。测试前置,是效率最高的问题拦截方式。
3.2 测试计划阶段:先想清楚再动手
测试计划是给整个测试活动定调子。新人往往忽视它,觉得不如写用例实在。但实际上,一份好的测试计划能让你对接下来的工作量、风险、资源有数。核心要明确几点:测试范围(测哪些功能、不测哪些)、测试策略(用什么手段测,比如功能测试+接口自动化回归)、准入准出标准(开发提测要达到什么条件,测试做完要达到什么标准才能上线)、排期和人力安排。
准入准出标准特别值得认真定。比如准入标准可以定义成“开发冒烟通过、核心流程无阻塞 bug、提测包版本号正确”,准出标准可以定成“P0/P1 级 bug 全部关闭、P2 级遗留数量不超过 N 个且有规避方案、测试覆盖率100%”。有了这些,你就不用纠结“到底能不能上线”,按标准说话就行。这也是你去面试的时候可以拿出来体现专业度的细节。
3.3 测试执行:从冒烟开始,一步一步推进
开发提测后,千万别一头扎进去把几百条用例全跑一遍。第一件事是先做冒烟测试,也就是用一小束最核心的用例快速验证主流程通不通。比如电商 App 冒烟,就看用户能不能登录、能不能浏览商品、能不能加购下单。冒烟都不通过,直接打回给开发,理由就是“主干道都堵死了,测不了其他的”。
冒烟通过后,再根据优先级去执行完整用例集。执行时有一个习惯我可以分享给你:拿到一个版本,先花半小时把需求文档和开发给的“本轮改动说明”过一遍,搞清楚本次改动点集中在哪些模块,然后优先测改动点,再测与之关联的周边模块,最后做一遍全回归。如果时间紧张,改动点和关联点是绝对不能漏测的,这就是风险导向的测试思维。
3.4 Bug 记录和回归:让开发看一眼就明白
发现一个 bug,很多人直接在微信里甩一句“登录挂了”。这不行,开发根本没法干活。一个规范的 bug 单至少要包含:标题(模块+现象,例如“登录-输入正确密码点击登录后提示系统错误”)、环境信息(设备、系统版本、App版本、网络)、前置条件、复现步骤、实际结果、预期结果、截图或日志、严重级别。这其中的复现步骤必须精确到每一步,开发才能真正复现你发现的问题。
关于严重级别的定义,我提供一个团队里常见的分级表,你在面试和实战中都可以直接用:
| 级别 | 定义 | 例子 |
|---|---|---|
| 致命(Blocker) | 系统无法使用,数据丢失,安全漏洞 | 支付后订单丢失、用户隐私数据泄露 |
| 严重(Critical) | 主功能不可用,但可通过绕过方式解决 | 登录失败无法购物、主流程页面白屏 |
| 一般(Major) | 功能异常但不影响主流程,有可用替代方案 | 商品筛选条件不生效、分享文案错误 |
| 建议(Minor) | 体验或界面问题,不影响功能 | 按钮文字偏小、错别字、颜色不协调 |
回归测试时有一个点要特别注意:开发修复一个 bug,往往会在旁边引入新问题。这就是为什么每次修复后不仅要去验证这个问题本身,还要把它周边的模块也回归一遍。所谓“回归”,其实是防“旧 bug 修了、新 bug 生”的关键手段。我的习惯是专门整理一个“回归用例集”,每次版本更新就把主流程用例和上次出过问题的用例放进里面跑一遍,比每次临时抓脑壳可靠多了。
3.5 测试报告:用数据说话
测试执行完成后,测试报告就是你这段工作的总结。别写成“本次测试发现 bug 12 个,目前已全部修复”,太单薄。有价值的测试报告应该包括:测试范围、执行用例数/通过数/失败数、缺陷统计(按级别和模块分布)、遗留问题与风险评估、结论(是否达到上线标准)。
比如你写“本轮共执行用例 320 条,通过 302 条,通过率 94.4%。遗留 P2 级 8 个、P3 级 10 个,均为非主流程问题,有规避方案,建议上线后下个版本修复”,这个结论就很清晰,领导和开发都能基于它做决策。数据分析能力强的人,甚至可以加上“缺陷主要集中在支付模块(占比40%),建议开发复盘支付模块的代码质量”,这就是测试工作的增值部分。
4. 真刀真枪:一个人也能做的测试项目实战
4.1 没有真实测试项目怎么办
这是我在后台被问得最多的问题——“简历上要写测试项目,但我没有真实项目经验,怎么办?”我的回答是:测试项目不一定要来自公司。你自己完全可以搭一个被测试的对象,然后按照正规流程走一遍测试。招聘方要看的其实不是你测过多牛的内部系统,而是你有没有完整走测试流程的能力、有没有拿得出手的产出物。
被测试的对象从哪来?三条路。第一,开源的测试实战网站,网上有不少专门给练习者准备的商城、社交、人事管理系统,功能完整,拿来就能测。第二,直接用你日常高频使用的成熟产品,比如你天天用的工具类 App,你可以以一个新版本发布为背景,自己写测试计划和用例,设计缺陷报告。第三,如果你会一点点编程,自己写个简单的 demo,比如一个带登录和增删改查的备忘录网页,然后用它去跑完整测试流程,这种“自己造轮子做测试”的方式,在面试时反而更能体现技术动手能力。
我个人最推荐第一种和第三种结合:从开源测试网站入手练测试设计和执行,再写一个简单接口自动化脚本去测其中的接口层,这样你的项目既能体现手工测试能力,又能体现自动化能力。
4.2 从 0 到 1 跑通一个 Web 商城项目
假设你现在用一个开源商城系统来做测试项目,我给你梳理一下需要做哪些事。
第一步,明确范围。你的测试对象是“商城系统 V1.0”,核心模块包括用户注册登录、商品浏览、购物车、下单支付(可用模拟支付)、订单管理、退款售后。你要在文档里明确,本版本不测性能,不做安全渗透。
第二步,写测试计划。确认你的环境是 Windows + Chrome + 测试环境地址,测试数据自己造,周期两周,用例量预估 150 到 200 条。准入准出标准按前面讲的定。
第三步,写测试用例。建议按模块分类,登录模块、商品模块、购物车模块、订单模块各一套。商品模块就可以深入一点:商品搜索能不能按名称模糊匹配?价格排序是否正确?商品详情库存显示是否准确?库存为 0 的商品能不能加购?这些细节写出来,用例的质量就上去了。
第四步,执行并记录。把发现的问题写成标准 bug 单,即使系统本身可能没有 bug,你也要站在“找茬”的角度去设计一些容易出问题的场景,比如极端数据、频繁点击、断网重连。测试就是要敢于把系统往“坏”的方向逼一逼。
第五步,输出测试报告。把你的执行数据、缺陷分布、风险评估和结论放进去,这份报告就是你简历上“项目经验”部分最有力的支撑物。
4.3 测试数据的准备:边界值和大数据量都别放过
测试数据往往被新人忽略,但它在实际项目里影响巨大。一个老手和一个新手的差别,经常就体现在数据造得好不好。
边界值的准备,以商品数量为例:购物车单商品数量限制为 1-99,那你要准备的数就包括 0、1、99、100,以及正整数和小数的组合。0 能不能提交?100 会不会被拦截?1.5 个商品会不会被系统接受?这些边界点都是 bug 高发区。
大数据量的准备,目的是验证系统在大量数据下的表现。比如订单列表有 5000 条数据时,翻页是否正常?搜索框输入一个只匹配 1 条数据的关键字和一个匹配 2000 条数据的关键字,响应差异有多大?如果你只会测空列表和一两页数据,很多分页和加载的问题就漏掉了。
有些数据用界面操作生成很慢,新手一定要尽早学会直接用 SQL 插入测试数据。比如直接往订单表插入 1000 条记录,比在前端下一千单快得多。这个技能面试也会问,属于测试必备基本功。
4.4 简历和面试里怎么把项目讲出彩
简历上写测试项目,千万别只写一句“参与商城系统的功能测试”。我给你一个可以直接抄作业的项目描述框架,分三块:项目职责、测试手段、量化成果。
职责部分写:“负责商城系统用户注册、下单、退款等核心模块的功能测试;独立完成测试计划、测试用例的设计与评审;执行测试用例并跟进缺陷修复。”
测试手段部分写:“使用 Python + Requests 对订单查询接口进行接口自动化测试,编写脚本 20 条,实现每日回归;使用 JMeter 进行下单接口简单压测,验证并发下单场景下系统稳定性。”
量化成果部分写:“累计设计并执行测试用例 200+,发现有效缺陷 40+;核心模块用例覆盖率达 100%,缺陷解决率 95%;通过自动化回归,将版本发布前的主流程回归时间从 2 小时缩短到 30 分钟。”
面试时被问到“你项目里面最大的难点是什么”,你就讲数据准备和边界问题,或者讲你怎么推动开发修复一个难复现的偶现 bug。关键是把你做过的细节和思考讲出来,而不是背模板。项目不在大小,在真实感和深度。
5. 自动化测试入门,先别急着买书
5.1 哪些适合自动化,哪些是伪需求
很多人一学测试就想上自动化,还没入门就买了一堆书,结果学了一半放弃了。我的建议是,先弄清楚自动化适合什么问题,再决定投入多少精力。
自动化的本质是用脚本代替人去执行重复性、高频率、需要快速验证的测试。所以它天生适合三类场景:第一,回归测试,每次发版都要跑的主流程用例;第二,接口测试,数据校验逻辑清晰,适合写脚本批量验证;第三,需要模拟大量数据的并发场景,人工根本没法模拟。
不适合自动化的场景也很明显:UI 界面频繁变动的地方,你会把大量时间花在修脚本而不是测功能上;探索性测试和视觉效果验证,比如布局是否美观、交互是否自然,这些机器替代不了人。另外我特别提醒一句,如果一个项目还在频繁改功能阶段,你贸然上自动化,脚本会一直报废,得不偿失。
5.2 用 Python + Selenium 写第一个 UI 自动化用例
如果你决定从 UI 自动化入手,我推荐 Python + Selenium 这套组合。为什么?因为 Selenium 生态成熟、资料多、面试认可度高,而且 Python 语法友好。我先带你写一个最简单的用例流程,不是让你马上会用,而是让你先感知一下 UI 自动化到底长什么样。
第一步,安装环境。需要装 Python,然后用 pip 安装 selenium,命令是pip install selenium。同时下载对应浏览器的 WebDriver,比如你用 Chrome 就下载 ChromeDriver,版本要和浏览器版本匹配,这是新手最容易卡住的地方之一。
第二步,写一个打开浏览器并搜索的场景。核心思路就是:用代码实例化一个浏览器对象,用find_element定位页面元素,用send_keys输入内容,用click点击按钮,然后用断言判断结果。给你一个最简单可跑的脚本示例,目标是打开一个搜索页面并搜索“软件测试”:
from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() driver.get("https://www.example.com/search") search_input = driver.find_element(By.ID, "search_input") search_input.send_keys("软件测试") search_button = driver.find_element(By.CLASS_NAME, "search_btn") search_button.click() time.sleep(2) assert "软件测试" in driver.title driver.quit()第三步,把它变成完整的用例。实际做自动化,你会发现单独的脚本没有意义,需要一个框架把用例组织起来。最常用的模式是 pytest + Selenium:用 pytest 管理用例的收集和执行、用 fixture 做前置条件(比如登录)、用断言判断结果。你可以先理解“写一个 Python 函数就是一个用例,断言失败就是用例失败”这个核心思想,后面再补框架细节。
第四步,加等待。新手写 UI 自动化,最大的痛苦是“脚本一会儿过一会儿挂”。本质是页面元素加载速度不稳定,代码执行到点击时元素还没出现。解决办法是用显式等待,比如WebDriverWait,而不是傻等time.sleep。这个知识点你后续一定会反复用到,先在脑子里打个标记。
5.3 接口自动化的最小实践
相比 UI 自动化,我更推荐你把精力优先放到接口自动化上。它在面试里权重高、工作里实用性强、脚本还比 UI 稳得多。
接口自动化测的是什么?是系统对外提供的 HTTP 接口。比如查询订单接口,你发送一个订单编号,它返回订单状态。用 Python 的话,只需要用 Requests 库发请求、解析响应、做断言。给你一个最小示例:假设有一个用户登录接口,你给它 POST 一个用户名密码,预期返回 code 0 和一个 token。
import requests url = "https://api.example.com/login" data = { "username": "test_user", "password": "123456" } resp = requests.post(url, json=data) result = resp.json() assert result["code"] == 0, "登录接口返回异常" assert "token" in result["data"], "登录接口未返回 token" print("登录接口测试通过")这段代码的逻辑就是接口测试的全部核心:用接口文档构造请求,用断言验证响应。你可能很快会接触 Postman 这样的图形化工具,它的本质其实也是“发送请求、看响应、比对预期”,用代码写只是把这一过程固化和批量化了。
接口自动化里面最容易踩的坑有三类。第一,接口鉴权问题,很多接口需要先登录拿 token,然后每次请求带上,你要处理好这个依赖关系。第二,测试数据管理,接口的数据往往依赖数据库里的脏数据,你需要学会造数据和清理数据。第三,断言写得太弱,比如只断言 code 是多少,不验证关键字段,导致响应数据结构悄悄变了也没发现。这个坑我特别提醒每一个转行做自动化的朋友。
5.4 自动化脚本维护的坑,提前告诉你
自动化测试真正难的不是“写脚本”,而是“维护脚本”。很多团队自动化推进不下去,百分之八十的原因不是脚本写不出来,而是改功能后脚本太多维护不过来,最后废弃。
我见过不少新人,第一天热情满满写了 50 条用例,结果版本迭代第二次后就有一半跑不过了。为什么?因为 UI 改动太频繁,定位符(比如元素的 id、class)变了,脚本找不到元素就失败。解决办法有两个方向:一是优先做接口自动化,接口的变更频率比 UI 低得多;二是如果非要做 UI 自动化,把元素定位信息集中管理,比如放到一个专门的文件里,功能变化时只需要集中修改。
另外,自动化用例要挑真正稳定的核心流程来跑。我自己做项目的风格一直是“少量稳定用例日常回归,核心业务变更时手动补充探索性测试”,这样既不会让自动化成为摆设,也不会让团队被脚本绑架。
6. 涉及物联网设备的软件测试怎么测
6.1 物联网测试和纯软件测试最大的区别
这几年物联网设备越来越多,智能音箱、智能门锁、扫地机器人、健康监测手环,都牵扯软件测试。我在热搜里看到“涉及物联网设备的软件测试怎么测”这个问题,确实值得单独拿出来讲一讲,因为它的测试思路和普通 App 测试差距非常大。
物联网测试和纯软件测试最核心的区别,是它的被测对象不再只是一个 App,而是“端-管-云”三层结构。端是设备端的 SDK 或固件,管是通信网络(WiFi、蓝牙、MQTT、NB-IoT),云是云端平台和业务后台。一个功能你看着是在 App 上点的,但背后可能涉及设备端逻辑、网络传输、云端服务三方的配合。任何一个环节出问题,用户感知到的都是“这个设备不好用”,但你要定位到具体是哪一层挂了,这才是物联网测试真正的难点。
我举一个具体例子:你打开 App 远程关一盏智能灯。这个动作涉及 App 发指令 → 云平台接收并下发 MQTT 消息 → 灯收到指令并执行 → 执行状态回传 App。哪一步都可能出问题:App 本身按钮没反应、网络消息丢失、云端推送组件故障、设备离线、状态回传延迟。所以物联网测试人员必须有“全链路视角”,而不是只盯着手机屏幕。
6.2 搭建物联网测试环境的要点
物联网项目的测试环境,比单纯 Web 项目复杂得多。我建议你至少关注这几块:
设备管理:被测设备、备用设备、不同品牌型号的设备都要备齐。兼容性测试尤其重要——同样一个 App,可能连的是不同厂商的设备,协议细节差异会导致行为不同。
网络环境:要能模拟正常网络、弱网(比如信号差、带宽小)、断网、网络切换(WiFi 切 4G)等场景。断网重连是我在物联网测试里最喜欢测的场景之一,因为设备端和云端经常在“重连”这个环节出状态不同步的问题。
日志与协议分析工具:你可能需要抓 MQTT 报文来看设备与云端的交互内容,也需要看设备端日志来定位问题。这里的调试工具因项目而异,但思路是通用的:你必须能观察到数据在哪一层流动、在哪一层丢失。
云端模拟工具:有些平台提供云端的测试环境接口,你可以在没有真实屋外设备的情况下模拟设备上报数据,验证云端的逻辑是否正确。
环境搭建这件事,我强烈建议你拿一份物联网设备的开发者文档和测试用例模板,跟着跑一遍“设备配网 → 绑定 → 在线控制 → 离线告警 → 解除绑定”的完整流程,把每一步涉及端的范围、网络要求、云端接口记录下来,会比你东一句西一句地学要高效得多。
6.3 稳定性、功耗、弱网测试的实际玩法
物联网设备通常是 7×24 小时开机的,所以稳定性测试是重中之重。它的玩法不是测“用一次没问题”,而是让设备持续运行很长时间,看会不会死机、会不会内存泄漏、会不会积攒到一定时间后响应变慢。我见过一个团队跑 72 小时连续开关设备,结果到第 30 小时真的复现了设备偶发无响应的问题。这类问题用短时间手动测试根本发现不了。
弱网测试也非常关键。普通 App 弱网体验差一点,用户还能忍;物联网设备弱网表现差,常常直接表现为“设备失联”“指令不执行”,这对用户来说是不能接受的。弱网测试的核心场景包括:指令下发时刚好弱网、设备正在上报数据时断网、弱网状态下有多个指令同时下发。你可以用软件模拟弱网环境,设置不同的丢包率、延迟、带宽,再观察设备行为。
功耗测试主要针对电池供电的设备,比如智能门锁、手环。它的核心问题是待机电流是否足够低、连续工作状态下电池能撑多久。这一块有专业工具去测耗电量,对初级测试来说,你要先学会阅读功耗需求文档,明确待机功耗、工作功耗的指标,再去按场景测试。
6.4 物联网测试用例设计的差异
物联网测试的用例设计和普通软件测试有一个非常大的差异:每个用例都要标注“端、管、云”的参与方和状态。
我举个例子,智能门锁“远程开门”功能,你的用例至少应该覆盖这么几类:设备在线的远程开门成功场景;设备离线的远程开门失败及提示场景;弱网下开门超时及后续状态是否恢复场景;多个手机同时操作开门的并发场景;开门指令下发后云端收到、设备未执行的回查机制。这里的每一条,都需要清楚描述设备初始状态、网络状态、云端状态。
刚入行物联网测试的人,最大的困惑往往是“我不知道有哪些场景值得测”。我的建议是:把设备的整个生命周期状态拉出来,逐一配对方——出厂、配网、绑定、使用中、离线、上报、OTA 升级、解绑、恢复出厂,每一个状态转换点都是测试的黄金点。把这些场景用状态机思维梳理一遍,你的用例就比大多数新人厚实得多。
7. 面试八股和求职准备
7.1 高频面试题到底在考什么
软件测试的面试,表面上在问“八股”,实际上每一个问题背后都在考察你“有没有真正理解测试的本质”。我列几个最高频的问题,直接把考法和答法给你拆开。
“针对一个登录页面,你怎么设计测试用例?”这个问题可以说 100% 会被问到。它考的是你的测试设计基本功。不要上来就背等价类边界值,而是先说思路:先考虑功能层面(正常登录、错误密码、账号不存在、验证码错误、记住密码),再考虑安全层面(密码明文传输、SQL 注入、暴力破解锁定),再考虑 UI 和体验层面(错误提示是否友好、按钮是否可点击状态正确),最后考虑异常和兼容性(断网、系统时间、不同浏览器)。这个结构化回答,已经比大多数候选人强。
“什么是 bug 的生命周期?”它考的是流程理解。标准回答是:新建 → 指派 → 修复 → 验证 → 关闭;如果验证不通过,重新打开;如果有争议,评审决定。再补充一句你知道“无效 bug”的概念(指开发认为设计如此或无法复现),说明你见过真实项目。
“自动化测试和手工测试的关系你怎么看?”它考的是认知深度。我的推荐答案是:两者互补而非替代。手工测试擅长探索性、体验性、一次性场景测试,自动化擅长重复性、回归性、可量化验证。自动化不是手工的替代品,而是把手工从低效重复里解放出来的工具。
7.2 Python 和测试相关的高频编程题
面试里“软件测试 面试 python”这个热搜说明,Python 能力确实成为测试岗位的重要考察点。我给你的建议是,不用学得多深,但以下三类必会。
第一类,基础语法:列表、字典去重,字符串反转,排序。比如“统计一个字符串里每个字符出现次数”,你十秒钟就要能写出来。
第二类,读写文件和简单数据处理。测试经常需要从日志里提取信息,比如读取一个日志文件,筛选出包含 ERROR 的行,统计数量。
第三类,自动化相关的小题。比如“如何判断一个 URL 请求是否成功返回期望状态码”,这类题考的就是 Requests 的用法。
我特意提醒一句:面试官看 Python 题,重点不在于你的写法多优雅,而在于你有没有测试思维,比如你会不会写断言、会不会考虑异常分支。一个会写 assert 的候选人,比一个只会 print 的候选人,观感完全不一样。
7.3 HR 面和常见问题应对
HR 面容易被技术人忽视,但挂在这一轮的人一点都不少。HR 问的核心问题其实只有一个:你是不是一个靠谱、能合作、稳定的人。所以你的回答重点要放在“稳定性、学习能力、团队协作”上。
“你为什么转行做测试?”不要回答“因为开发太难”“因为测试门槛低”。更好的说法是:“我通过学习和实践,发现自己适合且喜欢测试这份工作,我喜欢找问题的过程,也享受通过测试保障一个产品稳定上线的成就感。”如果你能举一个具体的例子说明你是如何通过细心发现别人忽视的问题的,那说服力会更强。
“你还有什么想问的?”这一题千万别答“没有”。你可以问团队目前测试流程中的最大挑战是什么、新人入职后前三个月的主要学习路径是什么,这类问题既体现你的专业性,又能帮你判断团队质量。
7.4 简历上那些细节,决定了你过不过筛
最后说简历。我筛简历时,最头疼的就是看到“熟悉 Python、熟悉 Selenium、熟悉 JMeter”,但没有任何证据支撑。简历不是技能清单,是你证明自己能做事的说明书。我给你的建议是,每一个技能后面都要跟一句实际应用场景,比如“熟悉 Python,能使用 Requests 编写接口自动化脚本完成每日回归”,这比干巴巴的“熟悉 Python”有说服力得多。
项目经历里的时间要一致、职责要具体、数字要真实可验。我见过太多人在项目“量化成果”里写“发现缺陷 100+”,一问细节就露馅。面试官问到你数字背后的故事时,你讲得越具体越真实、越模糊越危险。宁可写“发现缺陷 30+”然后把这个 30 体现在哪些模块讲得清清楚楚,也不要虚报一个自己圆不上的数字。
我自己的体会是,测试的岗位竞争确实在升温,但企业对真正“会干活”的测试人的需求也始终存在。所谓“会干活”,不是会点几下鼠标,而是你有一套完整的方法论去做测试设计,你能用工具和代码去提升效率,你能在没有头绪的时候知道怎么排查问题。学测试是不是能速成?我的回答是:核心方法论可以速成,但真正的能力一定来自你实际上手跑过一个项目、真实推过一个 bug 修复、写过哪怕几十行自动化脚本。这篇先帮大家把框架搭起来,下一篇我会深入讲接口自动化框架的搭建,以及如何把一套自动化用例真正跑在项目的日常回归里。
最后给你一个实操建议:看完这篇后,别急着继续看下一篇,先动手做两件事。第一,用你手边的一个 App,按照文中的标准写 20 条登录模块的测试用例并实际执行。第二,用 Python + Requests 去调用一个公开的测试接口,实现“发请求 + 断言响应 + 打印结果”这个最小闭环。做完这两步,再回来学下一篇的框架,你会发现知识一下就落地了。