将参数传递给nose.runmodule()



我从unittest切换到nose,以便能够指定并发处理和xunit报告生成。我的python文件包含几个测试函数和一个测试函数在测试期间调用的非测试函数。我知道测试应该自动化到在测试时不需要传入参数的程度。但是,我希望用户能够更改默认值,如果他愿意的话。我使用argparse来解析参数。下面是测试脚本的一个示例。我没有包括原始文件中存在的其他几个测试函数。

from selenium import webdriver
from nose.tools import nottest
from nose.tools import assert_equals
import nose
import unittest
import argparse
import sys
@nottest
def open_browser():
    browser = eval('webdriver.%s()'%browserType)
    return browser
def test_google_title():
    browser = open_browser()
    browser.get("http://www.google.com")
    assert_equals("Google", browser.title)
    browser.quit()
def test_yahoo_title():
    browser = open_browser()
    browser.get("http://www.yahoo.com")
    assert_equals("Yahoo", browser.title)
    browser.quit()
if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--browser", choices=['PhantomJS', 'Chrome'],default='PhantomJS')
    args, unknown = parser.parse_known_args()
    browserType = args.browser
    try:
        sys.argv.remove('--browser')
        sys.argv.remove(args.browser)
    except ValueError:
        pass
    nose.runmodule()

我读参数。将browser设置为browserType,稍后由open_browser()使用。当我运行时,

python test.py --browser 'Chrome' -v --with-xunit

运行正常

然而,当我运行时,

python test.py --browser 'Chrome' -v --with-xunit --processes 2 --process-timeout 10

返回错误

Traceback (most recent call last):
  File "/Users/indrajeet/.virtualenv/virtualenv/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/Users/indrajeet/scripts/test.py", line 15, in test_google_title
    browser = open_browser()
  File "/Users/indrajeet/scripts/test.py", line 11, in open_browser
    browser = eval('webdriver.%s()'%browserType)
NameError: global name 'browserType' is not defined

我需要灵活地向nose传递额外的选项,如——processes,——process-timeout,而不必在解析器中指定它们。

任何想法?

nose的第二个实例(您要求nose使用两个内核运行--processes 2)不计算__main__,因此您的浏览器变量从未设置。您可以通过运行nosetests test.py来重现此错误。

如果你打算使用多处理插件,你可能需要花一些时间,找到合适的插件来正确解析你的参数,类似于这个问题:使用nose plugin传递一个布尔值给我的包

最新更新