一、前言
- 此教程适合有电脑基础同学(比如知道什么是操作系统、基本类型的文件、熟悉键盘、安装软件等),对软件测试感兴趣的同学,当然也可以因为其他原因而学习;如果你感觉你可以,那我们一起来学习如何调教开发吧!
- 为什么会写这一篇文章?因为:在最近面试的过程中和以往的工作中遇到越来越多不正常的测试工程师;比如面试的过程中:简历写的没有问题,但是面试的时候,最基础的测试问题回答不上来;比如在工作的过程中:基本都在问别的同事该怎么做怎么去测试,连基本的测试工程师要领都不会;还有我看到线下线上有很多关于测试工程师的文章、广告,去引流,骗一些不懂的人去学习,培训质量也是参差不齐,都是流水线操作不管你学会学不会。
- 此文章包含从入门到高级测试,如果你处于某个阶段的测试工程师,希望你可以通过此文章获得提升;此文章仅包含个人观点,如有错误,欢迎指正。
- 文章内容会尽量使用大白话而不是一些专业的名词,如果有也会使用大白话讲解,确保都能看懂。
二、初级测试工程师
2.1 测试理论
你也不想让别人问你测试相关的东西,一问三不知吧,那就慢慢看吧。嘿嘿嘿… 没有标准答案,要求理解并讲明白
2.1.1 软件测试是干什么的?
- 软件测试是把开发根据需求文档和设计(UI)图文档开发出来的软件,根据测试用例进行进行点点点操作;看看软件是否纯在页面与设计图不一致,看看软件功能与需求文档的功能是否一致;如果出现不一致或者有明显的报错,则提出问题(bug)到项目管理工具上。
- 为什么会有软件测试这个行业?
(1)保证软件的质量,提高用户体验
(2)帮助开发解决问题,提高开发效率
(3)减少项目成本,降低项目风险
包含的名词解释
开发:程序员,一般简称开发,分前端开发和后端开发,前端开发负责软件的页面,后端开发负责软件的功能;也就是需要我们调教的同事。
测试用例:记录这如何测试软件的步骤,比如:打开软件,点击按钮,查看页面是否纯在问题,记录下测试用例的步骤,方便复现问题。
需求文档(PRD):需求文档就是客户需要的功能,然后产品经理在需求文档内对客户的功能进行详细的描述,然后给到开发,开发根据需求文档进行开发软件。
示例:小明需要一个手电筒的软件,这个手电筒的软件需要有一个开关,开关打开后,手电筒会亮,开关关闭后,手电筒会灭。
设计图(UI):设计图就是设计根据需求文档,对软件的界面进行设计,然后给到开发,开发根据设计图开发软件的页面。
示例:小明的手电筒软件需要知道开关按钮的大小,颜色等。
管理工具:管理工具就是记录问题的地方,一般使用JIRA、禅道、TAPD等,记录下问题,然后开发去修复问题,修复后,测试工程师去验证问题是否修复成功。
2.1.2 软件测试都有哪些类型
- 软件测试工程师类型:
功能测试:根据测试用例来进行测试,测试软件是否满足需求文档的功能。
接口测试:根据接口测试用例来进行测试,测试软件接口是否符合接口文档。
性能测试:测试软件和后台服务器的性能是否满足需求。
自动化测试工程师:编写自动化代码覆盖测试用例进行自动化测试,提高测试效率,降低人力成本。
安全测试:对软件进行安全测试,常见的有:SQL注入、XSS攻击、逆向破解、DDoS攻击等。 - 测试类型:
黑盒:不知道程序逻辑,只关注输入和输出
白盒:知道程序的内部结构和代码逻辑,需要检查和分析源代码
单元:一个模块(功能)进行测试
集成:多个模块(功能)一起联调测试
系统测试:软件所有模块(功能)一起测试
回归测试:上线后进行回归测试2.1.3 项目流程,测试流程
项目流程:graph TD A[项目启动] --> B[需求评审] B --> C{需求评审是否通过?} C -- 是 --> D[设计] C -- 否 --> B D --> E[设计评审] E --> F{设计评审是否通过?} F -- 是 --> G[开发] F -- 否 --> E G --> H[测试用例编写] H --> I{用例评审是否通过?} I -- 是 --> J[开发] I -- 否 --> H J --> K[执行测试用例] K --> L{测试是否通过?} L -- 是 --> M[需求验收] L -- 否 --> K M --> N[发布] N --> O[回归测试] O --> P[需求结束]测试流程:graph TD A[需求分析] --> B[编写测试用例] B --> C{用例评审是否通过?} C -- 是 --> D[执行测试用例] C -- 否 --> B D --> E[发现bug] E --> F[跟踪bug] F --> G[验证bug] G --> H[测试完成] H --> I[产品验收] I --> J[发布] J --> K[回归测试] K --> L[测试结束]
项目流程大白话:产品经理组织一个需求评审会议,会议同事有:项目经理(项目老大,咱们惹不起)、产品经理、开发、测试、(也会有开发经理、测试经理、开发组长、测试组长等角色),评审会议的过程中,大家会提出对需求文档的疑问,产品进行解答,如果有一些不正常的需求,大家讨论一个解决方案,大家都没有问题后,开发开始根据需求文档进行开发,测试根据需求文档进行编写测试用例,测试用例编写后会有一个测试用例评审会议,会议同事有:产品经理、测试、开发进行用例评估,指出未覆盖到的功能点,用例评审通过后,测试开始根据测试用例进行测试,遇到bug提到项目管理工具上进行跟踪,执行完测试用例,没有bug或者没有严重的bug,就可以交给产品进行验收,验收通过后,就可以发布上线,上线后,测试进行回归测试,回归测试通过后,需求结束。
测试流程:根据需求文档进行编写测试用例,测试用例评审通过后,准备测试环境,执行测试用例,遇到bug提到项目管理工具上进行跟踪,执行完测试用例,没有bug或者没有严重的bug,就可以交给产品进行验收,验收通过后,就可以发布上线,上线后,测试进行回归测试,回归测试通过后,需求结束。
PS:以上是标准的流程,不同公司有不同的流程。
包含的名词解释
单元测试:某个模块的功能测试
集成测试:多个关联模块的功能测试
系统测试:整个软件的功能测试
回归测试:上线后,对软件进行测试,确保软件上线后没有问题
测试计划:测试的详细计划,包括测试时间、测试人员、测试用例、测试环境等
测试报告:测试结果的总结报告,包括测试用例执行情况、bug情况、测试结果等
2.1.4 测试用例怎么写包含什么?
测试用例包含:序号、模块名字、标题、前置条件、操作步骤、预期结果、实际结果、测试人、备注
设计用例的方法有:
- 等价类划分法
将输入数据划分为若干等价类,每个等价类中的输入数据对测试结果的影响是相同的。只需从每个等价类中选择一个代表性的值进行测试。
示例:
输入范围:1 到 100 的整数。
等价类划分:
有效等价类:1 到 100 之间的整数。
无效等价类:小于 1 的整数、大于 100 的整数、非整数。 - 边界值分析法
关注输入数据的边界值,因为边界值附近往往是最容易出错的地方。
示例:
输入范围:1 到 100 的整数。
边界值:1、100、0、101。 - 因果图法
通过分析输入条件(原因)和输出结果(结果)之间的关系,设计测试用例。适用于复杂的逻辑关系。
步骤:
列出所有输入条件(原因)和输出结果(结果)。
绘制因果图,表示条件和结果之间的逻辑关系。
根据因果图生成测试用例。 - 决策表法
适用于有多个输入条件和复杂逻辑的场景。通过决策表列出所有可能的输入组合及其对应的输出。
示例:
输入条件:
条件 1:用户类型(普通用户、VIP 用户)。
条件 2:订单金额(<100、≥100)。
输出结果:
结果 1:是否免运费。 - 状态转换测试法
适用于测试系统在不同状态之间的转换。通过状态转换图设计测试用例。
示例:
状态:
状态 1:未登录。
状态 2:已登录。
事件:
事件 1:用户登录。
事件 2:用户注销。 - 错误推测法
基于测试人员的经验和直觉,推测可能出错的场景并设计测试用例。
示例:
输入空值。
输入超长字符串。
输入特殊字符。 - 场景法
通过模拟用户的实际使用场景设计测试用例,适用于端到端的测试。
示例:
场景:用户登录 → 添加商品到购物车 → 结算 → 支付。
测试用例:
用户登录成功 → 添加商品到购物车 → 结算成功 → 支付成功。
用户登录失败 → 无法添加商品到购物车。
包含的名词解释
序号:测试用例的编号,方便查找
模块名字:测试用例所属的功能模块
标题:测试功能的描述
前置条件:测试用例执行前需要满足的条件
操作步骤:测试用例的执行步骤
预期结果:测试用例执行后,应该得到的结果
实际结果:测试用例执行后,实际得到的结果
测试人:谁测试了这条用例
备注:遇到特殊情况进行备注说明
2.1.5 bug包含什么?
bug包含:标题描述、模块名字、哪个环境、操作步骤、预期结果、实际结果、附件、优先级、严重程度、修复人、备注
bug生命周期:
包含的名词解释
标题描述:bug的标题描述
模块名字:bug所属的功能模块
哪个环境:bug是在哪个环境下发现的
操作步骤:bug的复现步骤
预期结果:bug的预期结果
实际结果:bug的实际结果
附件:bug的截图、视频等
优先级:bug的优先级,一般分为:高、中、低;如何选择:致命严重的bug优先级为高,一般严重bug优先级为中,轻微bug优先级为低。
严重程度:bug的严重程度,一般分为:致命、严重、一般、轻微;如何选择:致命为无法使用软件,严重为影响用户体验,一般为不影响使用,轻微为不影响使用但是影响美观。
修复人:修复bug的开发
备注:遇到特殊情况进行备注说明
2.2 测试工具
工欲善其事,必先利其器。工具功能可以替换其它工具,以下都是广泛使用的基本工具。
2.2.1 抓包工具
Fiddler、Charles、Reqable、HTTP Toolkit等
小明扮演请求,小红扮演返回,小李扮演fiddler
抓包大白话:小明和小红聊天,然后小李是中间人,小明和小红聊天的时候,小李把小明说的123记录下来,然后给小红说123;小明小红说的话小李可以进行篡改分别给小红小明说篡改后的话。
如何抓web的包?
首先下载fiddler,安装后打开,就可以抓包了。如何抓https的包?
点击菜单栏中的 Tools -> Options,在弹出的窗口中,勾选 Capture Https,然后点击OK并安装ssl证书,这样就可以抓取https的包了。如何抓安卓手机app的包?
打开手机上的wifi,设置代理,代理ip为电脑的ip地址,端口号为fiddler的端口默认为:8888,然后打开浏览器输入:电脑的ip地址:8888,点击FiddlerRoot certificate,然后安装证书,安装完成后,就可以抓取手机app的包了。如何判断前后端的bug?
通过看抓到的数据包,如果请求成功,但是返回的数据不对或者错误,那就是后端的bug,如果数据包请求正确前端显示错误或者UI样式错误,那就是前端的bug。如何抓IOS手机的包?
这里使用HTTP Toolkit,首先配置代理与HTTP Toolkit的一致,HTTP Toolkit默认端口号为:8000,然后通过扫码下载HTTP Toolkit证书并安装信任,即可抓IOS的包。一个请求(http)都包含哪些东西?
请求头、请求行、请求地址、请求方式、入参、响应结果、状态码如图所示:1为请求行,2为请求地址,3为请求方式,4为状态码,5为请求头
http请求的常见状态码有哪些?
200:请求成功。服务器已成功处理请求,并返回所需的数据。
400:请求参数错误。客户端发送的请求有误,服务器无法理解。
401:未授权。请求需要用户认证,或认证失败。
403:禁止访问。服务器理解请求,但拒绝执行,通常是因为权限不足。
404:资源不存在。服务器未找到请求的资源。
500:服务器内部错误。服务器在处理请求时遇到意外情况。
502:网关错误。服务器作为网关或代理时,从上游服务器收到无效响应。
503:服务不可用。服务器暂时无法处理请求,通常是由于过载或维护。
504:网关超时。服务器作为网关或代理时,未能及时从上游服务器收到响应。都有哪些请求方式?
GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH等
GET和POST的区别?
GET请求的数据会附加在URL后面,而POST请求的数据会放在请求体中。
GET请求的数据长度有限制,而POST请求的数据长度没有限制。
GET请求的数据会被浏览器缓存,而POST请求的数据不会被浏览器缓存。还有没有其他需要注意的地方?
有当然有,不常用到但需要了结:fiddler设置弱网模式、fiddler篡改请求,百度吧,我累了。tcp和udp的区别,http与https的区别,tcp三次握手,tcp四次挥手,这些做了解,也百度吧。
2.2.1 接口测试工具
Postman、JMeter、Apifox、Swagger、YApi、Eolink、Apipost等
小明扮演请求,小红扮演返回,我们使用postman
大白话:小明和小红有固定的方式聊天,我们知道了聊天内容,聊天的方式和联系地址,然后扮演小明联系小红。
- 如何使用Postman?
首先下载Postman,安装后打开,点击左上角的New,选择Request,然后输入请求地址,请求方式,请求头,请求参数,点击Send,就可以发送请求了。 - 如何做接口测试?
首先需要了解接口文档,接口文档一般包含接口地址、请求方式、请求参数、响应结果等信息,然后根据接口测试用例使用Postman或者JMeter等工具发送请求,查看响应结果是否符合需求和接口文档,如果不符合就有bug。 - 接口测试用例怎么编写?
请求头:请求参数类型修改,token修改,业务功能头部修改等
请求方式修改
请求参数修改(包括正确,错误,边界值,场景分析,必传,不必传)
2.2.2 接口压力测试工具
JMeter、LoadRunner、Locust、Gatling、Apache Bench等
小明扮演请求,小红扮演返回,我们使用jmeter
大白话:我们知道了小明小红的聊天内容,聊天的方式和联系地址,然后我们通过jmeter扮演小明来给小红聊天,一秒内聊多少次由我们决定,看小红能坚持多久会烦。
- 如何使用JMeter?
(1)下载解压jmeter
(2)下载jdk并配置jdk环境变量
(3)配置jmeter环境变量
(4)进入jmeter的bin目录不同的系统打开不同的文件,Windows打开双击jmeter.bat - 如何做接口压力测试?
首先要了解压测的目标是什么,承受住多少的并发、吞吐量和响应时间等这些指标,然后根据这些指标编写压测脚本,使用JMeter发送请求,查看聚合报告是否符合压测指标,如果不符合就提出问题(bug)。 - 如何写一个http请求?
- 还有没有其他需要注意的地方?
(1)首先压测的时候不要随便填写并发数,不然测试环境或者正式环境压蹦了之后,测试环境还好开发打你屁股,如果是正式环境轻者:被领导叼一顿扣工资扣绩效,重者:走人甚至被起诉赔偿。
(2)需要了解并会使用jmeter的断言、监听器、定时器、控制器等。还需要会看服务器的cpu、内存、磁盘、网络等指标。
5. 分布式压测:https://www.sunweisu.xyz/2023/10/18/post/40110/
2.2.3 终端工具
SecureCRT、Xshell、PuTTY、Termius、FinalShell、MobaXterm、SSH Secure Shell Client等
小红家扮演服务器,我们使用Xshell
大白话:我们知道了小红的家,想去家里找小红聊天,我们使用终端来连接小红的家,然后使用小明和小红之间约定好的命令和小红聊天或者帮组做家务。
如何使用Xshell连接终端?
(1)下载Xshell学习版
(2)新建会话
(3)输入主机(ip地址)端口号
(4)点击保存后双击连接
(5)输入账号密码
(6)连接成功linux基本命令
老多了,记住需要用到的基本命令:创建文件夹,创建文件,编辑文件,查看服务器状态,查看杀死进程,查看日志,启动文件,压缩解压文件,查看ip和ping连接,赋权等。
学习链接:https://www.runoob.com/linux/linux-tutorial.html
2.2.3 数据库工具
Navicat、SQLyog、DBeaver、HeidiSQL、DataGrip、MySQL Workbench等
小红家扮演数据库,我们使用Navicat
大白话:我们知道了小红家的家,想去查看小红家的动物有多少,动物的数量,删除某个动物,修改某个动物,增加某个动物,我们使用Navicat连接小红家,然后通过她妈和小红的命令来对小红家的动物进行增删改查操作。
如何使用Navicat连接数据库?(通常都是mysql)
(1)下载Navicat
(2)新建连接
(3)输入主机(ip地址)端口号,用户名,密码
(4)点击保存后双击连接操作数据库都需要哪些基本命令?
增:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
删:
DELETE FROM table_name
WHERE condition;
改:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
查:
SELECT * FROM table_name;
- 数据库sql进阶学习:https://www.runoob.com/sql/sql-tutorial.html
三、中级测试工程师

3.1 测试思想
相比于初级测试工程师,中级测试工程师需要具备更多的测试思想,还有包括但不限于测试计划、测试报告、教程文档的编写等。同时,中级测试工程师还需要具备一定的编程能力,能够编写自动化测试脚本,提高测试效率。
3.1.1 思想升级
- 如何进行高效率的测试?
首先需要了解自己。然后看自己是否为平和或者开心的心态(情),如果不是那就进行调整。
再者就是精神状态,精神头不好那就休息,精神头好那就继续。也要保证自己的生物钟是正常的。 - 遇到测试疲劳自己办?
测试疲劳:在测试过程中,进行长时间、重复、枯燥的工作,导致测试人员产生疲劳感;也就是一直循环测试某一个功能,导致自己认为不用测试,一直是好的,上线也不会出现问题,导致自己放松了警惕,从而出现bug。除了(1)中,我如果说不要枯燥,要乐观开朗有耐心啥的,这不是废话吗?那我就说点有用的:想想你的马内(money)够不够;如果导致大的问题出现,就开始投简历吧。 不开玩笑了,首先要是如果页面不常变动,那就使用python(其它编程语言也可以)写一个ui自动化脚本来进行测试;接口不常变动的就写一个接口自动化脚本进行测试,不想写代码就使用jmeter和postman的自动化进行接口自动化测试。如果自己都不会写自动化代码或者不想写,那就想想你的马内(money)够不够。
- 如何提高测试效率?
小公司不太会在意这个,如果有测试流程就根据测试流程,如果没有就随机应变跟着开发的节奏正常测试即可;如果需要提升测试效率,首先是要符合正规的测试流程,再者就是需要会编写自动化脚本进行覆盖测试用例,定时执行脚本。 - 还有就是工作中的经验这个不是开看文章就行的,需要自己去实际获得工作经验。
3.1.2 测试计划
- 如何编写测试计划?
测试计划主要包含:
测试目标:明确测试的总体目标和具体目标,例如验证系统的功能完整性、性能稳定性等。
测试范围:确定测试活动的范围,包括测试的对象、内容、时间和地点等。测试对象可以是整个系统、某一子系统或功能模块;测试内容包括功能测试、性能测试等。
测试方法:详细说明测试技术和具体方法。
测试资源:测试所需的资源,例如人力、设备、工具等。
测试进度:详细规划测试活动的时间安排、里程碑计划、进度跟踪和报告等。
风险评估:识别、分析和应对测试过程中可能遇到的风险,如测试环境不稳定、测试数据不足等,并制定相应的应对措施。
3.1.3 测试报告
- 如何编写测试报告?
测试报告主要包含:
测试概述:简要概述测试的目标、范围和时间,给读者一个整体的认识。
测试范围与功能描述:说明本次测试覆盖了哪些功能、模块和业务流程,明确测试的边界。
测试方法和策略:解释测试过程中使用的测试方法(如手动测试、自动化测试、性能测试等)和具体策略。
测试执行情况:展示测试的实际执行情况,包括通过和失败的用例数量、通过率、失败率等。
缺陷分析:汇总测试中发现的缺陷,分析缺陷的严重程度、状态和影响。
风险分析与建议:评估测试中发现的潜在风险,指出产品上线后的潜在问题,并给出上线或推迟上线的建议。
性能测试结果(如果涉及):展示性能测试的结果,评估系统在高负载情况下的表现。
附录:包括测试计划、测试用例、参考文献以及术语表等附加资料。
整理好的模板:谷歌网盘点我下载(๑•̀ᴗ-) ✧
3.2 python,ui自动化测试
- 不需要学的太精通会处理报错和会看懂代码即可
python教程:https://www.runoob.com/python/python-basic-syntax.html
UI自动化教程点我(◍•ᴗ•◍)✧
没了,等你先学会上面的,我估计就写出来了。
Windows软件聚合搜索:https://www.sunweisu.xyz/rjjhss/
macos软件搜索:
https://digit77.com/
https://www.minorpatch.com/
https://appstorrent.ru/