PyTest Eğitimi: Nedir, Nasıl Kurulur, Çerçeve, İddialar

PyTest nedir?

PyTest kullanıcıların test kodları yazmasına olanak tanıyan bir test çerçevesidir. Python programlama dili. Veritabanları, API'ler veya kullanıcı arayüzleri için basit ve ölçeklenebilir test durumları yazmanıza yardımcı olur. PyTest esas olarak API'ler için test yazmak için kullanılır. Basit birim testlerinden karmaşık işlevsel testlere kadar testler yazmanıza yardımcı olur.

Neden PyTest'i kullanmalısınız?

Pytest'in avantajlarından bazıları şunlardır:

  • Basit ve kolay sözdizimi nedeniyle başlaması çok kolaydır.
  • Testleri paralel olarak çalıştırabilir.
  • Belirli bir testi veya testlerin bir alt kümesini çalıştırabilir
  • Testleri otomatik olarak algıla
  • Testleri atla
  • Açık kaynak

PyTest nasıl kurulur

PyTest'in nasıl kurulacağına dair süreç aşağıdadır:

) 1 Adım Pytest'i şu şekilde yükleyebilirsiniz:

pip install pytest==2.9.1

Kurulum tamamlandıktan sonra ile onaylayabilirsiniz.

py.test -h

Bu, yardımı görüntüleyecektir

PyTest'i yükle

İlk Temel PyTest

Şimdi basit bir PyTest örneği ile Pytest'in nasıl kullanılacağını öğreneceğiz.

Study_pytest adlı bir klasör oluşturun. Bu klasör içerisinde test dosyalarımızı oluşturacağız.

Lütfen komut satırınızda o klasöre gidin.

Klasörün içinde test_sample1.py adında bir dosya oluşturun

İlk Temel PyTest

İçine aşağıdaki kodu ekleyin ve kaydedin

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" 

Komutu kullanarak testi çalıştırın

py.test

Olarak çıktı alacaksınız

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

İlk Temel PyTest

Burada test_sample1.py F'de.

F başarısızlık diyor

Nokta(.) başarı diyor.

Arızalar bölümünde başarısız olan yöntem(ler)i ve arıza satırını görebilirsiniz. Burada x==y, 5==6 anlamına gelir ve bu yanlıştır.

Bu PyTest eğitiminde bir sonraki adımda PyTest'teki iddiayı öğreneceğiz.

PyTest'teki iddialar

Pytest iddiaları Doğru veya Yanlış durumunu döndüren kontrollerdir. İçinde Python Pytest, eğer bir test yönteminde bir iddia başarısız olursa, o yöntemin yürütülmesi orada durdurulur. Bu test yönteminde kalan kod yürütülmez ve Pytest iddiaları bir sonraki test yöntemiyle devam eder.

Pytest Onay örnekleri:

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.

Düşünmek

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

Bu kodu iddia yerine test_file1_method1() içine yerleştirin

assert x == y,"test failed"

Testin çalıştırılması başarısızlığı şu şekilde verecektir: AssertionError: test başarısız oldu x=5 y=6

PyTest, Test Dosyalarını ve Test Yöntemlerini Nasıl Tanımlar?

Varsayılan olarak pytest yalnızca ile başlayan dosya adlarını tanımlar. Ölçek_ veya ile biten _Ölçek test dosyaları olarak. Diğer dosya adlarını açıkça belirtebiliriz (daha sonra açıklanacaktır). Pytest, test yöntemi adlarının şununla başlamasını gerektirir: "Ölçek.” Açıkça bu yöntemleri çalıştırmayı istesek bile diğer tüm yöntem adları göz ardı edilecektir.

Geçerli ve geçersiz pytest dosya adlarının bazı örneklerine bakın

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

Not: Evet, açıkça pytest'ten testlogin.py ve logintest.py'yi seçmesini isteyebiliriz.

Geçerli ve geçersiz pytest test yöntemlerinin bazı örneklerine bakın

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

Not: File1_method1()'dan açıkça bahsetsek bile pytest bu metodu çalıştırmayacaktır.

Belirli Bir Dosyadan ve Birden Çok Dosyadan Çoklu Test Çalıştırma

Şu anda, Study_pytest klasörünün içinde test_sample1.py adlı bir dosyamız var. Diyelim ki birden fazla dosyamız var, örneğin test_sample2.py , test_sample3.py . Klasör ve alt klasörlerdeki tüm dosyalardan tüm testleri çalıştırmak için pytest komutunu çalıştırmamız yeterlidir.

py.test

Bu, o klasördeki ve o klasörün altındaki alt klasörlerdeki test_ ile başlayan tüm dosya adlarını ve _test ile biten dosya adlarını çalıştıracaktır.

Testleri yalnızca belirli bir dosyadan çalıştırmak için py.test'i kullanabiliriz.

py.test test_sample1.py

PyTest ile Tüm Testin bir alt kümesini çalıştırın

Bazen test paketinin tamamını çalıştırmak istemeyiz. Pytest belirli testleri çalıştırmamızı sağlar. Bunu 2 şekilde yapabiliriz

  • Alt dizi eşleşmesine göre test adlarının gruplandırılması
  • Testlerin belirteçlere göre gruplandırılması

Zaten test_sample1.py'ye sahibiz. Test_sample2.py adlı bir dosya oluşturun ve içine aşağıdaki kodu ekleyin.

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"

Yani şu anda elimizde

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

Seçenek 1) Testleri alt dize eşleştirmesine göre çalıştırma

Adında method1 bulunan tüm testleri çalıştırmak için burada çalıştırmamız gerekiyor.

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

Yani py.test -k method1 -v komutunu çalıştırmak size aşağıdaki sonucu verecektir

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 ===============================

Burada sonuna doğru görebilirsiniz '-kmethod2' tarafından 1 testin seçimi kaldırıldı bunlar test_file1_method2 ve test_file2_method2'dir

Aşağıdakiler gibi çeşitli kombinasyonlarla koşmayı deneyin: -

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'

Seçenek 2) Testleri işaretçilere göre çalıştırma

Pytest, pytest işaretleyicileri @pytest.mark'ı kullanarak test yöntemleri için çeşitli nitelikler ayarlamamıza olanak tanır. Test dosyasındaki işaretleyicileri kullanmak için test dosyalarına pytest'i içe aktarmamız gerekir.

Burada test yöntemlerine farklı işaretleyici adları uygulayacağız ve işaretleyici adlarına dayalı olarak belirli testler gerçekleştireceğiz. Her test adındaki işaretçileri kullanarak tanımlayabiliriz.

@pytest.mark.<name>.			

Test yöntemlerinde set1 ve set2 işaretleyicilerini tanımlıyoruz ve testi işaretleyici adlarını kullanarak çalıştıracağız. Test dosyalarını aşağıdaki kodla güncelleyin

test_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"

test_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"

İşaretli testi şu şekilde çalıştırabiliriz:

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

py.test -m set1 komutunu çalıştırın. Bu, test_file1_method1, test_file2_method1, test_file2_method2 yöntemlerini çalıştıracaktır.

py.test -m set2 çalıştırıldığında test_file1_method2 çalıştırılacaktır.

Testleri Pytest ile Paralel Olarak Çalıştırın

Genellikle bir test paketinde birden fazla test dosyası ve yüzlerce test yöntemi bulunur ve bunların yürütülmesi oldukça fazla zaman alır. Pytest testleri paralel olarak yürütmemize olanak sağlar.

Bunun için önce çalıştırarak pytest-xdist'i kurmamız gerekiyor.

pip install pytest-xdist

Testleri Pytest ile Paralel Olarak Çalıştırın

Testleri şimdi çalıştırabilirsiniz.

py.test -n 4

-N testleri birden fazla çalışan kullanarak çalıştırır. Yukarıdaki komutta testi çalıştıracak 4 çalışan olacaktır.

Pytest Fikstürleri

Fikstürler, her test yönteminden önce bir kod çalıştırmak istediğimizde kullanılır. Yani her testte aynı kodu tekrarlamak yerine fikstürleri tanımlıyoruz. Genellikle fikstürler veritabanı bağlantılarını başlatmak, tabanı aktarmak vb. için kullanılır.

Bir yöntem, ile işaretlenerek Pytest fikstürü olarak işaretlenir.

@pytest.fixture

Bir test yöntemi, fikstürü bir giriş parametresi olarak belirterek bir Pytest fikstürünü kullanabilir.

Aşağıdaki kodla yeni bir test_basic_fixture.py dosyası oluşturun

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"

İşte

  • Supply_AA_BB_CC adında bir fikstürümüz var. Bu yöntem 3 değerden oluşan bir liste döndürecektir.
  • Değerlerin her birini karşılaştıran 3 test yöntemimiz var.

Test fonksiyonlarının her biri, adı mevcut bir fikstürle eşleşen bir giriş argümanına sahiptir. Pytest daha sonra ilgili fikstür yöntemini çağırır ve döndürülen değerler giriş argümanında, buradaki listede [25,35,45] saklanır. Artık liste öğeleri karşılaştırma için test yöntemlerinde kullanılıyor.

Şimdi testi çalıştırın ve sonucu görün

 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 =================================

zz=BB=35 olduğundan test_comparewithBB testi geçildi ve kalan 2 test başarısız oldu.

Fikstür yönteminin yalnızca tanımlandığı test dosyası içerisinde bir kapsamı vardır. Eğer fikstüre başka bir test dosyasından erişmeye çalışırsak, fikstür diyerek hata alırız. 'tedarik_AA_BB_CC' bulunamadı diğer dosyalardaki test yöntemleri için.

Aynı fikstürü birden fazla test dosyasında kullanmak için conftest.py adlı bir dosyada fikstür yöntemleri oluşturacağız.

Aşağıdaki PyTest örneğinde bunu görelim. Aşağıdaki kodla conftest.py, test_basic_fixture.py, test_basic_fixture3.py adında 2 dosya oluşturun

conftest.py

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

test_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"

test_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 ilk olarak test dosyasındaki fikstürü arayacaktır, eğer bulunamazsa conftest.py dosyasına bakacaktır.

Aşağıdaki gibi sonucu elde etmek için testi py.test -k test_comparewith -v ile çalıştırın.

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

Pytest Parametreli Test

Bir testi parametreleştirmenin amacı, birden fazla argüman kümesine karşı bir test çalıştırmaktır. Bunu @pytest.mark.parametrize ile yapabiliriz.

Bunu aşağıdaki PyTest örneğiyle göreceğiz. Burada bir test yöntemine 3 argüman aktaracağız. Bu test yöntemi ilk 2 argümanı toplayacak ve bunu 3. argümanla karşılaştıracaktır.

Aşağıdaki kodla test_addition.py test dosyasını oluşturun

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"

Burada test yöntemi 3 argüman kabul eder - input1, input2, output. Input1 ve input2'yi toplar ve çıktıyla karşılaştırır.

Testi py.test -k test_add -v ile çalıştıralım ve sonucu görelim.

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

Testlerin 2 kez çalıştırıldığını görebilirsiniz – biri 5+5 ==10'u, diğeri 3+5 ==12'yi kontrol ediyor

test_addition.py::test_add[5-5-10] BAŞARILI

test_addition.py::test_add[3-5-12] BAŞARISIZ

Pytest Xfail / Testleri Atla

Bir test yapmak istemediğimiz bazı durumlar olabilir veya test durumu belirli bir zaman için geçerli değildir. Bu gibi durumlarda, testte X başarısız olma veya testleri atlama seçeneğimiz vardır.

Xfailed testi yürütülecek ancak kısmen başarısız veya başarılı testler olarak sayılmayacak. Bu test başarısız olursa hiçbir geri izleme görüntülenmez. Xfail testlerini kullanarak yapabiliriz

@pytest.mark.xfail.

Bir testi atlamak, testin yürütülmeyeceği anlamına gelir. Kullanarak testleri atlayabiliriz

@pytest.mark.skip.

test_addition.py dosyasını aşağıdaki kodla düzenleyin

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"

İşte

  • test_add_1 ve test_add_2 atlanır ve yürütülmez.
  • test_add_3 ve test_add_4 xfail oldu. Bu testler yürütülecek ve xfailed(test başarısızlığında) veya xpassed(test başarılı olduğunda) testlerinin bir parçası olacaktır. Arızalar için herhangi bir geri izleme olmayacaktır.
  • test_add_5 ve test_add_6 yürütülecek ve test_add_6, test_add_5 geçerken traceback ile hatayı rapor edecek

Testi py.test test_addition.py -v ile yürütün ve sonucu görün

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 =================

Sonuç XML'i

Daha ileri işlemler için Sürekli Entegrasyon sunucularına besleyebileceğimiz XML formatında test sonuçları oluşturabiliriz. Bu şu şekilde yapılabilir:

py.test test_sample1.py -v –junitxml=”sonuç.xml”

Sonuç.xml, test yürütme sonucunu kaydedecektir. Aşağıda örnek bir result.xml bulun

<?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>

İtibaren toplamda iki test görebiliriz, bunlardan biri başarısız oldu. Aşağıda, yürütülen her testle ilgili ayrıntıları görebilirsiniz etiket.

Pytest Framework Bir API'yi Test Etme

Şimdi bir API'yi test etmek için küçük bir pytest çerçevesi oluşturacağız. Burada kullanılan API ücretsiz bir API'dir https://reqres.in/. Bu web sitesi yalnızca test edilebilir API sağlamak içindir. Bu web sitesi verilerimizi saklamaz.

Burada bazı testler yazacağız.

  • bazı kullanıcıları listeleme
  • kullanıcılarla giriş yap

Aşağıdaki dosyaları verilen kodlarla oluşturun

conftest.py – tüm test yöntemleri için temel URL sağlayacak bir donanıma sahip olun

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

test_list_user.py – geçerli ve geçersiz kullanıcıları listelemek için test yöntemlerini içerir

  • test_list_valid_user geçerli kullanıcı alımını test eder ve yanıtı doğrular
  • test_list_invaliduser geçersiz kullanıcı alımını test eder ve yanıtı doğrular
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 – oturum açma işlevselliğini test etmek için test yöntemlerini içerir.

  • test_login_valid, e-posta ve parola ile geçerli oturum açma girişimini test eder
  • test_login_no_password, parolayı geçmeden geçersiz oturum açma girişimini test eder
  • test_login_no_email, e-posta geçmeden yapılan geçersiz oturum açma girişimini test eder.
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

Testi py.test -v kullanarak çalıştırın

Sonucu şu şekilde görün

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

Testleri güncelleyin ve çeşitli çıktıları deneyin

ÖZET

Bu PyTest eğitiminde şunları ele aldık:

  • Kullanarak pytest'i yükleyin pip kurulumu pytest=2.9.1
  • Basit pytest programını py.test komutuyla çalıştırın.
  • Onay ifadeleri, iddia x==y, Doğru veya Yanlış değerini döndürecektir.
  • Pytest, test dosyalarını ve yöntemlerini nasıl tanımlar?
  • İle başlayan dosyaları test edin Ölçek_ veya ile biten _Ölçek
  • İle başlayan test yöntemleri test
  • py.test komutu o klasör ve alt klasörlerdeki tüm test dosyalarını çalıştıracaktır. Belirli bir dosyayı çalıştırmak için py.test komutunu kullanabiliriz.
  • Test yöntemlerinin bir alt kümesini çalıştırın
  • Test adlarının alt dize eşleştirmesine göre gruplandırılması.py.test -k -v sahip olan tüm testleri çalıştıracak onun adına.
  • Testi işaretleyicilerle çalıştırın. Testleri @pytest.mark kullanarak işaretleyin. ve testleri pytest -m kullanarak çalıştırın olarak işaretlenen testleri çalıştırmak için .
  • Testleri paralel olarak çalıştırın
  • Pip install pytest-xdist'i kullanarak pytest-xdist'i yükleyin
  • py.test -n NUM komutunu kullanarak testleri çalıştırın; burada NUM, çalışan sayısıdır
  • Yöntemi @pytest.fixture ile işaretleyerek her testten önce kodu çalıştırmak için fikstür yöntemleri oluşturma
  • Bir fikstür yönteminin kapsamı tanımlandığı dosyanın içindedir.
  • Bir fikstür yöntemine, conftest.py dosyasında tanımlanarak birden fazla test dosyasından erişilebilir.
  • Bir test yöntemi, bir Pytest fikstürünü giriş argümanı olarak kullanarak erişebilir.
  • Birden fazla girdi kümesine karşı çalıştırmak için testleri parametreleme.
    @pytest.mark.parametrize(“giriş1, giriş2, çıkış”,[(5,5,10),(3,5,12)])
    def test_add(giriş1, giriş2, çıkış):
    giriş1+giriş2 == çıktıyı onayla,”başarısız oldu”
    testi (5,5,10) ve (3,5,12) girişleriyle çalıştıracak
  • @pytets.mark.skip ve @pytest.mark.xfail kullanarak testleri atla/xfail
  • py.test test_sample1.py -v –junitxml=”result.xml” kullanılarak yürütülen test ayrıntılarını kapsayan XML biçiminde test sonuçları oluşturun.
  • Bir API'yi test etmek için örnek bir pytest çerçevesi