You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分Selenium Python测试文件并实现模块导入复用?

如何在Python测试文件中复用共享代码

当然可以!把重复的共享代码抽出来复用完全可行,你之前用start.py没成功大概率是导入路径或文件结构的问题,我给你一步步拆解清楚怎么做:

第一步:梳理合理的文件结构

先把你的测试文件和共享代码的结构理清楚,比如这样的标准结构最不容易出错:

your_test_project/
├── shared/                # 专门放共享代码的文件夹
│   ├── __init__.py        # 必须有这个空文件,让Python把它识别成可导入的包
│   └── utils.py           # 在这里写你的共享逻辑:比如浏览器初始化、登录操作等
├── test_case1.py          # 你的测试用例文件1
├── test_case2.py          # 测试用例文件2
└── test_case3.py          # 测试用例文件3

如果不想单独建文件夹,直接把共享代码放在同目录的start.py里也可以,但同样要保证目录里有__init__.py(空文件就行)。

第二步:编写共享代码

比如在shared/utils.py里写你常用的复用逻辑:

def init_browser():
    # 示例:初始化Chrome浏览器的共享代码
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    return driver

def login(driver, username, password):
    # 示例:通用的登录操作代码
    driver.find_element("id", "username").send_keys(username)
    driver.find_element("id", "password").send_keys(password)
    driver.find_element("id", "login-btn").click()

第三步:在测试文件中导入使用

根据你的文件结构,有两种导入方式:

场景1:共享代码在子文件夹中

在test_case1.py里直接从子包导入:

# 从shared包的utils模块导入需要的函数
from shared.utils import init_browser, login

def test_order_flow():
    driver = init_browser()
    login(driver, "test_user", "123456")
    # 这里写你的测试逻辑
    driver.quit()

场景2:共享代码在同目录的start.py中

如果你的共享代码是放在同目录的start.py里,导入更简单:

from start import init_browser, login

# 后续的测试逻辑和上面一致

常见导入失败问题排查

如果还是导入失败,大概率是这两个问题:

  • 问题1:提示ModuleNotFoundError
    这是Python解释器找不到你的共享模块导致的,解决方法:

    1. 确认共享代码所在目录有__init__.py文件(空文件即可)
    2. 把项目根目录添加到Python的环境变量PYTHONPATH中:
      # Linux/macOS终端
      export PYTHONPATH="/path/to/your_test_project:$PYTHONPATH"
      
      # Windows命令行
      set PYTHONPATH=C:\path\to\your_test_project;%PYTHONPATH%
      
      或者在测试文件开头手动添加路径:
      import sys
      from pathlib import Path
      # 获取当前文件的父目录(项目根目录)
      project_root = Path(__file__).parent
      sys.path.append(str(project_root))
      
      # 现在再导入共享代码就没问题了
      from shared.utils import init_browser
      
  • 问题2:导入后函数执行报错
    检查共享代码里的依赖是否安装(比如用到Selenium就要确保selenium包已安装),同时核对函数的参数和你测试文件中的调用是否匹配。

进阶:用测试框架的Fixture优化复用(如果你用pytest)

如果你的测试用pytest框架,还可以用Fixture更优雅地管理共享代码,比如在项目根目录创建conftest.py(pytest会自动识别这个文件):

import pytest
from selenium import webdriver

# 定义一个模块级别的Fixture,每个测试模块只初始化一次浏览器
@pytest.fixture(scope="module")
def driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    yield driver  # 测试执行完后自动执行下面的代码
    driver.quit()

# 定义已登录的浏览器Fixture,复用上面的driver
@pytest.fixture
def logged_in_driver(driver):
    driver.get("https://your-login-page.com")
    driver.find_element("id", "username").send_keys("test_user")
    driver.find_element("id", "password").send_keys("123456")
    driver.find_element("id", "login-btn").click()
    return driver

然后在测试文件里直接使用Fixture:

def test_check_user_profile(logged_in_driver):
    logged_in_driver.get("https://your-profile-page.com")
    # 这里写你的断言逻辑

这样不用手动导入和调用初始化函数,pytest会自动帮你管理浏览器的生命周期,代码更简洁。

内容的提问来源于stack exchange,提问作者user9388248

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:18:19