pytest命令行参数重写

时间:2019-06-05 12:46:13

标签: python pytest argparse

如何在将pytest命令行选项添加到配置对象之前对其进行操作?

我喜欢将命令行参数从csv字符串转换为列表,以便可以对其进行参数设置并进行一些完整性检查:

#### for --webhost parameter ###
def pytest_addoption(parser):
    #parser.addoption("--webhost")
    p = argparse.ArgumentParser(description="convert webhost string to array")
    p.add_argument('--webhost', help='webhost to run tests on (default: %(default)s)', default="TEST1,TEST12,TEST4,PROD")
    args, notknownargs = p.parse_known_args(sys.argv)
    if notknownargs:
        print("pytest arguments? : {}".format(notknownargs))
    sys.argv[1:] = notknownargs

    if args.webhost and isinstance(args.webhost, str):
        args.webhost = args.webhost.split(',')
    parser.addoption("--webhost", help='webhost to run tests on (default: %(default)s)', default=args.webhost)

我的挑战是两个parser.addoption()调用, 如果我先发表评论:

pytest: error: unrecognized arguments: -webhost=TEST1

所以为了让pytest允许我取消注释该参数,但是我在最后一行得到了它:

ValueError: option names {'--webhost'} already added

没有Parser.setoption()或类似的东西可以改变现有的选项。

我的解决方法是使用两个变量,或设置一个单独的args对象。我使用from conftest import args进行导入,但这在配置之外。

0 个答案:

没有答案