英文:
TypeError: parametrize() got multiple values for argument 'indirect'
问题
我正在尝试通过从外部函数获取值来对我的 pytest 进行参数化,我的方法如下:
import pytest
from Utilities.MiscUtils import generate_random_email_for_registration
from Utilities.TextFileUtils import read_text_file
generate_random_email_for_registration()
这里的 `generate_random_email_for_registration()` 将生成随机的电子邮件地址并将其存储到文本文件中。
而我的 pytest 标记如下:
@pytest.mark.parametrize("email", "password", [(read_text_file("email"), "Test@12345")], indirect=["email"])
`(read_text_file("email")` 这个方法将从 email.txt 文件中获取值。
现在在执行时,我遇到以下错误:
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_hooks.py:265: in call
return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_manager.py:80: in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/_pytest/python.py:272: in pytest_pycollect_makeitem
return list(collector._genfunctions(name, obj))
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/_pytest/python.py:499: in _genfunctions
self.ihook.pytest_generate_tests.call_extra(methods, dict(metafunc=metafunc))
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_hooks.py:292: in call_extra
return self(**kwargs)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_hooks.py:265: in call
return self._hookexec(this.name, self.get_hookimpls(), kwargs, firstresult)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_manager.py:80: in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/_pytest/python.py:151: in pytest_generate_tests
metafunc.parametrize(*marker.args, **marker.kwargs, _param_mark=marker)
E TypeError: parametrize() got multiple values for argument 'indirect'
我需要知道我在哪里出错,因为这也可以不使用 pytest.parametrize 来完成,但我正在使用良好的实践方式。
英文:
I am trying to parametrize my pytest, by getting value from external function, my method is like that:
import pytest
from Utilities.MiscUtils import generate_random_email_for_registration
from Utilities.TextFileUtils import read_text_file
generate_random_email_for_registration()
Here generate_random_email_for_registration()
will be generating random email address and storing it to Text file.
and my pytest mark goes like that:
@pytest.mark.parametrize("email", "password", [(read_text_file("email"), "Test@12345")], indirect=["email"])
(read_text_file("email")
as this method, will be getting my value from email.txt file.
now while I execute , I am getting following error:
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_hooks.py:265: in __call__
return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_manager.py:80: in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/_pytest/python.py:272: in pytest_pycollect_makeitem
return list(collector._genfunctions(name, obj))
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/_pytest/python.py:499: in _genfunctions
self.ihook.pytest_generate_tests.call_extra(methods, dict(metafunc=metafunc))
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_hooks.py:292: in call_extra
return self(**kwargs)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_hooks.py:265: in __call__
return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/pluggy/_manager.py:80: in _hookexec
return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/Users/tp/AndroidPythonAppium/lib/python3.9/site-packages/_pytest/python.py:151: in pytest_generate_tests
metafunc.parametrize(*marker.args, **marker.kwargs, _param_mark=marker)
E TypeError: parametrize() got multiple values for argument 'indirect'
I need to know, where I am making mistake, as this can be done by not using pytest.parametrize as well, but I am using good practice here.
答案1
得分: 1
通过删除间接参数的位置参数,并将其仅作为关键字参数传递应该解决这个问题:
@pytest.mark.parametrize("email, password", [(read_text_file("email"), "Test@12345")], indirect={"email"})
英文:
Removing the positional argument for indirect and passing it as a keyword argument only should fix this:
@pytest.mark.parametrize("email, password", [(read_text_file("email"), "Test@12345")], indirect={"email"})
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论