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
İ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
İç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
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 ş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