我使用 pytest 的内置 hook 获取每个用例的状态做统计
通过 pycharm 执行时统计正常
但是通过 CMD 命令行执行,统计就出问题,正确用例比我总用例都多,
完全没变,只是执行了 python run.py ,和 pycharm 执行方式等于一致的,
求教大佬是什么问题?是 pytest 的版本导致,还是说装了什么插件影响的?
不懂哎
可以试着把都执行了哪些用例打出来看一下。因为你总执行用例数是 7,不太像是一个用例执行多次,建议还是打出来看一下到底都执行了什么
这是我刚打印的,就跑了一条,pycharm 执行显示成功 0,命令行执行显示通过 3 条,他会不会是吧 setup,teardown 都算上了?这段代码我抄的网上的
还在接触
打印的 test_350853 用例怎么有两个 set_up 阶段,passed 参数打印里面不含 set_up 和 tear_down 阶段,总感觉可能代码哪里写得有问题
pytest 用例执行过程都分为三段:setup、call、teardown,在代码中好像没看到统计的是哪一阶段的数量,建议是定死读取 call,这样应该才符合你的预期
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
logging.info('------------------------------------')
out = yield
report = out.get_result()
if report.when == "call":
logging.info('测试报告:%s' % report)
logging.info('步骤:%s' % report.when)
logging.info('nodeid:%s' % report.nodeid)
logging.info('description:%s' % str(item.function.__doc__))
logging.info(('运行结果: %s' % report.outcome))
if report.outcome == 'passed':
result['passed'] += 1
elif report.outcome == 'failed':
result['failed'] += 1
这是我一段 hook 代码,用来在日志里输出当前步骤和执行结果,并且在最后统计当前 pass 数和 fail 数,里面我只拿 call 的过程,应该对你有帮助
你这个是 pytest 的用来查看每个用例执行完的内置方法,然后自己统计所有用例结果状态,这个在 pytest 有另外一个内置方法专门统计,就是 pytest_terminal_summary,我现在是这个内置方法统计正确结果在命令行模式执行下统计错误
pytest_terminal_summary 这个 pytest 内置函数在 pycharm 运行 pytest 情况下,pass 用例数只会统计用例"call"阶段,在通过 cmd 命令行执行下,pass 用例数会统计"setup","call","teardown"3 个阶段,虽然不知道为什么,想要显示正确,要写成 _PASSED = (len([i for i in terminalreporter.stats.get('passed', []) if i.when == 'call']))