刚接手一个新项目,产品经理甩过来一句话:‘这个功能明天上线,记得测一下。’你心里一紧,这功能涉及五个页面跳转、三种用户角色、还得清缓存重登录——手动点一遍就得二十分钟。这时候你就知道,该写个测试脚本了。
为什么非得写脚本?
不是所有测试都值得写脚本。但如果你发现某个操作流程每周都要重复三四次,比如回归测试主流程,或者每次发版前都要验证登录、下单、支付这条链路,那手动点击就是在浪费时间。写个脚本能让你喝着咖啡等结果,而不是盯着页面点来点去。
选工具别纠结,先跑起来再说
新手常卡在第一步:用 Selenium 还是 Playwright?Python 还是 JavaScript?其实没那么重要。就像学做饭,先拿锅炒个蛋,别纠结厨具品牌。我建议新手从 Python + Selenium 入手,库成熟,中文资料多,报错百度一下基本都能解决。
装好环境后,写个最简单的脚本试试:
from selenium import webdriver
import time
# 启动浏览器
driver = webdriver.Chrome()
driver.get("https://example.com/login")
# 输入账号密码
driver.find_element_by_id("username").send_keys("testuser")
driver.find_element_by_id("password").send_keys("123456")
driver.find_element_by_id("login-btn").click()
# 等两秒看效果
time.sleep(2)
driver.quit()
这段代码干了啥?打开浏览器,进登录页,填用户名密码,点登录,两秒后自动关掉。虽然土,但它已经是个能用的测试脚本了。
让脚本更像“人”一点
直接用 find_element_by_id 有个问题:页面稍微一改,id 变了,脚本就报错。更好的做法是加等待机制,别急着找元素。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
try:
# 等待登录按钮出现,最多等10秒
login_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "login-btn"))
)
login_btn.click()
except:
print("登录按钮没找到或不可点击")
这样写,脚本不会因为网络慢加载卡住就直接崩掉,容错性高多了。
把重复操作打包成函数
如果你要测不同账号的登录情况,别复制粘贴三次代码。把登录逻辑封装成函数,调用时传参数就行:
def login_user(driver, username, password):
driver.find_element(By.ID, "username").send_keys(username)
driver.find_element(By.ID, "password").send_keys(password)
driver.find_element(By.ID, "login-btn").click()
# 验证是否登录成功
try:
WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CLASS_NAME, "welcome-tip"))
)
return True
except:
return False
之后你想测十个账号,写个循环就行,效率翻倍。
别忘了留“证据”
脚本跑完了,怎么证明它真执行了?加个截图功能:
if not login_user(driver, "baduser", "wrongpass"):
driver.save_screenshot("login_fail.png")
print("登录失败,截图已保存")
下次开会扯皮说“我没收到bug”,直接把图甩出去,谁也赖不掉。
小步快跑,别想一步到位
很多人想写个“全自动覆盖全站”的大脚本,结果写到一半就放弃了。现实做法是:今天写个登录脚本,明天加上下单流程,后天接入数据库验证数据。每天进步一点点,一个月后你就有了一套自己的测试工具包。
测试脚本不是一次性工程,它得跟着项目一起长。你写的每一个小函数,都是在给未来的自己省时间。