【问题标题】:Is it possible to setup environment variables within noses setup.cfg是否可以在鼻子 setup.cfg 中设置环境变量
【发布时间】:2013-07-10 15:54:27
【问题描述】:

我正在处理一个相当庞大的嵌入式 python 项目。目前,测试隐藏在 make 调用后面,该调用在工作站上设置 PYTHONPATH 和 LD_LIBRARY_PATH 以便测试可以完成。是否可以在鼻子配置中指定这一点,以便用户只需要在目录中调用 nosetests

否则我应该在测试文件中包含一些样板来操作所需的路径吗?

【问题讨论】:

  • 进一步阅读,看起来我需要设置一个在测试之前运行的测试夹具。然而,鼻子文档似乎没有任何明确的例子。
  • 创建一个 runtests.sh 文件来设置环境,然后调用nosetests
  • @JoranBeasley:这就是我想要避免的。这主要是为了方便,因为 IDE 似乎只适合直接运行鼻子测试。
  • 如果您正在操作 PYTHONPATH,听起来您遇到的问题不仅仅是正确设置测试环境

标签: python nose nosetests


【解决方案1】:

No nose 目前没有任何从配置文件设置环境变量的能力:

def _configTuples(self, cfg, filename):
    config = []
    if self._config_section in cfg.sections():
        for name, value in cfg.items(self._config_section):
            config.append((name, value, filename))
    return config

def _readFromFilenames(self, filenames):
    config = []
    for filename in filenames:
        cfg = ConfigParser.RawConfigParser()
        try:
            cfg.read(filename)
        except ConfigParser.Error, exc:
            raise ConfigError("Error reading config file %r: %s" %
                              (filename, str(exc)))
        config.extend(self._configTuples(cfg, filename))
    return config

从配置文件中指定的任何配置选项都将直接存储为列表中的元组。事实上,如果你尝试传递一些鼻子不接受的值,那么它会抛出一个错误。

def _applyConfigurationToValues(self, parser, config, values):
    for name, value, filename in config:
        if name in option_blacklist:
            continue
        try:
            self._processConfigValue(name, value, values, parser)
        except NoSuchOptionError, exc:
            self._file_error(
                "Error reading config file %r: "
                "no such option %r" % (filename, exc.name),
                name=name, filename=filename)
        except optparse.OptionValueError, exc:
            msg = str(exc).replace('--' + name, repr(name), 1)
            self._file_error("Error reading config file %r: "
                             "%s" % (filename, msg),
                             name=name, filename=filename)

查看出现 NoSuchOptionError 的部分。

您确实有一个我已经尝试过的选项;使用nose-testconfig,它允许您在某种文件中指定测试配置选项,如果您的值无法识别,则nose 不会抛出错误。

或者您可以在测试中加入一些 @setup@teardown 方法。我会非常谨慎地添加任何类型的 setupTests.sh 脚本,因为这只会增加运行测试的额外复杂性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2019-11-19
    • 2013-07-13
    • 2019-02-06
    相关资源
    最近更新 更多