2014-01-24 111 views
2

我们正在尝试使用鼻子来实现自动化测试框架。目的是添加一些命令行选项以传递到测试中,例如主机名。我们针对Web应用运行这些测试作为集成测试。如何访问测试中的插件选项? (Python鼻子)

因此,我们创建了一个简单的插件,增加了一个选项,解析器:

import os 
from nose.plugins import Plugin 

class test_args(Plugin): 
    """ 
    Attempting to add command line parameters. 
    """ 
    name = 'test_args' 
    enabled = True 

    def options(self, parser, env=os.environ): 
     super(test_args, self).options(parser, env) 
     parser.add_option("--hostname", 
        action="store", 
        type="str", 
        help="The hostname of the server") 

    def configure(self, options, conf): 
     self.hostname = options.hostname  

该选项可现在当我们运行nosetests ......但我无法弄清楚如何使用它在一个测试案例中?这可能吗?我找不到任何有关如何访问测试用例中的选项或配置的文档。

添加命令行参数纯粹是为了开发/调试代码的目的。我们计划将配置文件用于我们在竹子中的自动运行。但是,在开发集成测试和调试问题时,可以即时更改配置。但我们需要弄清楚如何首先实际使用这些选项......我觉得我只是缺少一些基本的东西,或者我是盲目的...

理想情况下,我们可以扩展testconfig plugin以使得在配置从这个论点:

--tc=key:value 

到:

--key=value 

如果有更好的方法来做到这一点,然后我所有的耳朵。

回答

0

所以,我已经发现了如何使这项工作:

import os 
from nose.plugins import Plugin 

case_options = None 

class test_args(Plugin): 
    """ 
    Attempting to add command line parameters. 
    """ 
    name = 'test_args' 
    enabled = True 

    def options(self, parser, env=os.environ): 
     super(test_args, self).options(parser, env) 
     parser.add_option("--hostname", 
        action="store", 
        type="str", 
        help="The hostname of the server") 

    def configure(self, options, conf): 
     global case_options 
     case_options = options 
使用此

你可以这样做在您的测试情况下得到的选项:

from test_args import case_options 

为了解决不同的配置文件的问题,我发现你可以使用一个setup.cfg文件这样写INI文件在默认的传递命令行参数。你也可以通过-c config_file.cfg来选择不同的配置。这应该适合我们所需要的。

0

一个快捷方式是在测试中访问import sys; sys.argv - 它将有传递给nose可执行文件的参数列表,包括插件的参数。或者你的插件可以将属性添加到您的测试,你可以参考这些属性 - 但它需要更多的重任 - 类似this answer.

相关问题