Python 传递给pytest钩子的对象错误

Python 传递给pytest钩子的对象错误,python,pytest,Python,Pytest,我刚开始处理pytest钩子,在从python代码调用pytest的情况下,我立即遇到了pytest\u runtest\u协议(item,nextitem)hook的奇怪行为。我试图从中复制代码,但在pytest\u runtest\u协议中myPlugin对象作为第一个参数传递,而不是testitem(参见屏幕截图)。 在那一行之后,我得到了异常,因为MyPlugin对象没有ihook属性 在athoner调用pytest的方法中(使用conftest.py中的钩子代码),不会出现此问题

我刚开始处理pytest钩子,在从python代码调用pytest的情况下,我立即遇到了
pytest\u runtest\u协议(item,nextitem)
hook的奇怪行为。我试图从中复制代码,但在
pytest\u runtest\u协议中
myPlugin
对象作为第一个参数传递,而不是testitem(参见屏幕截图)。

在那一行之后,我得到了异常,因为
MyPlugin
对象没有
ihook
属性

在athoner调用pytest的方法中(使用
conftest.py
中的钩子代码),不会出现此问题

Project只有两个文件。
test_main.py

def test_first():
    assert 2 + 2 == 4


def test_second():
    assert 2 + 2 == 4
胡克斯

import pytest
from _pytest.runner import runtestprotocol


class MyPlugin(object):
    def pytest_runtest_protocol(item, nextitem):
        reports = runtestprotocol(item, nextitem=nextitem)
        for report in reports:
            if report.when == 'call':
                print '\n%s --- %s' % (item.name, report.outcome)
        return True


def main():
    pytest.main(plugins=[MyPlugin()])


if __name__ == '__main__':
    main()
有可能解决这个问题吗


pytest版本:3.2.1

如果您创建一个示例,您将获得更多更好的答案。尤其要确保输入和预期的测试数据是完整的(不是伪数据),并且可以很容易地剪切和粘贴到编辑器中,以允许测试建议的解决方案。可能重复的是,我看不出与我的问题有任何关系…当
MyPlugin()时,
pytest\u runtest\u protocol
会得到什么参数是否调用.pytest\u runtest\u协议(*args)
?为了让它工作,你应该改变什么?好的,我没有意识到这些方法应该是静态的。使用
@staticmethod
装饰器,一切都很好。谢谢你的帮助。