如何在将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
进行导入,但这在配置之外。