Tutorial PyTest: Apa itu, Cara Install, Framework, Pernyataan

Apa itu PyTest?

Tes Py adalah kerangka pengujian yang memungkinkan pengguna untuk menulis kode pengujian menggunakan Python Bahasa pemrograman. Membantu Anda menulis kasus pengujian yang sederhana dan dapat diskalakan untuk basis data, API, atau UI. PyTest terutama digunakan untuk menulis pengujian untuk API. Membantu menulis pengujian mulai dari pengujian unit sederhana hingga pengujian fungsional yang kompleks.

Mengapa menggunakan PyTest?

Beberapa kelebihan pytest adalah

  • Sangat mudah untuk memulai karena sintaksnya yang sederhana dan mudah.
  • Dapat menjalankan tes secara paralel.
  • Dapat menjalankan tes tertentu atau subset tes
  • Deteksi pengujian secara otomatis
  • Lewati tes
  • Open source

Cara menginstal PyTest

Berikut ini adalah proses tentang cara menginstal PyTest:

Langkah 1) Anda dapat menginstal pytest dengan

pip install pytest==2.9.1

Setelah instalasi selesai, Anda dapat mengonfirmasinya dengan

py.test -h

Ini akan menampilkan bantuan

instal PyTest

PyTest Dasar Pertama

Sekarang, kita akan mempelajari cara menggunakan Pytest dengan contoh dasar PyTest.

Buat folder study_pytest. Kami akan membuat file pengujian kami di dalam folder ini.

Silakan navigasikan ke folder itu di baris perintah Anda.

Buat file bernama test_sample1.py di dalam folder

PyTest Dasar Pertama

Tambahkan kode di bawah ini ke dalamnya dan simpan

import pytest
def test_file1_method1():
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2():
	x=5
	y=6
	assert x+1 == y,"test failed" 

Jalankan pengujian menggunakan perintah

py.test

Anda akan mendapatkan output sebagai

test_sample1.py F.
============================================== FAILURES ========================================
____________________________________________ test_sample1 ______________________________________
    def test_file1_method1():
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed"
E       AssertionError: test failed
E       assert 5 == 6
test_sample1.py:6: AssertionError

PyTest Dasar Pertama

Di sini, di test_sample1.py F.

F mengatakan kegagalan

Titik (.) menyatakan sukses.

Di bagian kegagalan, Anda dapat melihat metode yang gagal dan garis kegagalan. Di sini x==y berarti 5==6 yang salah.

Selanjutnya dalam tutorial PyTest ini, kita akan belajar tentang pernyataan di PyTest.

Pernyataan di PyTest

Pernyataan Pytest adalah pemeriksaan yang mengembalikan status Benar atau Salah. Di dalam Python Pytest, jika suatu pernyataan gagal dalam suatu metode pengujian, maka eksekusi metode tersebut dihentikan di sana. Kode yang tersisa dalam metode pengujian tersebut tidak dijalankan, dan pernyataan Pytest akan dilanjutkan dengan metode pengujian berikutnya.

Contoh Pernyataan Pytest:

assert "hello" == "Hai" is an assertion failure.
assert 4==4 is a successful assertion
assert True is a successful assertion
assert False is an assertion failure.

Mempertimbangkan

assert x == y,"test failed because x=" + str(x) + " y=" + str(y)

Tempatkan kode ini di test_file1_method1() alih-alih pernyataan

assert x == y,"test failed"

Menjalankan tes akan memberikan kegagalan sebagai AssertionError: pengujian gagal x=5 y=6

Bagaimana PyTest Mengidentifikasi File Pengujian dan Metode Pengujian

Secara default, pytest hanya mengidentifikasi nama file yang dimulai dengan uji_ atau diakhiri dengan _uji sebagai file pengujian. Kita dapat secara eksplisit menyebutkan nama file lainnya (dijelaskan nanti). Pytest mengharuskan nama metode pengujian dimulai dengan "tes.” Semua nama metode lainnya akan diabaikan meskipun kami secara eksplisit meminta untuk menjalankan metode tersebut.

Lihat beberapa contoh nama file pytest yang valid dan tidak valid

test_login.py - valid
login_test.py - valid
testlogin.py -invalid
logintest.py -invalid

Catatan: Ya, kami dapat secara eksplisit meminta pytest untuk memilih testlogin.py dan logintest.py

Lihat beberapa contoh metode pengujian pytest yang valid dan tidak valid

def test_file1_method1(): - valid
def testfile1_method1(): - valid
def file1_method1(): - invalid	

Catatan: Meskipun kami secara eksplisit menyebutkan file1_method1() pytest tidak akan menjalankan metode ini.

Jalankan Beberapa Tes Dari File Tertentu dan Banyak File

Saat ini, di dalam folder study_pytest, kami memiliki file test_sample1.py. Misalkan kita memiliki banyak file, misalnya test_sample2.py, test_sample3.py. Untuk menjalankan semua tes dari semua file di folder dan subfolder kita hanya perlu menjalankan perintah pytest.

py.test

Ini akan menjalankan semua nama file yang dimulai dengan test_ dan nama file yang diakhiri dengan _test di folder itu dan subfolder di bawah folder itu.

Untuk menjalankan pengujian hanya dari file tertentu, kita dapat menggunakan py.test

py.test test_sample1.py

Jalankan subset Keseluruhan Tes dengan PyTest

Terkadang kita tidak ingin menjalankan seluruh rangkaian pengujian. Pytest memungkinkan kita menjalankan tes tertentu. Kita bisa melakukannya dengan 2 cara

  • Pengelompokan nama pengujian berdasarkan pencocokan substring
  • Pengelompokan tes berdasarkan penanda

Kami sudah memiliki test_sample1.py. Buat file test_sample2.py dan tambahkan kode di bawah ini ke dalamnya

def test_file2_method1():
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)
def test_file2_method2():
	x=5
	y=6
	assert x+1 == y,"test failed"

Jadi kita punya saat ini

• test_sample1.py
• test_file1_method1()
• test_file1_method2()
• test_sample2.py
• test_file2_method1()
• test_file2_method2()

Opsi 1) Jalankan pengujian dengan pencocokan substring

Di sini untuk menjalankan semua tes yang memiliki metode1 dalam namanya, kita harus menjalankannya

py.test -k method1 -v
-k <expression> is used to represent the substring to match
-v increases the verbosity

Jadi menjalankan py.test -k method1 -v akan memberi Anda hasil berikut

test_sample2.py::test_file2_method1 FAILED
test_sample1.py::test_file1_method1 FAILED

============================================== FAILURES ==============================================
_________________________________________ test_file2_method1 _________________________________________
    def test_file2_method1():
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)
E       AssertionError: test failed because x=5 y=6
E       assert 5 == 6
test_sample2.py:5: AssertionError

_________________________________________ test_file1_method1 _________________________________________
    @pytest.mark.only
    def test_file1_method1():
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)
E       AssertionError: test failed because x=5 y=6
E       assert 5 == 6
test_sample1.py:8: AssertionError

================================= 2 tests deselected by '-kmethod1' ==================================
=============================== 2 failed, 2 deselected in 0.02 seconds ===============================

Di sini Anda dapat melihat menjelang akhir 2 tes tidak dipilih oleh '-kmethod1' yaitu test_file1_method2 dan test_file2_method2

Coba jalankan dengan berbagai kombinasi seperti: -

py.test -k method -v - will run all the four methods
py.test -k methods -v – will not run any test as there is no test name matches the substring 'methods'

Opsi 2) Jalankan pengujian berdasarkan penanda

Pytest memungkinkan kita menyetel berbagai atribut untuk metode pengujian menggunakan penanda pytest, @pytest.mark . Untuk menggunakan marker pada file pengujian, kita perlu mengimpor pytest pada file pengujian.

Di sini kita akan menerapkan nama penanda yang berbeda untuk menguji metode dan menjalankan pengujian spesifik berdasarkan nama penanda. Kita dapat menentukan penanda pada setiap nama tes dengan menggunakan

@pytest.mark.<name>.			

Kami mendefinisikan penanda set1 dan set2 pada metode pengujian, dan kami akan menjalankan pengujian menggunakan nama penanda. Perbarui file pengujian dengan kode berikut

tes_sample1.py

import pytest
@pytest.mark.set1
def test_file1_method1():
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)

@pytest.mark.set2
def test_file1_method2():
	x=5
	y=6
	assert x+1 == y,"test failed"

tes_sample2.py

import pytest
@pytest.mark.set1
def test_file2_method1():
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)

@pytest.mark.set1
def test_file2_method2():
	x=5
	y=6
	assert x+1 == y,"test failed"

Kita dapat menjalankan tes yang ditandai dengan

py.test -m <name>
-m <name> mentions the marker name

Jalankan py.test -m set1. Ini akan menjalankan metode test_file1_method1, test_file2_method1, test_file2_method2.

Menjalankan py.test -m set2 akan menjalankan test_file1_method2.

Jalankan Tes secara Paralel dengan Pytest

Biasanya, rangkaian pengujian akan memiliki banyak file pengujian dan ratusan metode pengujian yang memerlukan banyak waktu untuk dijalankan. Pytest memungkinkan kita menjalankan pengujian secara paralel.

Untuk itu kita perlu menginstall pytest-xdist terlebih dahulu dengan cara running

pip install pytest-xdist

Jalankan Tes secara Paralel dengan Pytest

Anda dapat menjalankan pengujian sekarang

py.test -n 4

-N menjalankan pengujian dengan menggunakan banyak pekerja. Pada perintah di atas, akan ada 4 pekerja yang menjalankan pengujian.

Perlengkapan Pytest

Perlengkapan digunakan ketika kita ingin menjalankan beberapa kode sebelum setiap metode pengujian. Jadi, alih-alih mengulangi kode yang sama di setiap pengujian, kami mendefinisikan perlengkapan. Biasanya, perlengkapan digunakan untuk menginisialisasi koneksi database, melewatkan basis, dll

Suatu metode ditandai sebagai perlengkapan Pytest dengan menandai dengan

@pytest.fixture

Metode pengujian dapat menggunakan perlengkapan Pytest dengan menyebutkan perlengkapan tersebut sebagai parameter masukan.

Buat file baru test_basic_fixture.py dengan kode berikut

import pytest
@pytest.fixture
def supply_AA_BB_CC():
	aa=25
	bb =35
	cc=45
	return [aa,bb,cc]

def test_comparewithAA(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[0]==zz,"aa and zz comparison failed"

def test_comparewithBB(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[1]==zz,"bb and zz comparison failed"

def test_comparewithCC(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[2]==zz,"cc and zz comparison failed"

Sini

  • Kami memiliki perlengkapan bernama supply_AA_BB_CC. Metode ini akan mengembalikan daftar 3 nilai.
  • Kami memiliki 3 metode pengujian yang membandingkan masing-masing nilai.

Masing-masing fungsi pengujian memiliki argumen masukan yang namanya cocok dengan perlengkapan yang tersedia. Pytest kemudian memanggil metode perlengkapan yang sesuai dan nilai yang dikembalikan akan disimpan dalam argumen input, berikut daftarnya [25,35,45]. Sekarang item daftar digunakan dalam metode pengujian untuk perbandingan.

Sekarang jalankan tes dan lihat hasilnya

 py.test test_basic_fixture
test_basic_fixture.py::test_comparewithAA FAILED                                                                                                                                                                                       
test_basic_fixture.py::test_comparewithBB PASSED                                                                                                                                                                                       
test_basic_fixture.py::test_comparewithCC FAILED
                                                                                                                                                                                       
============================================== FAILURES ==============================================
_________________________________________ test_comparewithAA _________________________________________
supply_AA_BB_CC = [25, 35, 45]
    def test_comparewithAA(supply_AA_BB_CC):
    	zz=35
>   	assert supply_AA_BB_CC[0]==zz,"aa and zz comparison failed"
E    AssertionError: aa and zz comparison failed
E    assert 25 == 35
test_basic_fixture.py:10: AssertionError

_________________________________________ test_comparewithCC _________________________________________
supply_AA_BB_CC = [25, 35, 45]
    def test_comparewithCC(supply_AA_BB_CC):
    	zz=35
>   	assert supply_AA_BB_CC[2]==zz,"cc and zz comparison failed"
E    AssertionError: cc and zz comparison failed
E    assert 45 == 35
test_basic_fixture.py:16: AssertionError
================================= 2 failed, 1 passed in 0.05 seconds =================================

Tes test_comparewithBB dilewati sejak zz=BB=35, dan 2 tes sisanya gagal.

Metode perlengkapan hanya memiliki cakupan dalam file pengujian yang ditentukan. Jika kami mencoba mengakses perlengkapan di beberapa file pengujian lain, kami akan mendapatkan pesan kesalahan yang mengatakan perlengkapan 'supply_AA_BB_CC' tidak ditemukan untuk metode pengujian di file lain.

Untuk menggunakan perlengkapan yang sama terhadap beberapa file pengujian, kami akan membuat metode perlengkapan dalam file bernama conftest.py.

Mari kita lihat contoh PyTest di bawah ini. Buat 3 file conftest.py, test_basic_fixture.py, test_basic_fixture2.py dengan kode berikut

konflik.py

import pytest
@pytest.fixture
def supply_AA_BB_CC():
	aa=25
	bb =35
	cc=45
	return [aa,bb,cc]

tes_basic_fixture.py

import pytest
def test_comparewithAA(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[0]==zz,"aa and zz comparison failed"

def test_comparewithBB(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[1]==zz,"bb and zz comparison failed"

def test_comparewithCC(supply_AA_BB_CC):
	zz=35
	assert supply_AA_BB_CC[2]==zz,"cc and zz comparison failed"

tes_basic_fixture2.py

import pytest
def test_comparewithAA_file2(supply_AA_BB_CC):
	zz=25
	assert supply_AA_BB_CC[0]==zz,"aa and zz comparison failed"

def test_comparewithBB_file2(supply_AA_BB_CC):
	zz=25
	assert supply_AA_BB_CC[1]==zz,"bb and zz comparison failed"

def test_comparewithCC_file2(supply_AA_BB_CC):
	zz=25
	assert supply_AA_BB_CC[2]==zz,"cc and zz comparison failed"

pytest akan mencari perlengkapannya di file test terlebih dahulu dan jika tidak ditemukan akan mencari di conftest.py

Jalankan pengujian dengan py.test -k test_comparewith -v untuk mendapatkan hasil seperti di bawah ini

test_basic_fixture.py::test_comparewithAA FAILED  
test_basic_fixture.py::test_comparewithBB PASSED 
test_basic_fixture.py::test_comparewithCC FAILED 
test_basic_fixture2.py::test_comparewithAA_file2 PASSED 
test_basic_fixture2.py::test_comparewithBB_file2 FAILED 
test_basic_fixture2.py::test_comparewithCC_file2 FAILED

Uji Parameterisasi Pytest

Tujuan membuat parameter pengujian adalah menjalankan pengujian terhadap beberapa rangkaian argumen. Kita dapat melakukannya dengan @pytest.mark.parametrize.

Kita akan melihatnya dengan contoh PyTest di bawah ini. Di sini kita akan meneruskan 3 argumen ke metode pengujian. Metode pengujian ini akan menambahkan 2 argumen pertama dan membandingkannya dengan argumen ke-3.

Buat file pengujian test_addition.py dengan kode di bawah ini

import pytest
@pytest.mark.parametrize("input1, input2, output",[(5,5,10),(3,5,12)])
def test_add(input1, input2, output):
	assert input1+input2 == output,"failed"

Di sini metode pengujian menerima 3 argumen: input1, input2, output. Metode ini menambahkan input1 dan input2 dan membandingkannya dengan output.

Mari kita jalankan pengujian dengan py.test -k test_add -v dan lihat hasilnya

test_addition.py::test_add[5-5-10] PASSED                                                                                                                                                                                              
test_addition.py::test_add[3-5-12] FAILED                                                                                                                                                                                              
============================================== FAILURES ==============================================
__________________________________________ test_add[3-5-12] __________________________________________
input1 = 3, input2 = 5, output = 12
    @pytest.mark.parametrize("input1, input2, output",[(5,5,10),(3,5,12)])
    def test_add(input1, input2, output):
>   	assert input1+input2 == output,"failed"
E    AssertionError: failed
E    assert (3 + 5) == 12
test_addition.py:5: AssertionError

Anda dapat melihat pengujian dijalankan 2 kali – satu pemeriksaan 5+5 ==10 dan pemeriksaan lainnya 3+5 ==12

test_addition.py::test_add[5-5-10] LULUS

test_addition.py::test_add[3-5-12] GAGAL

Pytest Xfail / Lewati Tes

Akan ada beberapa situasi di mana kita tidak ingin menjalankan tes, atau a Kasus cobaan tidak relevan untuk waktu tertentu. Dalam situasi tersebut, kami memiliki opsi untuk Xgagal dalam pengujian atau melewatkan pengujian

Tes xfailed akan dijalankan, tetapi tidak akan dihitung sebagai bagian tes yang gagal atau lulus. Tidak akan ada jejak balik yang ditampilkan jika pengujian tersebut gagal. Kita dapat xgagal dalam pengujian menggunakan

@pytest.mark.xgagal.

Melewatkan pengujian berarti pengujian tidak akan dijalankan. Kita dapat melewati tes menggunakan

@pytest.mark.skip.

Edit test_addition.py dengan kode di bawah ini

import pytest
@pytest.mark.skip
def test_add_1():
	assert 100+200 == 400,"failed"

@pytest.mark.skip
def test_add_2():
	assert 100+200 == 300,"failed"

@pytest.mark.xfail
def test_add_3():
	assert 15+13 == 28,"failed"

@pytest.mark.xfail
def test_add_4():
	assert 15+13 == 100,"failed"

def test_add_5():
	assert 3+2 == 5,"failed"

def test_add_6():
	assert 3+2 == 6,"failed"

Sini

  • test_add_1 dan test_add_2 dilewati dan tidak akan dieksekusi.
  • test_add_3 dan test_add_4 xgagal. Pengujian ini akan dijalankan dan akan menjadi bagian dari pengujian xfailed(saat pengujian gagal) atau xpassed(saat lulus pengujian). Tidak akan ada jejak balik atas kegagalan.
  • test_add_5 dan test_add_6 akan dieksekusi dan test_add_6 akan melaporkan kegagalan dengan traceback saat test_add_5 lolos

Jalankan pengujian dengan py.test test_addition.py -v dan lihat hasilnya

test_addition.py::test_add_1 SKIPPED
test_addition.py::test_add_2 SKIPPED
test_addition.py::test_add_3 XPASS
test_addition.py::test_add_4 xfail
test_addition.py::test_add_5 PASSED
test_addition.py::test_add_6 FAILED

============================================== FAILURES ==============================================
_____________________________________________ test_add_6 _____________________________________________
    def test_add_6():
>   	assert 3+2 == 6,"failed"
E    AssertionError: failed
E    assert (3 + 2) == 6
test_addition.py:24: AssertionError

================ 1 failed, 1 passed, 2 skipped, 1 xfailed, 1 xpassed in 0.07 seconds =================

XML Hasil

Kami dapat membuat hasil pengujian dalam format XML yang dapat kami masukkan ke server Integrasi Berkelanjutan untuk diproses lebih lanjut dan sebagainya. Hal ini dapat dilakukan dengan

py.test test_sample1.py -v –junitxml=”hasil.xml”

Hasil.xml akan mencatat hasil eksekusi tes. Temukan contoh result.xml di bawah ini

<?xml version="1.0" encoding="UTF-8"?>
<testsuite errors="0" failures="1" name="pytest" skips="0" tests="2" time="0.046">
   <testcase classname="test_sample1" file="test_sample1.py" line="3" name="test_file1_method1" time="0.001384973526">
     <failure message="AssertionError:test failed because x=5 y=6 assert 5 ==6">
    @pytest.mark.set1
    def test_file1_method1():
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed because x=" + str(x) + " y=" + str(y)
E       AssertionError: test failed because x=5 y=6
E       assert 5 == 6
         test_sample1.py:9: AssertionError
    </failure>
   </testcase>
   <testcase classname="test_sample1" file="test_sample1.py" line="10" name="test_file1_method2" time="0.000830173492432" />
</testsuite>

Dari kita dapat melihat total dua pengujian yang salah satunya gagal. Di bawah ini Anda dapat melihat detail mengenai setiap pengujian yang dijalankan di bawah menandai.

Kerangka Pytest Menguji API

Sekarang kita akan membuat kerangka pytest kecil untuk menguji API. API yang digunakan di sini adalah yang gratis https://reqres.in/. Situs web ini hanya menyediakan API yang dapat diuji. Situs web ini tidak menyimpan data kami.

Di sini kami akan menulis beberapa tes untuk

  • mencantumkan beberapa pengguna
  • masuk dengan pengguna

Buat file di bawah ini dengan kode yang diberikan

conftest.py – memiliki perlengkapan yang akan menyediakan url dasar untuk semua metode pengujian

import pytest
@pytest.fixture
def supply_url():
	return "https://reqres.in/api"

test_list_user.py – berisi metode pengujian untuk membuat daftar pengguna yang valid dan tidak valid

  • test_list_valid_user menguji pengambilan pengguna yang valid dan memverifikasi responsnya
  • test_list_invaliduser menguji pengambilan pengguna yang tidak valid dan memverifikasi responsnya
import pytest
import requests
import json
@pytest.mark.parametrize("userid, firstname",[(1,"George"),(2,"Janet")])
def test_list_valid_user(supply_url,userid,firstname):
	url = supply_url + "/users/" + str(userid)
	resp = requests.get(url)
	j = json.loads(resp.text)
	assert resp.status_code == 200, resp.text
	assert j['data']['id'] == userid, resp.text
	assert j['data']['first_name'] == firstname, resp.text

def test_list_invaliduser(supply_url):
	url = supply_url + "/users/50"
	resp = requests.get(url)
	assert resp.status_code == 404, resp.text

test_login_user.py – berisi metode pengujian untuk menguji fungsionalitas login.

  • test_login_valid menguji validitas upaya login dengan email dan kata sandi
  • test_login_no_password menguji upaya login yang tidak valid tanpa memberikan kata sandi
  • test_login_no_email menguji upaya login yang tidak valid tanpa meneruskan email.
import pytest
import requests
import json
def test_login_valid(supply_url):
	url = supply_url + "/login/" 
	data = {'email':'test@test.com','password':'something'}
	resp = requests.post(url, data=data)
	j = json.loads(resp.text)
	assert resp.status_code == 200, resp.text
	assert j['token'] == "QpwL5tke4Pnpja7X", resp.text

def test_login_no_password(supply_url):
	url = supply_url + "/login/" 
	data = {'email':'test@test.com'}
	resp = requests.post(url, data=data)
	j = json.loads(resp.text)
	assert resp.status_code == 400, resp.text
	assert j['error'] == "Missing password", resp.text

def test_login_no_email(supply_url):
	url = supply_url + "/login/" 
	data = {}
	resp = requests.post(url, data=data)
	j = json.loads(resp.text)
	assert resp.status_code == 400, resp.text
	assert j['error'] == "Missing email or username", resp.text

Jalankan pengujian menggunakan py.test -v

Lihat hasilnya sebagai

test_list_user.py::test_list_valid_user[1-George] PASSED                                                                                                                                                                               
test_list_user.py::test_list_valid_user[2-Janet] PASSED                                                                                                                                                                                
test_list_user.py::test_list_invaliduser PASSED                                                                                                                                                                                        
test_login_user.py::test_login_valid PASSED                                                                                                                                                                                            
test_login_user.py::test_login_no_password PASSED                                                                                                                                                                                      
test_login_user.py::test_login_no_email PASSED

Perbarui pengujian dan coba berbagai keluaran

Kesimpulan

Dalam tutorial PyTest ini, kami membahasnya

  • Instal pytest menggunakan pemasangan pip tes py=2.9.1
  • Program pytest sederhana dan jalankan dengan perintah py.test.
  • Pernyataan pernyataan, tegaskan x==y, akan menghasilkan Benar atau Salah.
  • Bagaimana pytest mengidentifikasi file dan metode pengujian.
  • Uji file dimulai dengan uji_ atau diakhiri dengan _uji
  • Metode pengujian dimulai dengan uji
  • Perintah py.test akan menjalankan semua file pengujian di folder dan subfolder tersebut. Untuk menjalankan file tertentu, kita bisa menggunakan perintah py.test
  • Jalankan subset metode pengujian
  • Pengelompokan nama pengujian berdasarkan substring match.py.test -k -v akan menjalankan semua tes yang ada atas namanya.
  • Jalankan pengujian dengan penanda. Tandai pengujian menggunakan @pytest.mark. dan jalankan tes menggunakan pytest -m untuk menjalankan tes yang ditandai sebagai .
  • Jalankan tes secara paralel
  • Instal pytest-xdist menggunakan pip install pytest-xdist
  • Jalankan pengujian menggunakan py.test -n NUM dengan NUM adalah jumlah pekerja
  • Membuat metode perlengkapan untuk menjalankan kode sebelum setiap pengujian dengan menandai metode tersebut dengan @pytest.fixture
  • Ruang lingkup metode perlengkapan ada di dalam file yang ditentukan.
  • Metode perlengkapan dapat diakses di beberapa file pengujian dengan mendefinisikannya di file conftest.py.
  • Metode pengujian dapat mengakses perlengkapan Pytest dengan menggunakannya sebagai argumen masukan.
  • Pengujian parameterisasi untuk menjalankannya terhadap beberapa set input.
    @pytest.mark.parametrize(“masukan1, masukan2, keluaran”,[(5,5,10),(3,5,12)])
    def tes_tambahkan(masukan1, masukan2, keluaran):
    tegaskan input1+input2 == output,”gagal”
    akan menjalankan tes dengan input (5,5,10) dan (3,5,12)
  • Lewati/xfail pengujian menggunakan @pytets.mark.skip dan @pytest.mark.xfail
  • Buat hasil pengujian dalam format XML yang mencakup detail pengujian yang dijalankan menggunakan py.test test_sample1.py -v –junitxml=”result.xml”
  • Contoh kerangka kerja pytest untuk menguji API