You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何提升基于Python、Pylenium+Pytest的自动化测试执行速度?

如何提升基于Python、Pylenium+Pytest的自动化测试执行速度?

嗨,我太懂你刚上手自动化测试就遇到速度瓶颈的感受了——2分钟的单测确实有点磨人,尤其是后续要扩展更多用例的时候。结合你用Pylenium+Pytest做UI测试的场景,我给你整理几个实打实的优化方向,亲测有效:

  • 复用浏览器实例,减少启动关闭开销
    Pytest默认每个测试用例都会启动新的浏览器进程,光是启动关闭的时间就占了很大比例。你可以用Pytest的fixture功能,把浏览器实例的作用域设为modulesession,让整个模块/测试会话只启动一次浏览器,跑完所有用例再关闭。示例代码如下:

    import pytest
    from pylenium.driver import Pylenium
    
    @pytest.fixture(scope="session")
    def py():
        py = Pylenium()
        yield py
        py.quit()
    

    这个优化几乎不用改核心测试代码,就能立竿见影提升速度。

  • 启用无头浏览器模式
    浏览器在无头模式下运行时不会渲染可视化界面,资源占用更少,执行速度会快很多。你可以在初始化Pylenium时配置无头模式:

    from pylenium.config import DriverConfig
    
    config = DriverConfig(headless=True)
    py = Pylenium(config=config)
    

    或者把这个配置放到Pytest的配置文件里,让所有测试默认使用无头模式。

  • 替换无意义等待,用精准的显式等待
    别再用time.sleep()这种固定时长的等待了!不仅浪费时间,还可能因为网络波动导致测试失败。换成Pylenium的显式等待,只等待目标元素达到预期状态再继续操作,比如等待元素可见、可点击,或者文本内容加载完成:

    # 等待课程数量元素加载完成并获取文本
    course_count = py.find("span.course-number").wait_for(lambda e: e.text != "", timeout=3).text
    

    这样既保证了测试稳定性,又不会做无意义的等待。

  • 优化元素定位策略
    低效的元素定位是拖慢测试的隐形杀手。尽量选择更高效的定位器:

    • 优先用IDCSS选择器(比XPath快很多)
    • 避免使用模糊的文本检索XPath(比如//*[contains(text(), 'xxx')]),尤其是页面元素较多时
    • 用链式定位缩小搜索范围,比如先定位父容器,再找子元素:py.find("div.category-tabs").find("li.active")
  • 并行执行测试用例
    如果你的测试用例之间没有依赖(比如每个用例验证独立的分类标签),可以用pytest-xdist插件实现并行执行。安装插件后,执行命令:

    pytest -n auto
    

    它会根据你的CPU核心数自动分配进程,多个用例同时运行,直接把总执行时间砍半甚至更多。注意要确保用例之间没有共享状态,避免互相干扰。

  • 减少重复前置操作
    比如你的测试需要多次切换不同分类,不要每次都重新打开博客首页——直接在当前页面点击分类标签即可。如果有通用的前置操作(比如登录,若你的场景需要),把它放到scope="session"的fixture里,只执行一次,不要每个用例都重复做。

你可以先从复用浏览器实例无头模式这两个点入手,这两个优化成本最低,效果最明显。如果还有剩余的速度瓶颈,再结合并行执行和元素定位优化逐步调整~

备注:内容来源于stack exchange,提问作者Vlad

火山引擎 最新活动