@pytest.mark.skipif(condition): eval(condition)의 결과가 True이면 해당 테스트를 무시한다. 이 때, Evaluation은 global context에서 이루어진다. 따라서 skipif('sys.platform == "win32"')를 사용하면 해당 테스트는 win32 에서만 무시된다. 자세한 건 문서 참조.

@pytest.mark.xfail(condition, reason=None, run=True, raises=None): eval(condition) 이 True이면 해당 테스트를 무조건 실패하는 것으로 간주한다. 좀 더 나은 결과 보고를 위해 reason을 지정하면 좋고, 애초에 테스트가 실행되는 것 조차 원치 않는다면 run=False를 인자로 주면 된다. 그리고 만일 특정 예외(들)이 발생할 예정이라면 raises에 지정하면 되는데, 이렇게 한 경우 테스트가 다른 이유로 실패했을 때 진짜 테스트 실패로 보고된다. 역시 자세한건 문서 참조.

@pytest.mark.parametrize(argnames, argvalues): 테스트 함수에 차례로 다른 인자를 넣어서 실행한다. 만일 인자가 한 개이면 argvalues는 list 형태여야 하고, 인자가 여러 개 이면 argvalues는 tuple의 list 형태여야 한다. 예) parametrize('arg1', [1,2])는 해당 테스트를 arg1=1과 arg1=2로 총 두 번 실행할 것이고, parametrize('arg1,arg2', [(1,2), (2,4)])는 해당 테스트를 (arg1=1,arg2=2)와 (arg1=2,arg2=4)로 총 두 번 실행할 것이다. 자세한 건 문서를 참고.

@pytest.mark.usefixtures(fixturename1, fixturename2, ...): 해당 테스트가 지정된 모든 fixture를 필요로 함을 명시한다. 자세한 내용은 문서를 참고.

@pytest.mark.tryfirst: 해당 테스트가 최대한 먼저 실행되도록 한다.

@pytest.mark.trylast: 해당 테스트가 최대한 늦게 실행되도록 한다.

@pytest.fixture(scope='function',params=None,autouse=False,ids=None): 해당 함수를 fixture로 이용하기 위해 사용한다. scope는 ‘function’,’module’,’class’,’module’,’session’중 하나로, 이 fixture가 사용될 수 있는 범위를 지정하고, params가 존재할 경우 해당 fixture와 fixture를 이용하는 테스트들을 각 param에 대해 한 번씩 수행하게 된다. autouse는 True일 경우 모든 테스트에 이 fixture가 자동으로 적용되고, ids는.. 아래 코드를 보면 간단하게 알 수 있다. 자세한 건 pytest의 fixture문서를 참고.

#fixture1.py
import pytest
@pytest.fixture(params=[0, 1], ids=["spam", "ham"])
def a(request):
    return request.param

def test_a(a):
    pass

@pytest.fixture(params=[0, 1])
def b(request):
    return request.param

def test_b(b):
    pass
$ py.test --collect-only fixture1.py # 테스트를 수행하지 않고, 찾기만 한다.
======================= test session starts ==========================
platform linux -- Python 3.4.2 -- py-1.4.30 -- pytest-2.7.2
rootdir: /home/kcy1019/pytest-exercise, inifile:
collected 4 items
<Module 'fixture1.py'>
  <Function 'test_a[spam]'>
  <Function 'test_a[ham]'>
  <Function 'test_b[0]'>
  <Function 'test_b[1]'>

========================  in 0.00 seconds ===============================