[英]Passing Arguments to pytest from setup.py
I have tests that require arguments, in my case these are credentials to some service:我有需要 arguments 的测试,在我的情况下,这些是某些服务的凭据:
example_test.py: example_test.py:
@pytest.fixture()
def artuser(pytestconfig):
return pytestconfig.getoption("artuser")
@pytest.fixture()
def artpass(pytestconfig):
return pytestconfig.getoption("artpass")
def test_nuget_get_nuget(artuser, artpass):
assert artuser == "someuser"
assert artpass == "somepassword"
conftest.py: conftest.py:
import pytest
def pytest_addoption(parser):
parser.addoption("--artuser", action="store")
parser.addoption("--artpass", action="store")
It works if I run:如果我运行它会起作用:
pytest --artuser someuser --artpass somepassword
. pytest --artuser someuser --artpass somepassword
。
However, it fails if run:但是,如果运行它会失败:
python setup.py test --artuser someuser --artpass somepassword
with an an error error: option --artuser not recognized
出现错误
error: option --artuser not recognized
I then tried to integrate some code from this question, just to see if the argument gets passed along, so I have something like this in my setup.py:然后我尝试从这个问题中整合一些代码,只是为了看看参数是否被传递,所以我的 setup.py 中有这样的东西:
from setuptools import setup, find_packages
from os import path
import argparse
import sys
argparser = argparse.ArgumentParser(add_help=False)
argparser.add_argument('--artuser', help='required artuser argument', required=True)
args, unknown = argparser.parse_known_args()
sys.argv = [sys.argv[0]] + unknown
print(args)
setup(
name='myapp',
...
But when I run the tests, I get E AssertionError: assert None == 'someuser'
meaning the argument wasn't passed along.但是当我运行测试时,我得到
E AssertionError: assert None == 'someuser'
表示参数没有传递。
I was able to do it with the help of this answer .我能够在这个答案的帮助下做到这一点。
setup.py:设置.py:
from setuptools import setup, find_packages
from setuptools.command.test import test as TestCommand
import sys
...
class PyTest(TestCommand):
user_options = [('artuser=', 'a', "Artifactory user"),
('artpass=', 'b', "Artifactory password")]
def initialize_options(self):
TestCommand.initialize_options(self)
self.artpass = None
self.artuser = None
def finalize_options(self):
TestCommand.finalize_options(self)
self.test_args = []
self.test_suite = True
def run_tests(self):
import pytest
errno = pytest.main(
["--artuser", self.artuser, "--artpass", self.artpass])
sys.exit(errno)
setup(
cmdclass={
'test': PyTest,
},
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.