从功能测试到自动化测试:我的转型之路

前言

大家好,我是测试成长笔记的作者。从事软件测试工作已经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 webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class 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()

核心知识点

  1. 元素定位(ID、XPath、CSS Selector)
  2. 常用操作(点击、输入、悬停、滚动)
  3. 等待机制(显式等待、隐式等待)
  4. 弹窗处理、iframe切换
  5. 页面截图、日志记录

第二阶段:接口自动化测试(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 requests
import json

class 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 webdriver
from appium.webdriver.common.appiumby import AppiumBy

class 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_source

# ✅ 正确示例
result = api.get_order(order_id)
assert result['status'] == 'success'
assert result['data']['amount'] == 100

转型建议

  1. 夯实基础:功能测试经验是自动化测试的前提,不要急于求成
  2. 选择一门语言:推荐Python,简单易学,生态丰富
  3. 动手实践:看10篇文章不如写一个Demo
  4. 参与项目:主动承担自动化工作,在实战中成长
  5. 持续学习:关注行业动态,学习新技术

资源推荐

书籍

  • 《Selenium3自动化测试实战》
  • 《Python自动化测试实战》
  • 《Web接口开发与自动化测试》

网站

  • 博客园、CSDN(搜索Selenium、Appium)
  • GitHub(搜索awesome-testing)
  • TesterHome社区

工具

  • PyCharm/VS Code(IDE)
  • Git(版本控制)
  • Jenkins/Docker(CI/CD)

结语

从功能测试到自动化测试,不仅仅是技术栈的扩展,更是思维方式的转变。我开始用”如何让测试更高效”的视角去看待工作,开始理解测试金字塔的价值,开始思考如何构建可持续的测试体系。

这条路上会有很多挑战,但只要保持学习的心态,一步一个脚印,你也可以成为自动化测试专家。


💬 留言讨论
你在转型过程中遇到了哪些困难?有哪些心得体会?欢迎在评论区分享!