Python &引用;ValueError:已添加选项名称{';--testrail';}”;使用pytest-alure插件启动自动测试时

Python &引用;ValueError:已添加选项名称{';--testrail';}”;使用pytest-alure插件启动自动测试时,python,integration,pytest,testrail,Python,Integration,Pytest,Testrail,正在尝试设置pytest testrail插件。当我使用--testrail--tr config=path/to/config.cfg param启动测试运行时,它返回错误值error:option names{'--testrail'}已经添加 我正在使用appium+pytest+allure。它对我来说很好,但现在我尝试添加testrail集成。我正确设置了pytest testrail插件(使用我的自动测试列表在testrail中成功创建了测试运行),但当我将pytest_testra

正在尝试设置pytest testrail插件。当我使用--testrail--tr config=path/to/config.cfg param启动测试运行时,它返回错误值error:option names{'--testrail'}已经添加

我正在使用appium+pytest+allure。它对我来说很好,但现在我尝试添加testrail集成。我正确设置了pytest testrail插件(使用我的自动测试列表在testrail中成功创建了测试运行),但当我将pytest_testrail.conftest import*添加到我自己的conftest文件时,返回错误。 我多次尝试重新安装pytest和pytest testrail插件,但都没有帮助

确认测试文件:

import pytest
from appium import webdriver
from pytest_testrail.conftest import *
import sys
import os.path

sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, os.pardir))
PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p)
)

@pytest.fixture
def driver_setup(request):
    desired_caps = {
        //desired caps for appium driver
    }

    url = 'http://localhost:4723/wd/hub'

    request.instance.driver = webdriver.Remote(url, desired_caps)


    def teardown():
        request.instance.driver.quit()
    request.addfinalizer(teardown)
完整错误描述:

Traceback (most recent call last):
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 415, in _importconftest
    return self._conftestpath2mod[conftestpath]
KeyError: local('/Users/anton/autotests/conftest.py')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Applications/PyCharm CE.app/Contents/helpers/pycharm/_jb_pytest_runner.py", line 31, in <module>
    pytest.main(args, plugins_to_load)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 55, in main
    config = _prepareconfig(args, plugins)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 200, in _prepareconfig
    pluginmanager=pluginmanager, args=args
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/hooks.py", line 289, in _call_
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/manager.py", line 87, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/manager.py", line 81, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 203, in _multicall
    gen.send(outcome)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/helpconfig.py", line 89, in pytest_cmdline_parse
    config = outcome.get_result()
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 661, in pytest_cmdline_parse
    self.parse(args)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 869, in parse
    self._preparse(args, addopts=addopts)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 825, in _preparse
    early_config=self, args=args, parser=self._parser
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/hooks.py", line 289, in _call_
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/manager.py", line 87, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/manager.py", line 81, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 208, in _multicall
    return outcome.get_result()
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 724, in pytest_load_initial_conftests
    self.pluginmanager._set_initial_conftests(early_config.known_args_namespace)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 364, in _set_initial_conftests
    self._try_load_conftest(anchor)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 370, in _try_load_conftest
    self._getconftestmodules(anchor)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 399, in _getconftestmodules
    mod = self._importconftest(conftestpath.realpath())
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 449, in _importconftest
    self.consider_conftest(mod)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 502, in consider_conftest
    self.register(conftestmodule, name=conftestmodule.__file__)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/__init__.py", line 302, in register
    ret = super().register(plugin, name)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/manager.py", line 121, in register
    hook._maybe_apply_history(hookimpl)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/hooks.py", line 336, in _maybe_apply_history
    res = self._hookexec(self, [method], kwargs)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/manager.py", line 87, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/manager.py", line 81, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 208, in _multicall
    return outcome.get_result()
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/pytest_testrail/conftest.py", line 20, in pytest_addoption
    help='Create and update testruns with TestRail')
  File "/Users/anton/MercuryTest/mercury_env/lib/python3.6/site-packages/_pytest/config/argparsing.py", line 304, in addoption
    raise ValueError("option names %s already added" % conflict)
ValueError: option names {'--testrail'} already added

它可能与此处描述的问题重复

如果是这样,您不需要在自己的conftest中导入“pytest_testrail.conftest”


你需要在“page.do_something()”中断言一些东西来测试Rail插件知道“test_case_name”的状态

为什么要导入
pytest_testrail.conftest
?如果不导入它的工作正常,将创建testrail中的测试运行,但所有测试都未经测试。我认为这是因为pytest testrail插件代码的一部分没有启动(当插件将测试用例推送到testrail时,我在控制台中没有看到任何输出,我的testran刚刚完成,什么都没有发生,集成时没有出现一个错误),我想,导入pytest_testrail.conftest就像GitHub示例()将帮助我解决此问题如果您可以运行
pytest--testrail
而不引发错误
无法识别的参数
,您可以确保
testrail
插件正确启动。您的问题与插件无关,而与您的测试相关-显示一个未找到的测试示例,包括来自代码的测试函数签名(
def test…():…
,包括decorators)及其完整路径(
/Users/you/project/tests/test_module.py::TestCls::test_func[test_param]
等)。您所指的Github示例不是一个示例;这是插件作者用来从存储库导入代码以在本地运行测试的一种变通方法。不要用它。另外,当您不了解某些代码在做什么时,不要盲目地复制它们(例如,
sys.path.append
行)——在您的情况下,它会将
/Users/anton
目录添加到Python的模块搜索路径中。这弊大于利。谢谢你的帮助和提示。Pytest testrail插件成功创建了测试运行,我的所有自动测试都包含在testrail站点中,所以我认为插件启动正确。我在一般描述中添加了我的测试用例和所有装饰器的示例。在我的例子中,Pytes testrail不会在测试运行完成后标记所有通过/失败的案例。Allure生成包含所有已更正测试用例状态的正确报告
import pytest
import allure
from pytest_testrail.plugin import pytestrail

@pytest.mark.usefixtures('driver_setup')
@allure.epic('application name ')
class Test_app_name:

    @allure.feature('feature')
    @pytestrail.case('C850')
    @allure.title('test title')
    @allure.severity(allure.severity_level.CRITICAL)
    def test_case_name(self):
        page = pageObjectClassWithLocatorsAndActions(self.driver)
        with allure.step('step'):
            page.do_something()