From 9e57954b0388d2830dee1e560347af581b75534a Mon Sep 17 00:00:00 2001 From: Michael Aquilina Date: Thu, 1 Oct 2015 22:35:38 +0100 Subject: [PATCH] First argument in pytest.mark.skip is a reason --- _pytest/skipping.py | 25 +++++++++++++++++-------- testing/test_skipping.py | 13 +++++++++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/_pytest/skipping.py b/_pytest/skipping.py index 53c7311e3..491dd66a9 100644 --- a/_pytest/skipping.py +++ b/_pytest/skipping.py @@ -148,15 +148,24 @@ class MarkEvaluator(object): @pytest.hookimpl(tryfirst=True) def pytest_runtest_setup(item): - eval_skipif = MarkEvaluator(item, 'skipif') + # Check if skip or skipif are specified as pytest marks - if eval_skipif.istrue(): - item._evalskip = eval_skipif - pytest.skip(eval_skipif.getexplanation()) - elif isinstance(item.keywords.get('skip'), MarkInfo): - eval_skip = MarkEvaluator(item, 'skip') - item._evalskip = eval_skip - pytest.skip(eval_skip.getexplanation()) + skipif_info = item.keywords.get('skipif') + if isinstance(skipif_info, MarkInfo): + eval_skipif = MarkEvaluator(item, 'skipif') + if eval_skipif.istrue(): + item._evalskip = eval_skipif + pytest.skip(eval_skipif.getexplanation()) + + skip_info = item.keywords.get('skip') + if isinstance(skip_info, MarkInfo): + item._evalskip = True + if 'reason' in skip_info.kwargs: + pytest.skip(skip_info.kwargs['reason']) + elif skip_info.args: + pytest.skip(skip_info.args[0]) + else: + pytest.skip() item._evalxfail = MarkEvaluator(item, 'xfail') check_xfail_no_run(item) diff --git a/testing/test_skipping.py b/testing/test_skipping.py index c7a0516b4..05e0683c5 100644 --- a/testing/test_skipping.py +++ b/testing/test_skipping.py @@ -409,6 +409,19 @@ class TestSkip(object): rec = testdir.inline_run() rec.assertoutcome(skipped=1) + def test_arg_as_reason(self, testdir): + testdir.makepyfile(""" + import pytest + @pytest.mark.skip('testing stuff') + def test_bar(): + pass + """) + result = testdir.runpytest('-rs') + result.stdout.fnmatch_lines([ + "*testing stuff*", + "*1 skipped*", + ]) + def test_skip_no_reason(self, testdir): testdir.makepyfile(""" import pytest