“软件测试很卷”、“大家不要再卷软件测试了”,经常听到同学这样抱怨。但同时,软件测试的高薪也在吸引越来越多的同学。不少同学开始疑惑:既然软件测试这么卷,还值得我入行吗?
首先先给你吃一颗定心丸:现在选择软件测试依然有前途!理由我们往下慢慢看。
软件测试卷是客观事实
但也带来好的一面
首先可以肯定的是,市场上终归是需要软件测试人才的,但是总会有人来问,软件测试前景怎么样?是因为看了太多人说自己学完了,培训完了,没有找到工作;甚至有人不断贩卖焦虑,软件测试早就没前途了,学软件测试就是浪费时间。于是就得出结论,软件测试不行了,学了也找不到工作。
软件测试现在确实卷,但卷不一定是坏事情,要客观去看待卷的原因。
先说说这10年软件测试的发展历程。
十年前,软件测试一点都不卷,因为那个时候,企业对软件测试的要求非常简单,这个时期,软件测试一点也不卷,找个培训班学几个月出来,就能拿到接近万元的薪资水平。
随着时间的发展,十年后的今天,2023年,软件测试已然变得比较卷,是因为企业对于软件测试的从业者要求变高了,不止需要会功能测试还需要会自动化测试。
因为软件测试技术的发展太快了,市面上出现了大量的脚手架框架,什么增删改查,一键生成,根本不需要来写基础的代码了。
所以,作为一个软件测试需要学的东西就越来越多了。这就造成软件测试的压力非常大,能学的东西变得非常多,这是好事还是坏事呢?这需要辩证地来看这个问题。
“坏事”就不展开了,要学的东西这么多,以前用5个月的时间学软件测试,只用学点点点就OK了,而现在还是5个月的时间,还需要学习自动化测试,要多学好多东西,压力好大,感觉好卷。
好事呢?就是软件测试现在要学的东西太多了,很多人坚持不下来,要学习各种项目经验,各种业务,各种解决方案,还有各种框架的底层原理源码,面试问的问题又好多。导致软件测试要学习的内容太多了,从而造成市场上不同的技术水平的人,分成了三六九等,薪资拉开的差距也非常大,也就意味着,初级和高级软件测试工程师的薪资水平差异巨大。
一个刚入行的测试人可能年薪10w,而一个资深的测试人,可能年薪百万,他们之间差了10倍,可能都不止。
正因为软件测试的东西多,有那么多内容需要学,如果你选择了,努力奋斗,可以走得很远很远。所以,虽然软件测试很卷,但是卷得很有价值。
作为一个普通人,只需要通过自己努力就能得到的,不已经是最简单公平的事情了么?
如果换成其他的工种和行业,连东西都不需要怎么学的那种,才会感觉可怕——第1年入行月薪1万块,第10年月薪1万5,一眼望到底。
大家都看到了软件测试薪资高,发展稳妥,招聘量最大,所以从业者也是最多的,因此入行软件测试的人越来越多,更多人来转软件测试,从而竞争激烈。这恰恰说明选择软件测试的价值。
如果你是一个持续热爱学习,想选择一个奋斗的人生,那可以选择软件测试,软件测试能给你带来丰厚的回报,而作为个人也有机会在软件测试的路上走得很远。
【自动化测试学习路线】
一、Python编程语言
1. 基本数据类型和运算符:包括整型、浮点型、布尔型、字符串等数据类型,以及加减乘除、赋值等运算符。
2. 控制结构:包括if、while、for等控制结构,用于实现条件判断、循环等逻辑。
3. 函数和模块:函数是一段可以重复使用的代码块,模块是由多个函数组成的文件。Python内置了很多模块, 也支持自定义模块。
4. 面向对象编程:Python支持面向对象编程,包括类、对象、继承、多态等概念。
5. 异常处理:Python支持try...except...finally语句进行异常处理,可以让程序在运行过程中遇到错误时做出相应的反应。
6. 文件操作:Python可以读写文本文件和二进制文件,还可以通过pickle模块实现序列化和反序列化。
7. 标准库和第三方库:Python内置了大量的标准库,如re、os、sys等,也可以通过pip安装第三方库,如numpy、pandas、matplotlib等。
8. GUI编程:Python可以使用Tkinter、PyQt、wxPython等库进行图形界面开发。
二、WEB自动化测试
1. 浏览器操作:自动打开、关闭浏览器,设置浏览器窗口大小等
2. 元素定位:通过不同的方式(如ID、name、class name、CSS selector等)定位网页上的元素,比如文本框、按钮等
3. 操作元素:对定位到的元素进行各种操作,比如输入文本、点击按钮、选择下拉框等
4. 等待:等待页面加载完成或者等待某个元素出现等
5. 断言:验证测试结果是否符合预期,比如判断某个元素是否存在、某个文本是否显示等
6. 数据驱动:自动化测试中使用数据驱动技术,自动化脚本可以从外部文件或者数据库中获取测试数据,减少手动测试工作量。
7. 框架搭建:一些常用的自动化测试框架,例如Selenium,TestNG,Junit,Robotframework等。
三、APP自动化测试
1. UI界面测试:验证APP的用户界面是否正常显示及交互功能是否正常。
2. 功能测试:验证APP各个功能是否按照设计要求正常工作,包括数据的输入、输出、处理和存储等方面的测试。
3. 性能测试:测试APP的响应时间、内存占用、CPU占用率等性能指标,并通过测试结果来评估APP的质量。
4. 兼容性测试:验证APP在不同的操作系统平台、移动设备、浏览器等环境下的兼容性问题。
5. 安全测试:对APP进行安全漏洞扫描,测试APP的安全性,包括数据传输安全、认证授权、防止攻击等方面的测试。
6. 国际化和本地化测试:测试APP在不同语言、地区的环境下是否能够正确显示和处理数据。
7. API接口测试:测试APP与后端服务器之间的API接口是否正常工作并返回正确的数据。
四、接口自动化测试
1. 接口测试用例设计:根据接口文档和需求,设计测试用例,包括正常情况下的参数输入、输出验证,异常情况下的处理等。
2. 接口自动化测试脚本编写:使用自动化测试工具或编程语言编写接口测试脚本,实现对接口请求和响应的自动化测试。
3. 接口测试数据准备:根据测试用例设计和脚本编写需要使用的数据,准备测试数据。数据可以是模拟的,也可以是从其他系统中抽取的真实数据。
4. 接口测试环境搭建:为了进行接口自动化测试,需要先搭建测试环境,包括测试数据库、测试服务器、测试工具等。
5. 接口测试执行与结果分析:执行接口自动化测试脚本,并分析测试结果,查找错误和缺陷并进行修复。
五、DevOps持续集成
1. 版本控制:使用版本控制工具(如Git)管理代码库。开发人员可以将代码提交到共享的代码库,同时可以对代码进行跟踪、合并和回滚等操作。
2. 自动化构建:使用自动化构建工具(如Maven、Gradle等)自动编译、打包和部署应用程序。在每次提交代码之后,自动化构建系统会触发构建过程,生成可执行的软件包或者镜像,并将其上传到指定的仓库中。
3. 自动化测试:使用自动化测试工具(如JUnit、Selenium等)执行各种类型的测试,包括单元测试、集成测试和端到端测试等。自动化测试能够验证应用程序的正确性,减少手动测试的工作量,提高测试效率和质量。
4. 持续集成:将上述步骤整合起来,形成一个完整的持续集成流程。每次提交代码之后,自动触发构建、测试和部署等过程,并及时反馈测试结果和构建状态。
5. 集成测试环境:为了保证集成测试的稳定性和一致性,在持续集成流程中需要搭建一个独立的集成测试环境。该环境应该与生产环境一致,包括硬件、操作系统、数据库和网络等方面的配置。
6. 持续交付/持续部署:在持续集成的基础上,进一步实现自动化的部署和发布。持续交付指每次构建后生成可执行的软件包或镜像,并将其部署到预生产环境中进行测试;持续部署则是将软件包或镜像直接部署到生产环境中,无需手动干预。这两种方式都可以显著提高应用程序的交付效率和质量。
六、Kubernetes(K8S)云原生技术测试技能
1. K8S基础知识:了解K8S的基本概念、架构和组件,以及如何在不同的云平台上使用K8S。
2. 容器化应用测试:了解如何将应用程序容器化,并在K8S上进行部署和测试。包括Docker镜像构建、应用程序打包、容器编排等。
3. K8S集群测试:测试K8S集群的可伸缩性、高可用性和负载均衡等性能指标。可以使用自动化测试工具来模拟大规模的请求流量,同时监测系统的稳定性和性能。
4. 多云环境测试:测试K8S在多个云平台间的移植性和兼容性。需要测试不同云平台上的K8S版本、节点配置、网络设置等差异对运行效果的影响。
5. K8S安全测试:测试K8S集群的安全性,包括节点和容器的权限管理、API访问控制、网络隔离等方面。通过安全测试可以发现并修复潜在的漏洞和风险。
6. 持续交付测试:测试K8S集群中持续集成、持续交付和自动部署的流程,以确保应用程序在K8S上能够快速且可靠地部署和交付。
7. K8S监控和日志测试:测试K8S集群中的监控和日志收集功能。通过实时监控和分析系统的运行状态和日志信息,可以及时发现并排除各种异常情况。
七、高级性能测试
1. 性能测试工具:对于不同的系统,可以选择合适的性能测试工具,如LoadRunner、JMeter等。
2. 负载模型:了解负载是如何生成的、哪些参数会影响负载、如何调整负载等。
3. 监测和分析:能够通过监测系统的性能指标来评估系统的性能瓶颈,并根据结果进行分析和优化。
4. 网络和协议:理解网络协议和相关技术,如TCP/IP、HTTP、HTTPS等。
5. 数据库:熟悉数据库相关知识,能够针对数据库进行性能测试并优化。
6. 代码分析:具备代码分析能力,能够找出代码中的性能问题,提供针对性的优化建议。
7. 自动化测试和持续集成:了解自动化测试和持续集成的基本原理和实现方式。
8. 项目管理:具有良好的项目管理能力,能够带领团队完成性能测试任务,并与其他部门进行有效沟通。
9. 社交技能:具备良好的沟通能力和团队合作能力,能够有效地与开发人员、产品经理和其他利益相关者合作。
八、测试开发平台
1. 测试管理工具:用于测试计划、测试用例、缺陷管理等。
2. 自动化测试工具:用于自动化测试脚本的录制、运行和管理。
3. 性能测试工具:用于模拟多种负载情况下系统的性能和稳定性。
4. 安全测试工具:用于检测应用程序、数据库、网络等方面的安全漏洞。
5. 数据库管理工具:用于创建、修改、备份、恢复数据库等操作。
6. 版本控制工具:用于管理代码、文档等版本控制。
7. 虚拟化技术:用于快速创建测试环境,提高测试效率。
8. 持续集成工具:用于实现持续集成、持续交付等流程,提高软件交付的质量和效率。
九、WEB安全测试
1. SQL注入检测:检查数据库查询语句是否存在漏洞,能否被利用以执行未授权的操作。
2. XSS攻击检测:检查是否存在跨站脚本攻击漏洞,判断是否能够向用户发送恶意代码。
3. CSRF攻击检测:检查是否存在跨站请求伪造漏洞,判断是否能够劫持用户会话并在后台执行操作。
4. 文件上传漏洞检测:检查是否存在文件上传功能,是否存在上传任意文件或上传可执行文件的漏洞。
5. 目录遍历漏洞检测:检查是否存在目录遍历漏洞,是否可以通过URL参数获取敏感文件。
6. 权限绕过漏洞检测:检查是否存在权限绕过漏洞,是否可以绕过访问控制策略来访问敏感数据。
7. 逻辑漏洞检测:检查是否存在逻辑漏洞,例如利用用户输入来执行不安全的操作。
8. 嵌入式组件漏洞检测:检查嵌入式组件是否存在安全漏洞,例如第三方插件、框架等。
9. 安全策略配置检测:检查Web应用程序的安全策略配置是否合理,例如是否启用SSL、是否开启HTTP Only Cookie等。
十、Linux操作系统
1. 内核:即Linux内核,负责管理计算机硬件、提供进程管理、内存管理、文件系统等基本功能。
2. Shell:即命令行解释器,可以通过命令行界面来与Linux系统交互。
3. 文件系统:类Unix文件系统是Linux系统的重要组成部分。Linux文件系统采用层次结构,以根目录(/)为起点,所有文件和目录都在此基础上建立。
4. 应用程序:包括各种常用工具和应用程序,如文本编辑器、图形化用户界面、数据库、网络服务等。
5. 其他库和驱动程序:例如开发库、第三方软件和驱动程序,可以扩展Linux的功能。
十一、Postman接口测试
1. 接口请求参数:定义请求的URL、方法、请求头、Cookie等信息。
2. 接口请求体:根据具体接口的要求,设置请求体中需要传递的参数和数据。
3. 断言:验证接口返回结果是否符合预期,如响应状态码、响应时间、返回值中的某个字段等。
4. 数据驱动:使用Postman中的数据驱动功能,进行批量测试。
5. 环境变量:通过环境变量管理不同环境的接口地址和参数,便于快速切换测试环境。
6. 自动化测试:结合Postman的Collection Runner或Newman命令行工具,实现接口自动化测试。
十二、Fiddler网络抓包
1. HTTP请求和响应头信息:HTTP请求(客户端向服务端发送)和响应(服务端返回给客户端)的头部信息,包括请求方法、请求地址、请求参数、响应状态码、响应头等。
2. 报文正文:请求或响应的具体内容,例如HTML、JSON、XML等格式的数据。
3. 时间戳:记录每个请求和响应的时间戳,以便于分析网络请求的时间消耗。
4. SSL证书信息:如果是HTTPS请求,则会显示相关的SSL证书信息。
5. Session信息:可以显示客户端与服务器之间所有请求和响应的Session信息。
6. 脚本:Fiddler支持使用JavaScript编写脚本,实现自定义抓包和修改请求的功能。
十三、JMeter接口自动化测试
1. 环境设置:配置测试环境,包括服务器地址、端口号、协议等。
2. 测试计划:定义测试用例的顺序和并发请求量,可以设置多个线程组,每个线程组可以包含多个请求。
3. 请求设置:配置HTTP请求参数,包括请求方法、请求头、请求体等信息。同时JMeter支持使用CSV文件等数据驱动方式进行批量测试。
4. 断言:验证接口返回结果是否符合预期,如响应状态码、响应时间、返回值中的某个字段等。
5. 监控器:监视测试过程和结果,包括聚合报告、图表和数据文件等。
6. 配置元件:包括线程组、定时器、前置处理器和后置处理器等,可以模拟真实场景下的用户行为。
7. 插件:JMeter有大量插件可供选择,例如JMeter Plugins Manager、JSON Path Extractor等,扩展了功能和性能。
8. 脚本:JMeter支持使用BeanShell或JSR223脚本编写复杂测试逻辑。
十四、MySQL数据实操
1. MySQL环境的搭建和配置:包括MySQL的安装、启动和关闭,以及MySQL的配置参数、日志等相关设置。
2. 数据库设计与建模:根据业务需求,进行数据库的设计与建模,包括表结构设计、字段定义、关系建立等。
3. 数据库的操作:包括数据的增删改查、数据的备份和恢复、数据的导入和导出等。
4. SQL语句的优化:针对大量数据的查询和操作,需要对SQL语句进行优化,如添加索引、使用合适的查询方式等。
5. 数据库的性能调优:通过优化MySQL的配置参数、硬件资源、SQL语句等来提高数据库的性能,减少响应时间和资源消耗。
6. 安全性管理:对数据库的访问权限、密码策略、审计日志等进行管理,保障数据库与数据的安全。
十五、RobotFramework与Airtest跨平台自动化测试框架的实战
1. 环境搭建:安装RobotFramework和Airtest以及相关依赖库,配置好环境变量。
2. UI自动化测试:使用Airtest实现UI自动化测试,包括点击、输入、滑动等操作,验证UI元素是否正确显示及相应功能是否正常。
3. API自动化测试:使用RobotFramework编写API自动化测试脚本,测试接口请求与响应是否符合预期。
4. 数据驱动测试:使用RobotFramework实现数据驱动测试,通过不同的测试数据对系统进行全面的测试。
5. 性能测试:使用RobotFramework和Airtest实现性能测试,模拟多用户同时访问系统,测试其在高并发情况下的稳定性和性能表现。
6. 安全测试:使用RobotFramework和Airtest实现安全测试,测试系统的漏洞和安全性能。
7. 报告生成:使用RobotFramework和Airtest生成测试报告,提供详细的测试结果和分析,帮助开发人员快速定位问题并及时修复。
8. 持续集成:将自动化测试集成到持续集成流程中,确保每次代码提交都可以进行快速有效的测试,避免出现重大的错误。
文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群自行领取即可,拿走不谢。