Python unittest不接受传递的参数

时间:2017-12-15 14:30:23

标签: python selenium parsing python-unittest

我有以下代码:

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上应用我传递的参数?我在代码中需要它作为字符串。

1 个答案:

答案 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作为单元测试提供了一些可能的解决方案。