【问题标题】:Managing Python and Python package versions for Test Automation管理用于测试自动化的 Python 和 Python 包版本
【发布时间】:2019-05-15 20:28:54
【问题描述】:

伙计们,

我计划使用 Python 和各种 Python 包(如机器人框架、appium、selenium 等)进行测试自动化。但众所周知,python 和所有软件包版本都在不断发展。

如果我们从所有这些版本中选择一个版本,并且随着这些包的更新,建议使用什么流程来使开发环境与最新版本保持同步?

感谢您对此的一些指导。

谢谢。

【问题讨论】:

  • 利用虚拟环境,requirements.txt(是否有版本固定)和pip list --outdated
  • 我绝对推荐使用 virtualenv/venv 来管理每个项目的 Python 包。对于专门运行测试,我可能会使用tox 工具,因为它已经自动化了许多这些步骤。但是,对于像 Selenium 这样具有更广泛的操作系统级别依赖项的东西,您最好在 Docker 容器中运行测试,这样您就可以将所有测试依赖项与系统的其余部分隔离开来。
  • @DanielPryden 我可以从 docker 容器中驱动基于浏览器/GUI 的应用程序吗?我要运行的测试是在 windows 上运行的,正在使用测试 windows 应用程序。

标签: python pip pypi


【解决方案1】:

如果您使用给定版本的库编写代码,那么除非您打算使用新功能,否则将来更新该库更有可能破坏您的代码,而不是让它运行得更好。大多数情况下,最好还是坚持使用编写代码时使用的版本,除非您想更改代码以使用新玩具。

为了确保在新机器上加载程序时安装每个库的正确版本,您需要一个requirements.txt 文档。制作其中之一很容易。您所做的只是在虚拟环境中构建程序(例如conda create -n newenvconda activate newenv)只安装程序所需的库,然后,一旦安装了所有依赖项,在终端中输入pip freeze > requirements.txt。这会将您的所有依赖项及其版本信息放在文本文档中。当您想在新机器上使用该程序时,只需将pip install -r requirements.txt 合并到程序的加载过程中即可。

如果您使用类似docker 的方式将其容器化,则您的requirements.txt 依赖项可以在创建容器时自动安装。如果您想使用新的库或库版本,只需在您的 requirements.txt 中更新它,然后就可以更新了。

【讨论】:

    【解决方案2】:

    在这种情况下,您可能希望使用虚拟环境隔离您的包(以及它所依赖的外部包/版本)。可以将虚拟环境视为跟踪您正在导入的特定包版本的文件。因此,您可以在系统上安装最新的包,但您的项目仍将仅在虚拟环境中导入该版本。

    【讨论】:

      相关资源