Penggunaan marking memudahkan kita mengatur fungsi test. Contoh sederhananya adalah skip test function dengan kondisi tertentu, versi python atau jenis OS atau bahkan memeriksa library yang dibutuhkan ada atau tidak.
Pada modul ini kita akan bahas contoh marking
- skip: fungsi test akan di skip tanpa kondisi.
- skipif: fungsi test akan di skip jika kondisi tertentu terpenuhi.
JIka ingin melihat lebih detail mengenai marking bisa lihat di marking pytest https://docs.pytest.org/en/6.2.x/mark.html
Untuk dapat menggunakan marking, library pytest harus diimport. Selain itu library pendukung sys, juga perlu diimport jika marking akan memeriksa versi python, versi OS dan memeriksa library yang dibutuhkan.
Marking ditulis persis sebelum fungsi test, dengan penulisan seperti berikut
@pytest.mark.skipif(sys.version_info >= (3,7,2), reason="Requires Python 3.7.2 or lower")
import sys
import pytest
from unittest import mock
def calculator():
x = [1, 2, 3, 4, 5]
idx = int(input("enter a value: "))
result = 100 / x[idx]
return result
class TestClass(object):
@pytest.mark.skip(reason="Skipping test index - 0")
def test_1(self):
with mock.patch('builtins.input', return_value = 0):
assert calculator() == 100
@pytest.mark.skipif(sys.version_info >= (3,7,2), reason="Requires Python 3.7.2 or lower")
def test_2(self):
with mock.patch('builtins.input', return_value = 1):
assert calculator() == 50
@pytest.mark.skipif(sys.platform == 'win32', reason="Program design for non-windows platform")
def test_3(self):
with mock.patch('builtins.input', return_value = 0):
assert calculator() == 100
def test_4(self):
req = pytest.importorskip("Django")
with mock.patch('builtins.input', return_value = 0):
assert calculator() == 100
Jika pytest kita jalankan, sesuai ekspetasi, semua fungsi test akan di skip.
PS F:\Project\learnpytest> pytest fourth.py -v
============================ test session starts ============================
platform win32 -- Python 3.8.5, pytest-6.2.4, py-1.9.0, pluggy-0.13.1 -- c:\users\rangga\anaconda3\python.exe
cachedir: .pytest_cache
rootdir: F:\Project\learnpytest, configfile: pytest.ini
plugins: dash-1.19.0
collected 4 items
fourth.py::TestClass::test_1 SKIPPED (Skipping test index - 0) [ 25%]
fourth.py::TestClass::test_2 SKIPPED (Requires Python 3.7.2 or lower) [ 50%]
fourth.py::TestClass::test_3 SKIPPED (Program design for non-windows platform) [ 75%]
fourth.py::TestClass::test_4 SKIPPED (could not import 'Django': No module named 'Django') [100%]
=========================== 4 skipped in 0.27s ===========================