轻松掌握Python+主流测试框架,快速转型自动化测试

xiao_xueYA1234 · · 63 次点击 · · 开始浏览    

轻松掌握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

  • 下载地址:Python 官网(选择 3.8 + 版本,兼容性更好);
  • 安装注意:勾选 “Add Python to PATH”(自动配置环境变量,避免后续手动配置);
  • 验证:打开命令行(Win:CMD,Mac:终端),输入python --version,显示 “Python 3.10.0” 等版本信息即安装成功。

(2)安装 IDE:推荐 PyCharm(社区版免费)

PyCharm 是 Python 开发的主流 IDE,支持代码提示、调试、插件扩展,对自动化测试非常友好:

  • 下载地址:PyCharm 官网,选择 “Community Edition”(免费);
  • 首次使用:创建 “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)核心步骤(简化版)

  1. 环境搭建:安装 Appium Server、Android SDK(安卓测试)、Xcode(iOS 测试);
  1. 元素定位:用 Appium Inspector(类似 Selenium 的元素定位工具)获取 App 元素的 ID、XPATH;
  1. 脚本编写:与 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,实现 “定时执行、代码提交后自动执行”,并将结果通过邮件 / 企业微信通知团队:

  1. 安装 Jenkins:参考Jenkins 官网
  1. 配置步骤:
    • 新建 “自由风格项目”,指定代码仓库(如 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 小时练习,你很快就能成为企业需要的自动化测试工程师!


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

63 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传