Menggunakan Marking Pada Test Function

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 ===========================
Sharing is caring:

Leave a Comment