轻松掌握Python+主流测试框架,快速转型自动化测试
轻松掌握 Python + 主流测试框架,快速转型自动化测试
“下仔客”: itxt.top/1008/
在软件测试领域,“自动化测试” 早已不是可选技能,而是提升测试效率、保障产品质量的核心能力。随着项目迭代加速(如敏捷、DevOps 模式),手动测试反复执行重复用例的 “低效痛点” 愈发明显 —— 而 Python 凭借 “语法简洁、生态丰富、学习门槛低” 的优势,成为自动化测试的首选编程语言。
本文将以 “零基础友好” 为原则,从 “Python 基础入门→主流测试框架实战→自动化测试全流程落地” 三个维度,带你轻松掌握自动化测试技能,快速完成从 “手动测试” 到 “自动化测试工程师” 的转型。
一、为什么选择 Python 做自动化测试?——3 大核心优势
在开始学习前,先明确 Python 在自动化测试领域的不可替代性,帮你建立学习信心:
1. 语法简洁:上手快,降低学习成本
Python 的语法接近自然语言,代码量远少于 Java、C# 等语言。例如,实现 “打开浏览器访问百度” 的功能,Python(Selenium)只需 5 行代码,而 Java 需 10 行以上。对零基础或手动测试转型的同学来说,无需花费大量时间啃复杂语法,就能快速写出可用的自动化脚本。
2. 生态丰富:测试框架 “应有尽有”
Python 拥有成熟的自动化测试生态,针对不同测试场景(Web、App、接口、性能)都有对应的主流框架,且框架间兼容性强,无需重复学习新语言:
- Web 自动化:Selenium、Playwright;
- 接口自动化:Requests、PyTest+Requests;
- App 自动化:Appium、Airtest;
- 性能测试:Locust;
- 测试管理:Pytest(用例管理、断言、报告生成)。
3. 工具链完善:从脚本到落地 “一站式解决”
自动化测试不止 “写脚本”,还需解决 “用例执行、报告生成、持续集成” 等问题。Python 生态提供了全套工具链:
- 用例执行:Pytest(支持批量执行、用例分组、失败重跑);
- 报告生成:Allure(生成美观、可追溯的测试报告);
- 持续集成:Jenkins(与 Python 脚本无缝对接,实现定时执行、结果通知);
- 数据处理:Pandas(处理测试数据,如 Excel 用例数据读取)。
二、Python 基础入门:自动化测试必备核心语法(30 分钟上手)
对转型自动化测试的同学来说,无需掌握 Python 全部语法,只需聚焦 “自动化测试常用功能” 即可。以下是高频使用的核心知识点,配合测试场景示例讲解:
1. 环境搭建:10 分钟搞定 Python+IDE
(1)安装 Python
- 安装注意:勾选 “Add Python to PATH”(自动配置环境变量,避免后续手动配置);
- 验证:打开命令行(Win:CMD,Mac:终端),输入python --version,显示 “Python 3.10.0” 等版本信息即安装成功。
(2)安装 IDE:推荐 PyCharm(社区版免费)
PyCharm 是 Python 开发的主流 IDE,支持代码提示、调试、插件扩展,对自动化测试非常友好:
- 首次使用:创建 “New Project”,选择 Python 解释器(自动识别已安装的 Python 版本),即可开始写代码。
2. 自动化测试高频语法:聚焦 “实用”,不搞 “炫技”
(1)变量与数据类型:存储测试数据
自动化测试中常需存储 “测试地址、账号密码、预期结果” 等数据,核心数据类型包括字符串(str)、列表(list)、字典(dict):
# 1. 字符串:存储URL、账号密码
test_url = "https://www.baidu.com" # 测试地址
username = "test_user" # 测试账号
password = "123456" # 测试密码
# 2. 列表:存储多个测试用例数据(如多个搜索关键词)
search_keywords = ["Python自动化测试", "Selenium", "Pytest"]
# 3. 字典:存储单条用例的“输入-预期结果”(键值对形式,清晰易读)
login_case = {
"input": {"username": "test_user", "password": "123456"},
"expected": "登录成功"
}
(2)循环:批量执行重复操作
自动化测试中常需 “循环执行多条用例”(如循环输入不同关键词搜索),用for循环即可轻松实现:
# 示例:循环使用不同关键词执行百度搜索(后续结合Selenium可实现自动化操作)
search_keywords = ["Python自动化测试", "Selenium", "Pytest"]
for keyword in search_keywords:
print(f"正在搜索:{keyword}") # 模拟搜索操作
# 实际自动化中,此处会替换为Selenium的“输入关键词→点击搜索”代码
(3)函数:复用测试步骤
将 “登录、打开页面” 等重复步骤封装成函数,避免代码冗余。例如,封装 “登录函数”,后续所有需要登录的用例可直接调用:
# 示例:封装登录函数(参数为账号密码,返回登录结果)
def login(username, password):
# 模拟登录逻辑(实际自动化中替换为Selenium/Appium的操作)
if username == "test_user" and password == "123456":
return "登录成功"
else:
return "账号或密码错误"
# 调用函数执行登录用例
result1 = login("test_user", "123456")
result2 = login("test_user", "wrong_password")
print(result1) # 输出:登录成功
print(result2) # 输出:账号或密码错误
(4)异常处理:保证脚本稳定性
自动化测试中常遇到 “元素未找到、网络延迟” 等异常,用try-except捕获异常,避免脚本直接崩溃,还能记录异常信息便于排查问题:
# 示例:模拟“打开网页”操作,捕获“网页加载失败”异常
def open_page(url):
try:
# 模拟打开网页(实际自动化中替换为Selenium的driver.get(url))
if "baidu.com" in url:
print(f"成功打开网页:{url}")
else:
raise Exception("网页地址无效") # 手动抛出异常
except Exception as e:
# 捕获异常并记录日志(实际自动化中可写入日志文件)
print(f"打开网页失败:{str(e)}")
# 测试正常与异常场景
open_page("https://www.baidu.com") # 成功打开网页:https://www.baidu.com
open_page("https://wrong-url.com") # 打开网页失败:网页地址无效
三、主流测试框架实战:从 Web 到接口,覆盖核心测试场景
掌握 Python 基础后,直接结合主流框架实战,边练边学效率最高。以下针对 “Web 自动化” 和 “接口自动化” 两个高频场景,提供 “可直接运行” 的实战案例:
1. Web 自动化:Selenium+Pytest(最经典组合)
Selenium 是 Web 自动化的 “事实标准”,支持 Chrome、Firefox 等浏览器;Pytest 是 Python 最流行的测试框架,支持用例管理、断言、失败重跑。两者结合,可快速实现 Web 页面的自动化测试(如登录、搜索、表单提交)。
(1)环境搭建:3 步安装依赖
# 1. 安装Selenium(支持浏览器自动化操作)
pip install selenium
# 2. 安装Pytest(用例执行与管理)
pip install pytest
# 3. 下载浏览器驱动(需与浏览器版本匹配)
# Chrome驱动:https://sites.google.com/chromium.org/driver/
# 下载后将驱动放在Python安装目录(或配置环境变量)
(2)实战案例:百度搜索自动化测试
需求:打开 Chrome 浏览器→访问百度→循环输入 3 个关键词搜索→验证搜索结果页标题是否包含关键词→关闭浏览器。
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# 1. 前置操作:打开浏览器(所有用例执行前运行)
def setup_class():
global driver # 定义全局变量,供所有用例使用
driver = webdriver.Chrome() # 启动Chrome浏览器
driver.maximize_window() # 最大化窗口
driver.implicitly_wait(10) # 隐式等待(元素未找到时最多等10秒,避免网络延迟)
# 2. 后置操作:关闭浏览器(所有用例执行后运行)
def teardown_class():
driver.quit() # 关闭浏览器
# 3. 测试用例:百度搜索(用@pytest.mark.parametrize实现多组数据驱动)
@pytest.mark.parametrize("keyword", ["Python自动化测试", "Selenium", "Pytest"])
def test_baidu_search(keyword):
# 访问百度
driver.get("https://www.baidu.com")
# 定位搜索框(通过ID定位,百度搜索框ID为“kw”)
search_box = driver.find_element(By.ID, "kw")
# 输入关键词并提交搜索(Keys.ENTER模拟回车键)
search_box.send_keys(keyword)
search_box.send_keys(Keys.ENTER)
# 等待搜索结果加载(实际项目中建议用显式等待,此处简化用time.sleep)
time.sleep(2)
# 断言:验证结果页标题是否包含搜索关键词(断言失败则用例报错)
assert keyword in driver.title, f"搜索{keyword}失败,结果页标题不包含关键词"
print(f"搜索{keyword}成功,结果页标题:{driver.title}")
# 执行方式:在PyCharm中右键运行,或命令行输入“pytest 脚本名.py -v”
(3)关键知识点解析
- 元素定位:Selenium 支持多种定位方式(ID、NAME、XPATH、CSS),优先用 ID(唯一且定位最快),无 ID 时用 XPATH(灵活,支持复杂定位);
- 数据驱动:用@pytest.mark.parametrize实现多组用例数据,避免写重复代码;
- 断言:用assert判断 “实际结果是否符合预期”,是自动化测试的核心(如验证标题、按钮文本、数据库数据)。
2. 接口自动化:Requests+Pytest(接口测试首选)
接口测试比 Web 自动化更 “稳定、高效”(不受页面元素变化影响),是自动化测试的重点。Requests 是 Python 最流行的 HTTP 库,可轻松发送 GET/POST 请求;结合 Pytest,可实现接口用例的批量执行与报告生成。
(1)环境搭建:安装依赖
# 1. 安装Requests(发送HTTP请求)
pip install requests
# 2. 安装Pytest(已安装可跳过)
pip install pytest
# 3. 安装Allure(可选,生成美观的测试报告)
pip install allure-pytest
(2)实战案例:模拟 “用户登录” 接口测试
假设存在一个 “用户登录” 接口,请求地址:http://test-api.com/login,请求方式:POST,请求参数:{"username": "test_user", "password": "123456"},成功响应:{"code": 200, "msg": "登录成功", "token": "xxx"}。
import pytest
import requests
# 1. 定义接口基础信息(全局变量,便于维护)
BASE_URL = "http://test-api.com" # 接口基础地址
LOGIN_URL = f"{BASE_URL}/login" # 登录接口地址
# 2. 测试用例数据(用字典存储“输入-预期结果”,清晰易维护)
login_cases = [
# 正常用例:正确账号密码
{
"input": {"username": "test_user", "password": "123456"},
"expected": {"code": 200, "msg": "登录成功", "has_token": True}
},
# 异常用例:密码错误
{
"input": {"username": "test_user", "password": "wrong_password"},
"expected": {"code": 400, "msg": "账号或密码错误", "has_token": False}
},
# 异常用例:账号为空
{
"input": {"username": "", "password": "123456"},
"expected": {"code": 400, "msg": "账号不能为空", "has_token": False}
}
]
# 3. 测试用例:登录接口测试
@pytest.mark.parametrize("case", login_cases)
def test_login_api(case):
# 1. 发送POST请求(json参数指定请求体)
response = requests.post(
url=LOGIN_URL,
json=case["input"], # 请求参数
headers={"Content-Type": "application/json"} # 请求头(指定JSON格式)
)
# 2. 解析响应结果(转为字典格式)
response_json = response.json()
print(f"请求参数:{case['input']},响应结果:{response_json}")
# 3. 断言:验证响应结果是否符合预期
# 断言1:响应码code匹配
assert response_json["code"] == case["expected"]["code"], \
f"断言失败:预期code={case['expected']['code']},实际code={response_json['code']}"
# 断言2:响应信息msg匹配
assert response_json["msg"] == case["expected"]["msg"], \
f"断言失败:预期msg={case['expected']['msg']},实际msg={response_json['msg']}"
# 断言3:是否返回token(正常登录需返回,异常登录不返回)
if case["expected"]["has_token"]:
assert "token" in response_json, "断言失败:正常登录未返回token"
else:
assert "token" not in response_json, "断言失败:异常登录不应返回token"
# 执行方式:命令行输入“pytest 脚本名.py -v --alluredir=./allure-results”(生成Allure报告)
# 查看报告:输入“allure serve ./allure-results”(自动打开浏览器显示报告)
(3)关键知识点解析
- 请求方法:根据接口文档选择 GET(查询)、POST(提交)、PUT(更新)、DELETE(删除);
- 响应解析:用response.json()将 JSON 格式的响应转为 Python 字典,便于断言;
- 报告生成:Allure 报告支持展示用例通过率、失败原因、请求详情,便于团队协作与问题排查。
3. App 自动化:Appium(移动端自动化首选)
如果需要测试 iOS/Android App,Appium 是最佳选择(支持跨平台,无需为不同系统写两套脚本)。核心逻辑与 Selenium 类似,只需掌握 “App 元素定位” 和 “移动端特有操作”(如点击、滑动、输入)。
(1)核心步骤(简化版)
- 环境搭建:安装 Appium Server、Android SDK(安卓测试)、Xcode(iOS 测试);
- 元素定位:用 Appium Inspector(类似 Selenium 的元素定位工具)获取 App 元素的 ID、XPATH;
- 脚本编写:与 Selenium 语法相似,示例代码如下:
from appium import webdriver
from appium.webdriver.common.by import By
import time
# 1. 配置Desired Capabilities(指定测试设备、App信息)
desired_caps = {
"platformName": "Android", # 平台(Android/iOS)
"deviceName": "emulator-5554", # 设备名(通过“adb devices”查看)
"appPackage": "com.example.testapp", # App包名(需替换为实际测试的App包名)
"appActivity": ".MainActivity", # App启动页(需替换为实际启动页)
"noReset": True # 测试后不重置App数据(避免每次登录)
}
# 2. 连接Appium Server,启动App
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
driver.implicitly_wait(10)
# 3. 执行App操作(如点击“我的”按钮→输入账号密码→登录)
# 点击“我的”按钮(通过ID定位)
driver.find_element(By.ID, "com.example.testapp:id/tab_mine").click()
time.sleep(2)
# 输入账号
driver.find_element(By.ID, "com.example.testapp:id/et_username").send_keys("test_user")
# 输入密码
driver.find_element(By.ID, "com.example.testapp:id/et_password").send_keys("123456")
# 点击登录按钮
driver.find_element(By.ID, "com.example.testapp:id/btn_login").click()
# 4. 断言:验证登录后是否显示“退出登录”按钮
assert driver.find_element(By.ID, "com.example.testapp:id/btn_logout").is_displayed(), \
"登录失败:未找到退出登录按钮"
print("App登录自动化测试成功")
# 5. 关闭App
driver.quit()
四、自动化测试全流程落地:从脚本到生产环境
学会写脚本只是第一步,真正的自动化测试需要 “融入项目流程”,解决 “用例维护、持续执行、结果反馈” 等问题。以下是企业级自动化测试的落地方案:
1. 用例管理:遵循 “金字塔模型”,提高自动化效率
自动化测试不是 “越多越好”,而是要优先覆盖 “高价值、高重复” 的用例。推荐遵循 “测试金字塔” 模型:
- 底层(接口测试):覆盖 70% 的用例(如登录、下单、支付等核心接口),稳定且执行快;
- 中层(Web/App 功能测试):覆盖 20% 的用例(如关键页面的流程,如注册→登录→下单);
- 顶层(UI 自动化):覆盖 10% 的用例(如首页展示、复杂交互,UI 变化频繁,维护成本高)。
2. 持续集成:Jenkins 实现 “自动化执行 + 结果通知”
将 Python 自动化脚本接入 Jenkins,实现 “定时执行、代码提交后自动执行”,并将结果通过邮件 / 企业微信通知团队:
- 安装 Jenkins:参考Jenkins 官网;
- 配置步骤:
-
- 新建 “自由风格项目”,指定代码仓库(如 Git);
-
- 构建步骤:添加 “执行 Windows 批处理命令”(Win)或 “执行 Shell”(Mac/Linux),输入pytest 脚本路径 -v --alluredir=./allure-results;
-
- 后置步骤:安装 Allure 插件,配置 “Allure Report”,生成报告;
-
- 触发器:设置 “定时构建”(如每天凌晨 2 点执行)或 “代码提交后构建”。
3. 问题排查:日志 + 截图,快速定位故障
自动化用例失败后,需快速定位原因。建议在脚本中加入 “日志记录” 和 “失败截图” 功能:
- 日志记录:用 Python 的logging模块记录 “执行步骤、请求参数、响应结果”;
- 失败截图:Web 自动化中,在teardown函数中判断用例失败后截图:
import logging
from selenium import webdriver
import pytest
import os
# 配置日志
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
def setup_class():
global driver
driver = webdriver.Chrome()
logger.info("浏览器启动成功")
def teardown_class():
driver.quit()
logger.info("浏览器关闭成功")
# 失败截图装饰器(用例失败后自动截图)
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item):
outcome = yield
report = outcome.get_result()
if report.when == "call" and report.failed:
# 截图保存路径
screenshot_path = "./screenshots"
if not os.path.exists(screenshot_path):
os.makedirs(screenshot_path)
# 截图文件名:用例名+时间戳
screenshot_name = f"{item.nodeid.replace('::', '_')}_{time.strftime('%Y%m%d%H%M%S')}.png"
driver.save_screenshot(f"{screenshot_path}/{screenshot_name}")
logger.error(f"用例{item.nodeid}执行失败,截图已保存至:{screenshot_path}/{screenshot_name}")
五、转型建议:3 个月从手动测试到自动化测试工程师
结合多数人的转型经验,给出一份 “可落地” 的学习计划,帮你快速入门并找到工作:
第 1 个月:Python 基础 + Web 自动化(Selenium+Pytest)
- 第 1-2 周:掌握 Python 核心语法(变量、循环、函数、异常处理),每天练习 1-2 个小案例;
- 第 3-4 周:学习 Selenium+Pytest,完成 “电商网站核心流程自动化”(如注册→登录→搜索→下单),并生成 Allure 报告。
第 2 个月:接口自动化(Requests+Pytest)+App 自动化(Appium)
- 第 1-2 周:学习 Requests 库,完成 “接口测试框架搭建”(支持用例管理、断言、日志),覆盖 10 + 核心接口;
- 第 3-4 周:学习 Appium,完成 “App 登录→首页浏览→个人中心” 自动化脚本,掌握元素定位与移动端操作。
第 3 个月:项目实战 + 面试准备
- 第 1-2 周:搭建 “企业级自动化测试项目”(包含 Web、接口、App 用例,接入 Jenkins 持续集成),放在 GitHub 上作为作品集;
- 第 3-4 周:复习核心知识点(如元素定位技巧、接口断言方法、自动化框架设计),刷自动化测试面试题,准备简历。
六、总结
Python + 主流测试框架的组合,为手动测试转型自动化提供了 “低门槛、高效率” 的路径。无需担心 “零基础”,只要聚焦 “实用语法 + 实战案例 + 落地流程”,3 个月内即可掌握自动化测试核心技能。
记住:自动化测试的核心不是 “写脚本”,而是 “用技术解决手动测试的痛点”—— 通过提高测试效率、保障产品质量,体现自己的价值。从现在开始,每天花 1-2 小时练习,你很快就能成为企业需要的自动化测试工程师!
有疑问加站长微信联系(非本文作者)
