前言 大家好,我是测试成长笔记的作者。从事软件测试工作已经5年了,从最初的功能测试做起,到现在专注于自动化测试和测试架构设计,这条路走得并不轻松,但每一步都很充实。
今天想和大家分享我的转型经历,希望对正在考虑或正在进行自动化测试转型的小伙伴们有所帮助。
我的测试之路 起点:功能测试的日常工作 刚入行时,我的日常工作主要是:
执行功能测试用例
记录并提交Bug
编写测试报告
参与需求评审和用例评审
那时候觉得测试工作就是”点点点”,重复性很高,但价值感不强。每天都在想:难道我要这样工作一辈子吗?
觉醒:第一次接触自动化 转折点发生在入职的第二年。公司接了一个大项目,手工回归测试需要2周时间,而且每次发布都提心吊胆,怕漏测重要功能。
这时项目经理问了一个让我思考很久的问题:“有没有办法让测试更高效?”
我开始主动学习Python和Selenium,从最基础的录制回放开始,一步步搭建起简单的自动化脚本。第一次看到自动化脚本自动打开浏览器、输入用户名密码、点击登录按钮时,那种感觉就像发现了新大陆!
学习路径分享 第一阶段:Selenium Web自动化(3-6个月) 学习资源 :
《Selenium3自动化测试实战》- 虫师
Selenium官方文档
CSDN、博客园的技术博客
入门项目 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECclass LoginPage : def __init__ (self, driver ): self .driver = driver def open (self, url ): self .driver.get(url) def input_username (self, username ): element = self .driver.find_element(By.ID, "username" ) element.clear() element.send_keys(username) def input_password (self, password ): element = self .driver.find_element(By.ID, "password" ) element.clear() element.send_keys(password) def click_login (self ): self .driver.find_element(By.ID, "login-btn" ).click() def login (self, username, password ): self .input_username(username) self .input_password(password) self .click_login()
核心知识点 :
元素定位(ID、XPath、CSS Selector)
常用操作(点击、输入、悬停、滚动)
等待机制(显式等待、隐式等待)
弹窗处理、iframe切换
页面截图、日志记录
第二阶段:接口自动化测试(2-3个月) 工具选择 :
Postman(适合入门)
JMeter(适合性能+接口)
Python + Requests(适合定制化)
接口测试实战 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import requestsimport jsonclass ApiClient : def __init__ (self, base_url ): self .base_url = base_url self .session = requests.Session() def login (self, username, password ): url = f"{self.base_url} /api/login" payload = { "username" : username, "password" : password } response = self .session.post(url, json=payload) return response.json() def get_user_info (self, user_id ): url = f"{self.base_url} /api/users/{user_id} " headers = {"Authorization" : f"Bearer {self.token} " } response = self .session.get(url, headers=headers) return response.json() def create_order (self, order_data ): url = f"{self.base_url} /api/orders" headers = {"Authorization" : f"Bearer {self.token} " } response = self .session.post(url, json=order_data, headers=headers) return response.json()
第三阶段:App自动化测试(2-3个月) 工具选择 :
Appium(跨平台首选)
Airtest(适合游戏测试)
Appium实战 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from appium import webdriverfrom appium.webdriver.common.appiumby import AppiumByclass AndroidDemo : def __init__ (self ): desired_caps = { 'platformName' : 'Android' , 'deviceName' : 'emulator-5554' , 'appPackage' : 'com.example.app' , 'appActivity' : '.MainActivity' , 'automationName' : 'UiAutomator2' } self .driver = webdriver.Remote('http://localhost:4723/wd/hub' , desired_caps) def find_element_by_text (self, text ): return self .driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, f'new UiSelector().text("{text} ")' ) def close (self ): self .driver.quit()
踩过的坑与经验总结 坑1:过度追求覆盖 刚开始做自动化时,总想着把所有功能都自动化,结果:
维护成本爆炸
很多场景自动化价值很低
脚本稳定性差
经验 :优先自动化核心业务流程 和高频率回归 的场景。
坑2:忽视环境差异 本地跑得好好的脚本,到CI环境就各种失败:
经验 :使用Docker容器化测试环境,确保环境一致性。
坑3:断言不够严谨 只验证了页面显示正确,没有验证数据正确性:
1 2 3 4 5 6 7 assert "提交成功" in driver.page_sourceresult = api.get_order(order_id) assert result['status' ] == 'success' assert result['data' ]['amount' ] == 100
转型建议
夯实基础 :功能测试经验是自动化测试的前提,不要急于求成
选择一门语言 :推荐Python,简单易学,生态丰富
动手实践 :看10篇文章不如写一个Demo
参与项目 :主动承担自动化工作,在实战中成长
持续学习 :关注行业动态,学习新技术
资源推荐 书籍
《Selenium3自动化测试实战》
《Python自动化测试实战》
《Web接口开发与自动化测试》
网站
博客园、CSDN(搜索Selenium、Appium)
GitHub(搜索awesome-testing)
TesterHome社区
工具
PyCharm/VS Code(IDE)
Git(版本控制)
Jenkins/Docker(CI/CD)
结语 从功能测试到自动化测试,不仅仅是技术栈的扩展,更是思维方式的转变。我开始用”如何让测试更高效”的视角去看待工作,开始理解测试金字塔的价值,开始思考如何构建可持续的测试体系。
这条路上会有很多挑战,但只要保持学习的心态,一步一个脚印,你也可以成为自动化测试专家。
💬 留言讨论 : 你在转型过程中遇到了哪些困难?有哪些心得体会?欢迎在评论区分享!