首页 / 资讯中心 / 文章详情

大专零基础学TE测试开发:从手工测试到自动化测试的完整路线图

大专零基础学TE测试开发:从手工测试到自动化测试的完整路线图 ★ FEATURED ARTICLE
1. 从零到一一个非科班生的测试开发突围路线图先说说我自己的情况。大专学历学的专业跟计算机八竿子打不着毕业之后在工厂流水线上待过半年后来觉得这样下去不是办法咬着牙报了培训班学了点软件测试的基础。那时候连Linux是什么都不知道更别提写代码了。但就是这么一个起点我花了大概一年半的时间硬是把自己从一个纯手工测试点点点的角色转成了能独立负责TE测试开发工作的工程师。现在回头看看这条路虽然绕了不少弯但确实走得通而且有章可循。这篇文章想聊的就是“大专零基础学TE测试开发”这件事。TE也就是Test Engineering测试工程在不少公司里跟测试开发Test Development的岗位职责高度重叠核心就是用工程化的手段去解决测试效率和质量问题。说白了你不再是那个拿着鼠标一遍遍点界面的执行者而是那个写工具、搭框架、做平台的人。适合谁来参考如果你是大专学历、非科班出身、正在做手工测试想往上走一步或者你刚入行对测试开发完全没概念那这篇内容就是写给你的。我会把整个学习路径、技术选型、实操步骤、踩过的坑全部摊开来讲尽量让你看完就能照着做。2. 为什么零基础要选TE测试开发这条赛道2.1 手工测试的天花板比你想的要低我刚入行那会儿做的是功能测试每天的工作就是对着需求文档写用例、执行用例、提Bug、跟开发扯皮。刚开始还觉得挺充实毕竟能接触到完整的项目流程。但做了大半年之后我发现自己的技能增长几乎停滞了。新来的应届生培训两周就能干我手里的活工资还比我低老板凭什么给我涨薪更现实的是招聘网站上稍微好一点的测试岗位JD里都写着“熟悉至少一门编程语言”、“有自动化测试经验”、“了解持续集成”。纯手工测试的岗位越来越少薪资也一直被压在低位。这不是贩卖焦虑是我自己经历过的真实困境。当时我们组一共八个测试只有两个会写代码那两个人一个负责自动化框架维护一个负责性能测试平台年终奖比我们高出一大截跳槽的时候选择也多得多。从那个时候起我就明白了手工测试是起点但不能是终点。2.2 TE测试开发到底在做什么很多人一听“测试开发”就觉得是要写很多代码跟开发工程师一样。其实不是。TE测试开发的核心是用工程化手段解决测试过程中的效率和质量问题。具体来说可能包括这么几类工作写自动化测试脚本把重复的回归测试交给机器跑搭建和维护测试框架让团队里其他人也能写自动化用例开发测试工具比如造数据工具、接口Mock工具、日志分析工具接入持续集成流水线让代码提交后自动触发测试做质量度量平台把Bug率、覆盖率、失败率这些数据可视化你看这些事情里确实要写代码但代码的复杂度和业务开发比起来要低不少更多是“胶水代码”和工具脚本。对于零基础的人来说这个门槛是可以通过系统学习跨过去的。2.3 为什么零基础反而适合从TE切入有人可能会问零基础直接学开发不行吗行但难度大很多。业务开发要求你对数据结构、算法、设计模式、数据库、网络协议都有比较深的理解学习周期长而且面试的时候竞争激烈大专学历很容易被卡简历。TE测试开发对代码深度的要求相对低一些但对测试思维、工程效率的理解要求高这恰恰是手工测试转过来的人有优势的地方。你懂测试流程知道哪里痛再去学技术解决这个痛方向感会强很多。另外TE测试开发的岗位需求量大。不管是大厂还是中小公司只要有一定规模的研发团队就需要有人来保证测试效率。而且这个岗位的薪资天花板并不低做到高级测试开发或者测试架构师收入跟同级别的开发差不了太多。3. 零基础学习路径的四个阶段拆解3.1 第一阶段补计算机基础别急着写代码我见过太多人一上来就去学Python语法结果学到函数和类就卡住了因为脑子里没有计算机的基本概念。零基础的第一步应该是补基础但不用学得太深。具体来说需要搞明白这几件事操作系统基础进程和线程的区别、内存管理的基本概念、文件系统是怎么回事。不用去看操作系统教材找几篇通俗的博客看看就行。网络基础HTTP协议怎么工作的、请求和响应长什么样、状态码的含义、TCP三次握手大概是怎么回事。这些在测试接口的时候天天用。数据库基础会写基本的增删改查SQL知道索引是什么、事务是什么。测试造数据和校验数据都离不开数据库。Linux基础会常用的命令比如cd、ls、grep、tail、ps、kill能在Linux上部署简单的服务。大部分测试环境都是Linux。这个阶段大概花两到三周每天两小时左右。不用追求精通有个概念就行后面用到的时候再深入。3.2 第二阶段选一门语言学到能写脚本的程度语言选择上我强烈建议Python。原因很简单语法简洁上手快测试领域的生态好。unittest、pytest、requests、selenium这些测试常用的库都是Python的。Java也可以但学习曲线陡一些对于零基础来说容易劝退。Python的学习重点不是把语言特性全学完而是学到能写一个完整的脚本。具体需要掌握变量、数据类型、条件判断、循环函数定义和调用列表、字典、字符串的常用操作文件读写异常处理类的基本概念能看懂就行不要求写复杂的继承模块和包的导入学完这些大概需要四到六周。学习方式我建议是边学边练不要光看视频。每学一个知识点就自己写几行代码验证一下。比如学了文件读写就写个脚本把某个目录下的文件名全部列出来写到另一个文件里。3.3 第三阶段掌握测试开发的核心工具链这个阶段是重点也是TE测试开发和普通手工测试的分水岭。需要掌握的工具和框架包括接口测试requests库 pytest。这是最核心的技能因为现在大部分系统都是前后端分离的接口测试的投入产出比最高。UI自动化selenium或者playwright。UI自动化维护成本高但有些场景绕不开至少要会基本的元素定位和操作。测试框架pytest是主流要会写测试用例、用fixture管理前置后置、用参数化跑多组数据、生成测试报告。持续集成Jenkins或者GitLab CI。要会把自动化用例接入流水线实现定时触发或者代码提交触发。版本控制Git的基本操作clone、add、commit、push、pull、branch。这个阶段需要大量的练习。我的做法是找一个开源的Web项目比如某个电商网站或者博客系统自己写接口测试用例然后接入Jenkins每天定时跑。遇到问题就查文档、搜解决方案这个过程本身就是最好的学习。3.4 第四阶段做一个完整的项目形成闭环学完工具之后一定要做一个完整的项目把学到的东西串起来。这个项目不需要多复杂但要有完整的流程。我当时做的是一个“接口自动化测试平台”的简化版功能包括从Excel或者YAML文件读取测试用例根据用例信息发送HTTP请求校验响应结果把测试结果写入数据库生成HTML测试报告通过Jenkins定时触发这个项目做完之后我对测试开发的理解完全不一样了。面试的时候也有东西可以讲不是只会背概念。4. 核心技能点的深度解析与实操要点4.1 接口测试零基础必须啃下的第一块硬骨头接口测试是TE测试开发最核心的技能没有之一。为什么这么说因为接口测试稳定、执行快、维护成本低是自动化测试里投入产出比最高的。而且接口测试的代码结构相对简单适合零基础入门。先说说接口测试的基本原理。一个HTTP接口本质上就是客户端发送一个请求服务端返回一个响应。请求里包含URL、方法GET、POST等、请求头、请求体响应里包含状态码、响应头、响应体。接口测试要做的就是构造各种请求然后校验响应是否符合预期。用Python的requests库发一个请求代码大概长这样import requests url https://api.example.com/login payload {username: test, password: 123456} headers {Content-Type: application/json} response requests.post(url, jsonpayload, headersheaders) print(response.status_code) print(response.json())看起来很简单对吧但实际工作中要考虑的事情多得多。比如参数化同一个接口要用不同的参数组合去测不可能每个用例写一遍代码。pytest的pytest.mark.parametrize就是干这个的。依赖处理很多接口需要先登录拿到token后面的接口才能调用。这就需要把登录封装成fixture让所有用例共享。断言不能只看状态码是不是200还要校验响应体里的关键字段。有时候还要校验数据库里的数据有没有变化。环境切换测试环境、预发环境、生产环境的域名不一样配置要能灵活切换。我踩过的一个坑是一开始把所有用例写在一个文件里几百行代码改一个地方要翻半天。后来学会了用pytest的目录结构来组织用例按模块分文件公共方法抽到conftest.py里维护起来轻松多了。注意接口测试的用例设计要覆盖正常场景、异常场景和边界场景。比如登录接口除了正确的用户名密码还要测密码错误、用户名不存在、参数为空、参数类型错误等情况。4.2 pytest框架让你的测试代码从脚本变成工程很多人写自动化测试写出来就是一堆脚本没有结构没有报告跑完就完了。pytest能帮你把脚本变成工程。它的核心功能包括自动发现用例只要文件名以test_开头函数名以test_开头pytest就能自动找到并执行。fixture机制用来管理测试的前置和后置操作比如数据库连接、登录token、临时文件等。fixture可以设置作用域是每个用例执行一次还是每个模块执行一次还是整个会话执行一次。参数化一组代码跑多组数据减少重复代码。插件生态pytest-html生成HTML报告pytest-xdist并行执行pytest-rerunfailures失败重试allure-pytest生成漂亮的Allure报告。一个典型的pytest项目结构大概是这样project/ ├── conftest.py # 全局fixture ├── pytest.ini # 配置文件 ├── testcases/ │ ├── conftest.py # 模块级fixture │ ├── test_login.py │ └── test_order.py ├── utils/ │ ├── request_util.py # 请求封装 │ └── assert_util.py # 断言封装 └── data/ └── test_data.yaml # 测试数据这个结构看起来简单但能解决大部分接口自动化测试的需求。conftest.py里可以定义登录的fixture返回token所有用例都能用。utils里封装请求方法统一处理日志、异常、重试。data目录放测试数据实现数据驱动。4.3 持续集成让自动化测试真正产生价值自动化测试如果只是在自己电脑上跑价值有限。只有接入持续集成让它在每次代码提交后自动执行才能及时发现问题。Jenkins是用的最多的工具虽然界面老旧但功能强大插件丰富。接入Jenkins的基本步骤在Jenkins上创建一个自由风格的任务配置Git仓库地址让Jenkins能拉取代码配置构建触发器比如定时触发或者Webhook触发在构建步骤里执行pytest命令配置构建后操作比如发送邮件通知、展示测试报告这里有个细节要注意Jenkins服务器上的Python环境可能和你本地不一样依赖包要提前装好。我建议用requirements.txt管理依赖在构建步骤里先执行pip install -r requirements.txt。还有一个坑是测试报告的问题。pytest默认的输出在控制台Jenkins上看不方便。用pytest-html生成HTML报告然后在Jenkins里配置HTML报告展示看起来就直观多了。如果追求更好的效果可以用Allure但配置稍微复杂一些。4.4 AI辅助测试开发新趋势下的效率提升最近“AI测试开发”这个词越来越热我实际用下来AI在测试开发里确实能帮上不少忙但也没到取代人的程度。目前比较实用的场景有这几个生成测试用例把接口文档或者需求描述丢给AI让它生成测试用例的草稿人工再补充和调整。能省不少时间。写代码片段比如要写一个读取YAML文件的函数或者要写一个正则表达式直接问AI比查文档快。分析失败原因测试用例失败了把日志和错误信息贴给AI让它帮忙分析可能的原因有时候能给出意想不到的思路。代码审查把自己写的测试代码给AI看看让它提改进建议比如哪里可以优化、哪里可能有遗漏。但要注意AI生成的内容不能直接信。我遇到过AI生成的代码里用了不存在的库或者逻辑有漏洞的情况。所以AI是辅助核心的判断和验证还得靠自己。5. 完整实操流程从零搭建一个接口自动化测试项目5.1 环境准备与项目初始化先列一下需要安装的东西工具用途安装方式Python 3.8运行环境官网下载安装包PyCharm Community代码编辑器官网下载Git版本控制官网下载Jenkins持续集成Docker或war包MySQL数据库Docker或安装包安装完Python之后配置pip源为国内镜像下载包会快很多。然后创建一个虚拟环境避免不同项目的依赖冲突python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows在虚拟环境里安装依赖pip install requests pytest pytest-html pyyaml pymysql5.2 封装请求工具类直接在每个用例里调requests不是不行但不利于维护。更好的做法是封装一个请求工具类统一处理日志、异常、超时、重试等逻辑。import requests import logging class RequestUtil: def __init__(self, base_url): self.base_url base_url self.session requests.Session() self.logger logging.getLogger(__name__) def send(self, method, path, **kwargs): url self.base_url path self.logger.info(f请求: {method} {url}, 参数: {kwargs}) try: resp self.session.request(method, url, timeout10, **kwargs) self.logger.info(f响应: {resp.status_code}, {resp.text[:200]}) return resp except requests.RequestException as e: self.logger.error(f请求异常: {e}) raise这个类里做了几件事用Session保持会话自动带上cookie统一设置超时时间记录请求和响应的日志捕获异常并记录。这些在排查问题的时候非常有用。5.3 用fixture管理登录态大部分接口都需要登录后才能访问所以登录的token要在多个用例之间共享。用pytest的session级别fixture来实现import pytest from utils.request_util import RequestUtil pytest.fixture(scopesession) def token(): req RequestUtil(https://api.example.com) resp req.send(POST, /login, json{username: test, password: 123456}) return resp.json()[data][token] pytest.fixture(scopesession) def client(token): req RequestUtil(https://api.example.com) req.session.headers.update({Authorization: fBearer {token}}) return req这样写的好处是整个测试会话只登录一次所有用例共享同一个token执行效率高。如果token过期了fixture也可以加上自动刷新的逻辑。5.4 编写测试用例测试用例要覆盖正常场景和异常场景。以登录接口为例import pytest class TestLogin: def test_login_success(self, client): resp client.send(POST, /login, json{username: test, password: 123456}) assert resp.status_code 200 assert resp.json()[code] 0 assert token in resp.json()[data] pytest.mark.parametrize(username,password,expected_code, [ (test, wrong, 1001), (not_exist, 123456, 1002), (, 123456, 1003), (test, , 1003), ]) def test_login_fail(self, client, username, password, expected_code): resp client.send(POST, /login, json{username: username, password: password}) assert resp.json()[code] expected_code参数化让异常场景的用例写起来很简洁加一组数据就是加一行维护成本低。5.5 生成测试报告并接入Jenkins执行测试并生成HTML报告pytest testcases/ --htmlreport.html --self-contained-html在Jenkins里创建一个任务构建步骤里执行上面的命令构建后操作里配置HTML报告展示。再设置一个定时触发器比如每天凌晨跑一次或者配置GitLab Webhook代码提交后自动触发。6. 常见问题与排查技巧实录6.1 接口测试常见问题速查表问题现象可能原因排查思路请求返回401token过期或未携带检查请求头里有没有Authorization字段token是否有效请求返回404URL路径错误对比接口文档检查base_url和path拼接是否正确请求返回500服务端异常查看服务端日志确认是不是参数格式不对导致响应中文乱码编码问题检查响应头的Content-Type用resp.content.decode(utf-8)用例执行顺序不对用例间有依赖用fixture管理依赖不要依赖用例的执行顺序Jenkins上跑失败本地成功环境差异检查Jenkins上的Python版本、依赖包版本、环境变量6.2 我踩过的几个坑坑一用例之间互相影响。一开始我没注意用例的独立性A用例创建了一条数据B用例去查这条数据结果单独跑B用例就失败了。后来我强制自己每个用例都要能独立运行需要的数据在fixture里自己造用完自己清理。坑二硬编码环境地址。测试环境和预发环境的域名不一样代码里写死了测试环境的地址换环境就要改代码。后来我把环境配置抽到配置文件里通过环境变量或者命令行参数来指定切换环境只需要改一个配置。坑三断言写得太死。比如断言响应时间小于200毫秒结果网络波动一下就失败了。后来我改成断言响应时间小于1秒或者干脆不断言时间只断言业务逻辑。断言要关注核心逻辑不要在不重要的地方设卡。坑四不写日志。用例失败的时候如果没有日志根本不知道是请求参数错了还是响应不符合预期。后来我在请求工具类里加了详细的日志每次请求和响应都记录下来排查问题快了很多。6.3 学习过程中的心态问题零基础学习最大的障碍不是技术难度而是心态。我见过很多人学了两个月觉得太难就放弃了。我的经验是不要追求完美第一遍学的时候能跑通就行不要纠结底层原理。后面用多了自然就懂了。不要只看不练看视频觉得都会一写代码就懵。必须动手哪怕照着抄一遍也比光看强。不要孤军奋战加一些测试开发的交流群遇到问题问问别人有时候别人一句话能省你半天时间。接受自己的进度别人可能三个月就学会了你需要六个月没关系。只要每天都在进步就比昨天的自己强。7. 关于学历和面试的一些实话大专学历在测试开发这个方向确实会遇到一些门槛。有些公司的HR筛简历的时候会直接卡学历这是现实。但也不是完全没有机会关键是要让面试官看到你的实际能力。我的做法是把做过的项目整理成文档放在GitHub上简历里附上链接。面试的时候面试官问什么技术点我就结合项目里的实际场景来讲不是背概念。比如问pytest的fixture我就讲我项目里怎么用fixture管理登录态的遇到了什么问题怎么解决的。这样面试官能感受到你是真的做过不是纸上谈兵。另外中小公司对学历的要求相对宽松更看重你能不能干活。可以先在中小公司积累一两年经验把项目做扎实再往大厂跳。这条路我走过虽然慢一点但走得通。最后分享一个我自己的小习惯我会把工作中遇到的每一个问题、每一个解决方案都记录在一个Markdown文件里按主题分类。时间长了这个文件就成了我自己的知识库。面试前翻一翻工作中遇到类似问题查一查非常实用。你也可以试试从今天开始记录。
阅读完成 · 觉得有帮助?
咨询建站