当前位置: 首页 > 面试题库 >

确保py.test在sys.path中包含应用程序目录

暨宸
2023-03-14
问题内容

我的项目目录结构如下(我认为这很标准):

my_project
    setup.py
    mypkg
        __init__.py
        foo.py
    tests
        functional
            test_f1.py
        unit
            test_u1.py

我将py.test用于我的测试框架,并且希望能够py.test testsmy_project目录中运行我的测试时运行。在我尝试import mypkg在测试中使用(例如)导入应用程序代码之前,这确实可行。那时,我收到错误“没有名为mypkg的模块”。经过一些调查,似乎py.test使用测试文件的目录运行sys.path
不是py.test从中运行目录的情况下运行测试。

为了解决此问题,我conftest.pytests目录中添加了一个文件,其中包含以下代码:

import sys, os

# Make sure that the application source directory (this directory's parent) is
# on sys.path.

here = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, here)

这似乎可行,但这是确保测试可以看到应用程序代码的好方法吗?有没有更好的方法来实现这一目标,或者我在组织项目的结构上做错了什么?

我已经看过其他一些使用py.test(例如pip)的项目,但是我看不到能做到这一点的代码,但是运行py.test tests似乎可以正常工作。我不知道为什么,但是我担心他们可能以更简单的方式获得了相同的结果。

我看过py.test文档,但看不到对此问题的解释或建议的处理方法。


问题答案:

就像您自己说的那样,py.test基本上假设您已经正确设置了PYTHONPATH。有几种方法可以实现此目的:

  • 给您的项目一个setup.py,并pip install -e .在此项目的virtualenv中使用。这可能是标准方法。

  • 如果您有virtualenv但没有setup.py,则可以作为一种变体,使用venv的工具在sys.path上添加项目目录,例如,pew add .如果使用pew,或者add2virtualenv .使用virtualenv和virtualenvwrapper的扩展名。

  • 如果您始终喜欢sys.path上的当前工作目录,则只需始终将其导出PYTHONPATH=''到Shell中即可。这是确保sys.path上的空字符串,Python将其解释为当前工作目录。但是,这潜在地存在安全隐患。

  • 我自己喜欢的黑客,滥用py.test加载conftest文件的方式:conftest.py在项目的顶级目录中放置一个空白。

py.test以这种方式运行的原因是使针对已安装的软件包在结帐的tests
/目录中轻松运行测试。如果它将无条件地将项目目录添加到PYTHONPATH,则将不再可能。



 类似资料:
  • 我已经和这件事斗争了一天多,在SO和其他地方读了很多帖子,但我仍然有问题。 我需要在一个自包含的JavaFX应用程序包中包含我的应用程序图标。我使用的是JDK1.8.0_45及其包含的JavaFX包。我正在使用Maven构建.exe,除了我不能包含我的图标外,它都运行得很好。 下面是我的pom.xml: 使图标出现在标题栏中的是javapackager部署步骤的参数。这一行告诉inno安装程序使用

  • 我是Java开发的新手,这里有一个问题:我生成了web应用程序 ,然后我添加了文件夹和简单的文件。通过命令在my localhost:8080/manager中,我可以看到我的web应用程序,但是我如何在其中添加我的jar文件呢?

  • 问题内容: 我正在考虑如何使Android的支持库在Eclipse之外包含和编译。我使用Linux作为构建环境,没有使用任何IDE来创建应用程序,仅使用基本的Android SDK。我仅获得了有关Eclipse的此问题的答案,但是如何仅使用Ant和Android SDK呢? 问题答案: 假设您没有使用: 步骤1:将SDK 复制或从SDK 复制到项目目录中。 步骤2:没有步骤2。 选择是否要使用本机

  • 问题内容: 嗨,我是angularjs的新手。我想向我的angularjs应用添加一个tripadvisor小部件。小部件代码是这样的: 这是我的问题:它没有从我的angularjs应用程序的底部加载脚本。 问题答案: 因此,不幸的是,基于大量搜索,没有任何方法可以使用纯角度进行此操作。在脚本标签上使用“ ng-include”,基于模板的指令甚至“ ng- src”都可以下载脚本,但默认情况下它

  • 按照这里和这里的指示。我使用的是JDK7U9和NetBeans 7.2.1。我所做的是创建相对于我的项目根文件夹的整个路径(C:\users\administrator\desktop\icotest\package\windows\icotest.ico)。我同时尝试了48x48和256x256的大小。下面是我的项目Icotest的树状结构概述: 这就是build.xml的样子:

  • 问题内容: 我需要在Java Swing应用程序中使用自定义字体(ttf)。如何将它们添加到包装中并使用它们? 同时,我只是将它们安装在Windows中然后使用它们,但是我不希望应用程序的使用如此复杂,告诉用户在使用我的应用程序之前安装字体不是很方便。 问题答案: 您可以通过加载它们: 此加载的字体没有预定义的字体设置,因此要使用该字体,您必须这样做: 看到: 物理和逻辑字体