Python 自动化测试:从环境搭建到脚本编写,帮你搞定 APP / 网页测试

自动化测试已成为现代软件开发中不可或缺的一环,特别是对于频繁迭代的 APP 和网页项目。Python 凭借其简洁的语法和丰富的测试框架,成为自动化测试的首选语言。本文将详细介绍如何从零开始搭建 Python 自动化测试环境,并编写高效的测试脚本。

为什么选择 Python 进行自动化测试?

Python 的语法接近自然语言,学习成本低,适合测试人员快速上手。此外,Python 生态提供了丰富的测试框架和工具,如 Selenium、Appium、Pytest 等,覆盖 Web 和移动端测试需求。

Python 的跨平台特性使其能在 Windows、macOS 和 Linux 上无缝运行,方便团队协作。社区活跃,遇到问题时能快速找到解决方案。

自动化测试环境搭建

安装 Python 环境是第一步。推荐使用 Python 3.8 或更高版本,避免兼容性问题。可以从官网下载安装包,或通过包管理工具(如 Homebrew、apt)安装。

虚拟环境能隔离项目依赖,避免版本冲突。使用以下命令创建并激活虚拟环境:

python -m venv my_test_env  
source my_test_env/bin/activate  # Linux/macOS  
my_test_env\Scripts\activate     # Windows  

安装必要的测试库,如 Selenium 和 Appium:

pip install selenium appium-python-client pytest  

Web 测试需要浏览器驱动。以 Chrome 为例,下载对应版本的 ChromeDriver 并配置环境变量:

# 示例:Mac 下将 chromedriver 放入 /usr/local/bin  
mv chromedriver /usr/local/bin  

移动端测试需安装 Appium Server,并确保手机或模拟器已连接。

编写第一个 Web 自动化测试脚本

使用 Selenium 控制浏览器进行自动化操作。以下是一个简单的脚本,打开百度并搜索关键词:

from selenium import webdriver  
from selenium.webdriver.common.by import By  
from selenium.webdriver.common.keys import Keys  

driver = webdriver.Chrome()  
driver.get("https://www.baidu.com")  

search_box = driver.find_element(By.ID, "kw")  
search_box.send_keys("Python 自动化测试" + Keys.RETURN)  

assert "Python 自动化测试" in driver.title  
driver.quit()  

脚本通过 find_element 定位搜索框,输入关键词并模拟回车操作。最后断言页面标题是否包含关键词,确保测试通过。

优化测试脚本:Pytest 框架

Pytest 是 Python 最流行的测试框架之一,支持灵活的断言和丰富的插件。将上述脚本改写为 Pytest 测试用例:

import pytest  
from selenium import webdriver  

@pytest.fixture  
def browser():  
    driver = webdriver.Chrome()  
    yield driver  
    driver.quit()  

def test_baidu_search(browser):  
    browser.get("https://www.baidu.com")  
    search_box = browser.find_element(By.ID, "kw")  
    search_box.send_keys("Pytest 框架" + Keys.RETURN)  
    assert "Pytest 框架" in browser.title  

使用 @pytest.fixture 管理浏览器生命周期,避免重复代码。运行测试时,Pytest 会自动生成清晰的报告。

移动端自动化测试:Appium 实战

Appium 支持 iOS 和 Android 平台的自动化测试。以下是一个 Android 测试示例,打开计算器并执行加法运算:

from appium import webdriver  

desired_caps = {  
    "platformName": "Android",  
    "deviceName": "emulator-5554",  
    "appPackage": "com.android.calculator2",  
    "appActivity": ".Calculator"  
}  

driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)  

driver.find_element_by_id("digit_2").click()  
driver.find_element_by_id("op_add").click()  
driver.find_element_by_id("digit_3").click()  
driver.find_element_by_id("eq").click()  

result = driver.find_element_by_id("result").text  
assert result == "5"  
driver.quit()  

脚本通过 desired_caps 配置设备信息,启动计算器 APP 并模拟点击操作。最后验证计算结果是否正确。

测试数据管理与参数化

硬编码测试数据不利于维护。Pytest 的 @pytest.mark.parametrize 支持参数化测试:

import pytest  

@pytest.mark.parametrize("keyword,expected_title", [  
    ("Selenium", "Selenium_百度搜索"),  
    ("Appium", "Appium_百度搜索")  
])  
def test_search_keywords(browser, keyword, expected_title):  
    browser.get("https://www.baidu.com")  
    search_box = browser.find_element(By.ID, "kw")  
    search_box.send_keys(keyword + Keys.RETURN)  
    assert expected_title in browser.title  

通过参数化,同一测试用例可覆盖多组数据,提高代码复用率。

测试报告与持续集成

生成直观的测试报告有助于分析结果。安装 pytest-html 插件生成 HTML 报告:

pip install pytest-html  
pytest --html=report.html  

将自动化测试集成到 CI/CD 流程(如 Jenkins、GitHub Actions),确保每次代码提交后自动运行测试。

常见问题与调试技巧

元素定位失败是常见问题。优先使用 IDNAME 定位,若不可用再尝试 XPath 或 CSS 选择器。

动态加载元素可能导致脚本执行过快。使用显式等待(WebDriverWait)确保元素加载完成:

from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  

element = WebDriverWait(driver, 10).until(  
    EC.presence_of_element_located((By.ID, "dynamic_element"))  
)  

移动端测试需注意设备兼容性。不同 Android 版本或屏幕尺寸可能影响元素定位。

最后

Python 自动化测试能显著提升测试效率,覆盖 Web 和移动端场景。从环境搭建到脚本编写,合理使用 Selenium、Appium 和 Pytest 等工具,结合参数化和持续集成,构建稳定高效的测试流程。

通过不断实践和优化,自动化测试将成为保障软件质量的重要武器。现在就开始你的 Python 自动化测试之旅吧!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐