In pytest, how can I figure out if a test failed? (from “request”)

ⅰ亾dé卋堺 提交于 2020-01-01 04:19:11

问题


I'm using Selenium with PYTEST to test a site. I would like to take a screenshot of the page whenever a test fails (and only when it fails).

Is there a way that I can do this? The docs are quiet when it comes to this (or I can't find it). I would assume that it would be something like

request.function.failed

and it would return a boolean or something.

This is what I wanted to do:

@pytest.fixture()
def something(request):
    if request.function.failed:
        print "I failed"

This would be added to a finalizer, of course. Can it be done? Using pytest 2.3.3

Thanks.


回答1:


It can be done, not directly though. I just added added an example to the docs. It probably makes sense to makes this easier by default, i.e. without requiring the use of a conftest.py hook. If you agree, please file an issue.




回答2:


I had to do something similar on a per-module level. After examining the existing solutions I was a little surprised by their complexity. Here's an approach I came up with to address this issue:

import pytest


@pytest.fixture(scope="module", autouse=True)
def failure_tracking_fixture(request):
    tests_failed_before_module = request.session.testsfailed
    yield
    tests_failed_during_module = request.session.testsfailed - tests_failed_before_module

It can be tweaked to do what you want by making the fixture a function-level one.

Hope this helps!



来源:https://stackoverflow.com/questions/13364868/in-pytest-how-can-i-figure-out-if-a-test-failed-from-request

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!