pytest 3.4.2 测试 py 代码必须在各自的应用代码 python 版本中编写?

pytest 3.4.2 test py code has to be written in the respective application code python version only?

我们项目应用代码中使用的是python2.7.4,并计划使用pytest 3.4.2版本进行单元测试。将来我们可能会将我们的应用程序代码升级到最新的 python 3.6.X.

鉴于pytest 3.4.X同时支持python 2.7和> 3.3版本,测试代码文件(示例:test_mymodule.py)必须写在任何python 版本,或者它必须写在用于应用程序代码的 python 版本上。

为了准确指出问题,

python2.7.x版本的应用代码 --> pytest对应的测试代码必须写成2.7.x兼容的代码,甚至可以这样写使用 python 3.4 版本兼容代码?。 pytest 会相应地理解测试代码和 运行 测试文件吗?

为了在 Python 2.7 中测试您的代码 - 您将 运行 您的测试代码将导入您的应用程序代码并调用它。这一切都发生在同一个解释器中。

因此,为了让您的测试代码能够测试 Python 2.7 代码,它需要在 Python 2.7 解释器下 运行 - 即您的测试代码需要 Python 2.7兼容代码本身。

您可以有两个版本的测试代码 - 但我建议使用类似 'six' 的版本。六个包有很多函数和方法,这意味着您可以编写一个代码库,当该代码 运行s 调用六个库时,它可以确定如何调用该特定功能。尽可能尝试为所有 Python 版本使用一个测试代码库(特别是如果您的应用程序在所有版本下都执行相同的操作)。

我还建议使用 futures_ 以便您的 Python 代码可以访问尽可能多的 Python 3 功能。

许多有用的 Python 3 特性(比如模拟库已经被移植到 Python 2 - 例如,如果你决定使用 'six' 那么你的代码可以做这:

if six.PY2:
     import mock
else:
     from unittest import mock

并始终获得正确的模拟库。

最后 - 这是在何处使用虚拟环境的完美示例;你有一个特定的虚拟环境用于你的 Python 2 测试 - 你只安装那些你需要在 Python 2 下测试的库(如果你需要它们,包括像模拟一样的反向移植);然后稍后当你来测试 Python 3 - 你 运行 Python 3 代码可能有一组不同的库)。