【发布时间】:2020-08-04 13:26:42
【问题描述】:
如何将命令行选项作为变量传递给我的 pytest 非测试文件,例如数据库名称。
当我尝试时:
import sys
import getopt
"""argv = sys.argv[1:]
opts, args = getopt.getopt(argv, "e:")
for opt, arg in opts:
if opt in ['-e']:
if arg == "test1":
base_url = "url-test1.com"
db_name = "db_test1"
elif arg == 'test2':
base_url = "url-test2.com"
db_name = "db_test2"
elif arg == 'test3':
base_url = "url-test3.com"
db_name = "db_test3"
return base_url
然后运行
python -m pytest -e test1
看起来 pytest 无法获取 -e 标志
错误:用法:main.py [options] [file_or_dir] [file_or_dir] [...]
main.py:错误:无法识别的参数:-e
inifile:无
我也尝试 pytest addoption 并将变量传递给测试文件工作正常,但是如何将 cmnd 行选项作为值传递给非测试文件?
def pytest_addoption(parser):
parser.addoption("--url", action="store", default="url-test1.com")
parser.addoption("--db", action="store", default="test1")
@pytest.fixture()
def url(request):
return request.config.getoption("--url")
def db_name(request):
return request.config.getoption("--db") #I want to pass this value to mysql.connector as database=db_name
编辑 1
所以我的 db_connect.py 就这样了
import mysql.connector
import argparse
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--db', required=True, type=str, help="Your database name")
return parser.parse_args()
def main():
args = parse_args()
db = args.db
return db
mydb = mysql.connector.connect(
user='username',
password='password',
host='host',
database=main()
)
if __name__ == '__main__':
main()
当我尝试运行时
py.test --db test1
我收到了这个错误
ERROR: usage: py.test [options] [file_or_dir] [file_or_dir] [...]
py.test: error: unrecognized arguments: --db
inifile: None
但是当我跑步时
py.test
我明白了
usage: py.test [-h] --db DB
py.test: error: the following arguments are required: --db
参数是必需的,但当我通过时它无法识别。如何处理?
【问题讨论】:
标签: python python-3.x pytest