我希望能够运行一个接受命令行参数的nose测试脚本。例如,大致如下:
测试.py
import nose, sys
def test():
# do something with the command line arguments
print sys.argv
if __name__ == '__main__':
nose.runmodule()
但是,每当我使用命令行参数运行此命令时,都会得到一个错误:
$ python test.py arg
E
======================================================================
ERROR: Failure: ImportError (No module named arg)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/nose-0.11.1-py2.6.egg/nose/loader.py", line 368, in loadTestsFromName
module = resolve_name(addr.module)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/nose-0.11.1-py2.6.egg/nose/util.py", line 334, in resolve_name
module = __import__('.'.join(parts_copy))
ImportError: No module named arg
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
显然,nose试图处理sys.argv中传递的参数。有没有办法让鼻子忽略这些论点?
你可以用另一种方法把东西输入你的代码:
那就记住在流鼻涕之前要先设定好你的环境。
我认为这是完全可以接受的情况。为了针对不同的场景(dev、qa、prod等)运行测试,我还需要做一些类似的事情,在那里,我需要为每个环境提供正确的url和配置。
我找到的解决方案是使用nose testconfig插件(link here)。它并不完全传递命令行参数,而是创建一个包含所有参数的配置文件,然后在执行nose测试时将此配置文件作为参数传递。
配置文件的格式如下:
您可以使用以下命令读取参数:
好吧,我讨厌“你为什么要那样做?”答案和其他人一样多,但我得在这里做一个。我希望你不介意。
我认为做任何你想做的事都不在框架鼻子的范围之内。Nose用于自动化测试。如果必须传入命令行参数才能通过测试,则测试不会自动进行。现在,你可以这样做:
如果运行该命令,将得到以下输出:
(如果您想查看stdout上的内容,请记住传入-s标志)
不过,我还是建议不要这样做,因为如果可以避免的话,在自动化测试中处理全局状态通常是个坏主意。我可能要做的是调整我想测试的任何代码,以获得一个
argv
列表。然后,您可以在测试期间传入所需的任何内容,并在生产中传入sys.argv
。更新:
听起来你可能想试着写一个鼻子插件。这很容易做。Here are the latest docs.
相关问题 更多 >
编程相关推荐