我有以下代码:
class WebuiSeleniumTest(unittest.TestCase):
def setup_parser(self):
parser = argparse.ArgumentParser(description='Automation Testing!')
parser.add_argument('-p', '--platform', help='Platform for desired_caps', default='Mac OS X 10.9')
parser.add_argument('-b', '--browser-name', help='Browser Name for desired_caps', default='chrome')
parser.add_argument('-v', '--version', default='')
return parser.parse_args()
def test_parser(self):
args = self.setup_parser()
print args
if __name__ == "__main__":
unittest.main()
当我尝试使用命令“python myfile.py -b firefox”在终端中运行它时,我得到AttributeError: 'module' object has no attribute 'firefox'
并生成帮助输出。
当我隔离它并在没有if __name__ == "__main__"
的情况下运行它时,它可以正常工作。为什么它试图在unittest上应用我传递的参数?我在代码中需要它作为字符串。
答案 0 :(得分:1)
使用python myfile.py -b firefox
调用脚本确实会进行单元测试,而不是您的参数解析器。
Unittest尝试解析您提供的参数,例如如果你像这样调用你的脚本:
python myfile.py --help
您会看到有效的选项:
Usage: myfile.py [options] [test] [...]
Options:
-h, --help Show this message
-v, --verbose Verbose output
-q, --quiet Minimal output
-f, --failfast Stop on first failure
-c, --catch Catch control-C and display results
-b, --buffer Buffer stdout and stderr during test runs
Examples:
parse.py - run default set of tests
parse.py MyTestSuite - run suite 'MyTestSuite'
parse.py MyTestCase.testSomething - run MyTestCase.testSomething
parse.py MyTestCase - run all 'test*' test methods
in MyTestCase
查看帮助输出-b
会缓冲(我猜压缩吗?)stdout / stderr。参数firefox
被视为要在模块中运行的测试的名称。并且没有函数method
,它会输出此错误:
AttributeError: 'module' object has no attribute 'firefox'
现在,您可能想要做的是调用test_parser
,如果您使用python myfile.py WebuiSeleniumTest.test_parser
执行此操作,则无法传递任何其他参数。这可能是你最后的问题。有this question为测试argparse作为单元测试提供了一些可能的解决方案。