Sızma Testleri
Bilişim alanında güvenlik uzmanlarının kullandığı üç çeşit sızma testi bulunmaktadır.
Beyaz Kutu Testi
Beyaz kutu testi, bir sistemin güvenliğini ve performansını artırmak için yapılan bir sızma testi türüdür. Beyaz kutu testi, sistemin iç yapısını, kodlarını ve tasarımını inceleyerek yapılan bir testtir. Beyaz kutu testi yapan güvenlik uzmanı, sızılacak sisteme tam erişime sahiptir. Beyaz kutu testi, hem yazılım geliştiriciler hem de güvenlik uzmanları tarafından kullanılabilir. Beyaz kutu testi, diğer sızma testlerine göre daha ucuz ve daha hızlıdır. Beyaz kutu testi, şu durumları kontrol eder:
- Kodlarda var olan hatalar, eksiklikler veya fazlalıklar
- Kodların girdi ve çıktılarının doğru çalışması
- Programda kullanılan döngülerin ve fonksiyonların test edilmesi
- Programın bütün çalışma yollarının test edilmesi
Beyaz Kutu Testinin Avantajları ve Dezavantajları
Beyaz kutu testinin avantajları şunlardır:
- Yazılım geliştirme sürecinin başından itibaren test yapılabilir
- Yazılım geliştiriciler kodlarını daha iyi anlayabilir ve iyileştirebilir
- Sistemdeki güvenlik açıkları ve zayıflıkları daha kolay bulunabilir
Beyaz kutu testinin dezavantajları şunlardır:
- Kod okuyabilen ve analiz edebilen nitelikli bir güvenlik uzmanı gerektirir
- Yazılım geliştirici kendi testini yaptığı için bazı açıkları gözden kaçırabilir
- Testler çok detaylı olduğu için çok zaman alabilir
Beyaz kutu testi yapmak için çeşitli araçlar kullanılabilir. Bunlardan bazıları şunlardır:
- JUnit: Java programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır.
- HtmlUnit: Web tabanlı sistemleri test etmek için kullanılan bir araçtır. Tarayıcı işlevlerini taklit eder ve HTTP istekleri gönderir.
- PyUnit: Python programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır.
- Selenium: Web uygulamalarını otomatik olarak test etmek için kullanılan bir araç paketidir. Çeşitli platformlar ve tarayıcılar ile uyumludur. Farklı programlama dillerini destekler.
Beyaz Kutu Testinin Yapım Aşamaları
Beyaz kutu testi yapmak için şu adımları izleyebilirsiniz:
- Test edilecek sistemin kodlarını, tasarımını ve mimarisini inceleyin. Sistemin nasıl çalıştığını, hangi fonksiyonları, değişkenleri ve döngüleri kullandığını anlayın.
- Test senaryoları oluşturun. Sistemin bütün çalışma yollarını, girdi ve çıktılarını, hata durumlarını ve güvenlik açıklarını kapsayan test durumları belirleyin.
- Test araçlarını seçin. Sistemin kodlarını çalıştırmak, analiz etmek ve raporlamak için uygun beyaz kutu test araçlarını kullanın. Örneğin, Java için JUnit, Python için PyUnit, web uygulamaları için Selenium gibi araçlar kullanabilirsiniz.
- Testleri uygulayın. Test araçlarını kullanarak test senaryolarını çalıştırın. Sistemin beklenen çıktıları verip vermediğini, kodların doğru çalışıp çalışmadığını, hataları ve zafiyetleri tespit edin.
- Test sonuçlarını değerlendirin. Test araçlarının ürettiği raporları inceleyin. Sistemin performansını, güvenliğini ve kalitesini ölçün. Test metriklerini kullanarak test kapsamını ve etkinliğini belirleyin.
- Test sonuçlarını paylaşın. Test raporlarını ve bulgularını yazılım geliştiricileri, güvenlik uzmanları ve ilgili paydaşlarla paylaşın. Sistemin iyileştirilmesi için önerilerde bulunun. Gerekirse testleri tekrarlayın.
Beyaz kutu testi süresi, test edilecek sistemin büyüklüğüne, karmaşıklığına, kod kalitesine, test araçlarına ve test uzmanlarının deneyimine bağlı olarak değişebilir. Beyaz kutu testi, kodların detaylı bir şekilde incelenmesini ve çalıştırılmasını gerektirdiğinden, diğer test türlerine göre daha uzun zaman alabilir. Beyaz kutu testi süresini etkileyen bazı faktörler şunlardır:
- Test kapsamı: Test edilecek kodların sayısı ve çeşitliliği, test süresini artırabilir. Test kapsamını belirlemek için test metrikleri kullanılabilir.
- Test senaryoları: Test edilecek kodların bütün çalışma yollarını, girdi ve çıktılarını, hata durumlarını ve güvenlik açıklarını kapsayan test senaryoları oluşturmak, test süresini uzatabilir.
- Test araçları: Test edilecek kodları çalıştırmak, analiz etmek ve raporlamak için uygun beyaz kutu test araçları seçmek, test süresini kısaltabilir. Örneğin, JUnit, HtmlUnit, PyUnit ve Selenium gibi araçlar kullanılabilir.
- Test uzmanları: Kod okuyabilen ve analiz edebilen nitelikli bir güvenlik uzmanı bulmak, test süresini etkileyebilir. Test uzmanlarının kodlama dillerine, test araçlarına ve test tekniklerine hakim olması, test süresini kısaltabilir.
Beyaz kutu testi süresi, genellikle bir ders saati (sa) olarak ifade edilir. Bir ders saati, 45 dakikaya eşittir. Beyaz kutu testi süresi, test edilecek sistemin özelliklerine göre farklılık gösterebilir. Örneğin, basit bir web uygulaması için beyaz kutu testi süresi 10-20 ders saati arasında olabilir. Karmaşık bir yazılım sistemi için beyaz kutu testi süresi 100-200 ders saati arasında olabilir.
Beyaz kutu testi, bir sistemin iç yapısını, kodlarını ve tasarımını test etmeyi içeren bir sızma testi türüdür. Beyaz kutu testine ihtiyaç duyulan durumlar şunlardır:
- Sistemin performansını, güvenliğini ve kalitesini artırmak istediğinizde
- Sistemin kodlarında hatalar, eksiklikler, fazlalıklar veya güvenlik açıkları olduğundan şüphelendiğinizde
- Sistemin bütün çalışma yollarını, girdi ve çıktılarını, hata durumlarını ve güvenlik açıklarını kapsayan test senaryoları oluşturmak istediğinizde
- Sistemin kodlarını çalıştırmak, analiz etmek ve raporlamak için uygun beyaz kutu test araçları kullanmak istediğinizde
- Sistemin kodlarını daha iyi anlamak ve iyileştirmek istediğinizde.
Beyaz Kutu Test Araçları
Beyaz kutu testi yapmak için çeşitli araçlar kullanılabilir. Bunlardan bazıları şunlardır:
- Parasoft Jtest: Java programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. Kod kalitesini, güvenliğini ve performansını ölçer. Otomatik test oluşturma, kod analizi ve raporlama özellikleri sunar.
- EclEmma: Java programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. Kod kapsamını, yani test edilen kodların yüzdesini gösterir. Eclipse entegre geliştirme ortamı ile uyumludur.
- NUnit: C# programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. Birim testi, entegrasyon testi ve regresyon testi yapabilir. Test senaryolarını ve sonuçlarını yönetir.
- PyUnit: Python programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. JUnit ile benzer bir yapıya sahiptir. Test durumlarını, test takımlarını ve test koşucularını destekler.
- HTMLUnit: Web tabanlı sistemleri test etmek için kullanılan bir araçtır. Tarayıcı işlevlerini taklit eder ve HTTP istekleri gönderir. JavaScript, HTML, CSS ve AJAX gibi web teknolojilerini destekler.
- CppUnit: C++ programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. Birim testi ve entegrasyon testi yapabilir. Test durumlarını, test takımlarını ve test koşucularını destekler.
Beyaz Kutu Testi Uygulaması
Python programlama dilinde yazılan kod blokunda değişkenlere değer vererek beyaz kutu testini yapmak istiyorsanız, aşağıdaki adımları izleyebilirsiniz:
- Beyaz kutu testi, kodun iç yapısını ve mantığını kontrol eden bir test yöntemidir. Bu testi yapmak için, kodunuzun tüm yollarını, dallarını ve döngülerini kapsayan test durumları oluşturmanız gerekir.
- Kodunuzun tüm yollarını bulmak için, kodunuzu bir akış diyagramına dönüştürebilir veya kodunuzun her satırını bir numara ile etiketleyebilirsiniz. Sonra, kodunuzun başından sonuna kadar hangi satırların çalıştığını belirleyen bir yol matrisi oluşturabilirsiniz.
- Kodunuzun dallarını ve döngülerini bulmak için, kodunuzda koşullu ifadeler (if, elif, else) veya döngü ifadeleri (for, while) arayabilirsiniz. Bu ifadeler, kodunuzun farklı yollara ayrılmasına veya tekrarlanmasına neden olur. Bu ifadelerin doğru veya yanlış olma durumlarını test etmek için, değişkenlerinize uygun değerler atamanız gerekir.
- Test durumlarınızı oluştururken, girdi olarak kullanacağınız değişken değerlerini, beklediğiniz çıktıyı ve testin başarılı olup olmadığını belirtmeniz gerekir. Test durumlarınızı bir tablo şeklinde düzenleyebilirsiniz.
Örnek olarak, aşağıdaki Python kod bloğunu ele alalım:
# Bir sayının asal olup olmadığını kontrol eden bir fonksiyon
def asal_mi
:
if n <= 1: # 1. satır
return False # 2. satır
for i in range(2, int(n**0.5) + 1): # 3. satır
if n % i == 0: # 4. satır
return False # 5. satır
return True # 6. satır
Bu kod bloğunda, n değişkenine değer vererek beyaz kutu testi yapmak için aşağıdaki adımları uygulayabiliriz:
- Kodun tüm yollarını bulmak için, kodun her satırını bir numara ile etiketledik. Kodun başından sonuna kadar izleyebileceğimiz üç farklı yol vardır:
- 1 -> 2 -> 6
- 1 -> 3 -> 4 -> 5 -> 6
- 1 -> 3 -> 4 -> 6
- Kodun dallarını ve döngülerini bulmak için, kodda iki koşullu ifade (if) ve bir döngü ifadesi (for) olduğunu görebiliriz. Bu ifadelerin doğru veya yanlış olma durumlarını test etmek için, n değişkenine farklı değerler atayabiliriz. Örneğin, n = 1, n = 4 ve n = 5 gibi.
- Test durumlarını oluşturmak için, girdi olarak n değişkeninin değerini, beklediğimiz çıktıyı (True veya False) ve testin başarılı olup olmadığını (Evet veya Hayır) belirtebiliriz. Test durumlarımızı aşağıdaki gibi bir tablo şeklinde düzenleyebiliriz:
| Test No | Girdi
| Beklenen Çıktı | Gerçek Çıktı | Test Başarılı mı? |
| ------- | --------- | -------------- | ------------ | ----------------- |
| 1 | 1 | False | False | Evet |
| 2 | 4 | False | False | Evet |
| 3 | 5 | True | True | Evet |
Bu test durumları, kodun tüm yollarını, dallarını ve döngülerini kapsadığı için, beyaz kutu testi için yeterlidir.
GRİ KUTU TESTİ
Gri kutu testi, bir web uygulamasının güvenliğini değerlendirmek için kullanılan bir yöntemdir. Bu yöntemde, test uzmanı uygulamanın iç yapısı hakkında kısmi bilgiye sahiptir. Örneğin, uygulamanın hangi sunucuda çalıştığı, hangi IP adresine sahip olduğu, hangi programlama diliyle yazıldığı gibi bilgileri bilir. Ancak, uygulamanın tam koduna erişimi yoktur. Bu nedenle, test uzmanı hem siyah kutu testi hem de beyaz kutu testi tekniklerini kullanarak uygulamayı test eder. Gri kutu testi, siyah kutu testine göre daha hızlı ve etkili olabilir. Ayrıca, test uzmanının uygulamanın kodunu bilmemesi, testin kullanıcı perspektifinden yapılmasını sağlar.
Gri kutu testi yapmak için çeşitli araçlar kullanılabilir. Bunlardan bazıları şunlardır:
- Selenium: Web uygulamalarını farklı platformlarda ve tarayıcılarda otomatik olarak test etmeye yarayan bir araç paketidir. Python, C# ve JavaScript gibi birçok programlama dilini destekler. Selenium ile test senaryoları oluşturmak ve çalıştırmak mümkündür.
- Appium: Mobil uygulamalar için test otomasyonu sağlayan bir araçtır. IOS, Android ve Windows uygulamalarını test edebilir. Appium, uygulamanın koduna dokunmadan test yapılmasını sağlar.
- NUnit: .Net platformunda yazılan uygulamalara birim testi yapmak için kullanılan bir Framework'tür. Birim testi, uygulamanın küçük parçalarının doğru çalışıp çalışmadığını kontrol etmek için yapılır. NUnit, C#, VB.Net, F# gibi .Net dillerini destekler. NUnit ile test kodları yazmak ve sonuçları görmek kolaydır.
Gri Kutu Testi Uygulaması
Aşağıdaki işlem adımlarına göre gri kutu testini yapınız.
1. Adım: Maillere bakmak için öncelikle oturum açma sayfasında adresi ve şifreyi doğru şekilde yazınız. Giriş başarılı ise kullanıcıya ne gibi haklar verildiğini inceleyiniz.
2. Adım: Maillere bakmak için oturum açma sayfasında adres veya şifreden herhangi biri yanlış yazıldığında kullanıcıya nasıl bir mesaj verildiğini inceleyiniz.
İki adımdan oluşan bu çalışma bir gri kutu test örneğidir. Test kullanıcısı, oturum açma sayfasında şifresini ve mail adresini yazarak bu bilgilerin işlevselliğini test etmeye çalışır. Bir başka deyişle test kullanıcısı gerekli bilgileri girer ve veri tabanındaki bilgilerle bunların doğruluğunu karşılaştırır. Kullanıcı bu şekilde sistem davranışını kontrol eder.
Bu işlem adımlarına göre gri kutu testini yapmak için, test uzmanı şu şekilde bir Python kodu yazabilir:
# Selenium kütüphanesini import ediyoruz
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# Chrome tarayıcısını açıyoruz
driver = webdriver.Chrome()
# Oturum açma sayfasına gidiyoruz
driver.get("https://mail.example.com/login")
# Mail adresi ve şifre alanlarını buluyoruz
mail = driver.find_element_by_id("mail")
password = driver.find_element_by_id("password")
# Adım 1: Doğru mail adresi ve şifre giriyoruz
mail.send_keys("[email protected]")
password.send_keys("123456")
password.send_keys(Keys.RETURN)
# Giriş başarılı ise kullanıcıya verilen hakları kontrol ediyoruz
if driver.current_url == "https://mail.example.com/inbox":
print("Giriş başarılı, kullanıcıya mail okuma, yazma, silme, arşivleme gibi haklar verildi.")
else:
print("Giriş başarısız, kullanıcıya verilen haklar yok.")
# Adım 2: Yanlış mail adresi veya şifre giriyoruz
mail.clear()
password.clear()
mail.send_keys("[email protected]")
password.send_keys("654321")
password.send_keys(Keys.RETURN)
# Kullanıcıya verilen mesajı kontrol ediyoruz
message = driver.find_element_by_id("message")
if message.text == "Mail adresi veya şifre yanlış, lütfen tekrar deneyiniz.":
print("Kullanıcıya doğru mesaj verildi.")
else:
print("Kullanıcıya yanlış mesaj verildi.")
# Tarayıcıyı kapatıyoruz
driver.close()
Siyah Kutu Testi
Siyah kutu testi, bir yazılımın veya sistemin iç yapısını veya kodunu bilmeksizin, sadece girdi ve çıktıları kullanarak test etme yöntemidir. Bu yöntem, test uzmanlarının yazılımın işlevselliğini, performansını, güvenliğini ve kullanılabilirliğini değerlendirmelerine olanak sağlar. Siyah kutu testi, yazılım geliştiricilerin gözünden değil, kullanıcıların gözünden yazılımı test etmeyi amaçlar.
Siyah kutu testinin avantajları, test uzmanlarının kod bilgisine ihtiyaç duymaması, farklı bakış açılarıyla hataları bulabilmesi, testlerin hızlı ve etkin bir şekilde uygulanabilmesi, test senaryolarının gereksinimlere göre oluşturulabilmesi ve büyük ölçekli sistemlerde yüksek verim alınabilmesidir. Siyah kutu testinin dezavantajları ise, sistemin yapısını bilmemekten kaynaklanan hata bulma zorluğu, test edilen kodun tekrara düşebilmesi, karmaşık kod bloklarını test edememesi ve bütün olasılıkları kontrol edememesidir.
Siyah kutu testi yöntemleri, test uzmanlarının test senaryoları tasarlarken kullanabilecekleri farklı tekniklerdir. Bu tekniklerden bazıları şunlardır:
- Eşit bölümlere ayırma: Bu teknikle, girdi değerleri sonuçlarına göre eşit gruplara ayrılır ve her gruptan bir veya birkaç değer seçilerek test edilir.
- Sınır değer analizi: Bu teknikle, girdi değerlerinin sınır noktaları ve yakınlarındaki değerler test edilir. Bu değerler genellikle hata oluşturma olasılığı yüksektir.
- Karar tablosu: Bu teknikle, sistemin farklı koşullara göre nasıl davrandığını gösteren bir tablo oluşturulur ve bu tabloya göre test senaryoları yazılır.
- Durum geçişi: Bu teknikle, sistemin farklı durumlar arasında nasıl geçiş yaptığını ve hangi durumda sonlandığını test etmek için senaryolar oluşturulur.
- Hata tahmini: Bu teknikle, test uzmanları deneyimlerine, sezgilerine veya tahminlerine göre kodda olabilecek hataları belirler ve bunları test eder.
- Grafik tabanlı: Bu teknikle, sistemin nesneleri ve aralarındaki ilişkiler bir grafik olarak gösterilir ve bu grafiğe göre test senaryoları yazılır.
- Karşılaştırma: Bu teknikle, sistemin farklı bağımsız sürümleri birbirleriyle karşılaştırılarak hata bulmaya çalışılır.
SİYAH KUTU TESTİ UYGULAMASI
- 1. Adım: Web sitesine giriş yapınız ve bir kullanıcı girişi oluşturunuz. Bu adımda, web sitesinin kullanıcı kaydı ve girişi yapabilme özelliğini test ederiz. Web sitesine girdiğimizde, kayıt ol veya giriş yap seçeneklerini bulmalıyız. Kayıt ol seçeneğine tıkladığımızda, bize kullanıcı adı, e-posta, şifre gibi bilgileri girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, kayıt işleminin başarılı olduğuna dair bir mesaj almalıyız. Giriş yap seçeneğine tıkladığımızda, kayıtlı olduğumuz kullanıcı adı ve şifreyi girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, giriş işleminin başarılı olduğuna dair bir mesaj almalıyız. Bu adımda, ayrıca, kullanıcı adı veya şifre yanlış girildiğinde, hata mesajı verip vermediğini de kontrol etmeliyiz.
- 2. Adım: Alınacak ürünleri seçiniz ve sepete ekleyiniz. Bu adımda, web sitesinin ürün seçme ve sepete ekleme özelliğini test ederiz. Web sitesinde, aradığımız veya ilgilendiğimiz ürünleri bulabilmeliyiz. Ürünlerin fiyat, resim, açıklama gibi bilgilerini görebilmeliyiz. Ürünlerin stok durumunu, kargo ücretini, teslimat süresini, iade koşullarını gibi bilgileri de görebilmeliyiz. Ürünleri sepete eklemek için, ürün sayfasında sepete ekle butonuna tıklamalıyız. Sepete ekle butonuna tıkladığımızda, sepetimizin güncellendiğine dair bir mesaj almalıyız. Sepetimizdeki ürün sayısını, toplam tutarı, sepeti boşaltma, ürün silme, adet değiştirme gibi seçenekleri de görebilmeliyiz.
- 3. Adım: Sepete gidiniz ve seçilen ürünleri kontrol ediniz. Bu adımda, web sitesinin sepet işlevselliğini test ederiz. Sepete gittiğimizde, seçtiğimiz ürünlerin doğru bir şekilde listelendiğini, fiyat, adet, toplam tutar gibi bilgilerin doğru hesaplandığını, sepeti boşaltma, ürün silme, adet değiştirme gibi seçeneklerin çalıştığını kontrol ederiz. Ayrıca, sepetimizdeki ürünleri değiştirdiğimizde, sepetin güncellendiğine dair bir mesaj almalıyız.
- 4. Adım: Ödeme seçeneklerine bakınız. Bu adımda, web sitesinin ödeme seçeneklerini test ederiz. Sepetimizdeki ürünleri satın almak için, ödeme yap butonuna tıklamalıyız. Ödeme yap butonuna tıkladığımızda, bize fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, ödeme seçeneklerini görmeliyiz. Ödeme seçenekleri arasında, kredi kartı, banka kartı, havale, eft, kapıda ödeme gibi seçenekler olmalı. Bu seçeneklerin her birinin çalışıp çalışmadığını, ödeme bilgilerini doğru girdiğimizde veya yanlış girdiğimizde ne gibi mesajlar verdiğini kontrol etmeliyiz.
- 5. Adım: Uygun ödeme seçeneğini işaretleyiniz. Gerekli ödeme bilgilerini giriniz. Bu adımda, web sitesinin ödeme işlemini test ederiz. Ödeme seçeneklerinden birini seçtikten sonra, gerekli ödeme bilgilerini girmeliyiz. Örneğin, kredi kartı seçtiysek, kart numarası, son kullanma tarihi, cvv kodu gibi bilgileri girmeliyiz. Ödeme bilgilerini girdikten sonra, ödeme yap butonuna tıklamalıyız. Ödeme yap butonuna tıkladığımızda, ödeme işleminin başarılı olduğuna veya başarısız olduğuna dair bir mesaj almalıyız. Ödeme işlemi başarılı olduğunda, sipariş numarası, sipariş detayı, sipariş takip bilgisi gibi bilgileri de görmeliyiz. Ödeme işlemi başarısız olduğunda, hata nedenini ve tekrar deneme seçeneğini de görmeliyiz.
- 6. Adım: Ödeme işlemini gerçekleştiriniz. Bu adımda, web sitesinin ödeme işlemini tamamladığını test ederiz. Ödeme işlemini gerçekleştirdikten sonra, siparişimizin durumunu takip edebilmeliyiz. Web sitesinde, siparişlerim veya hesabım gibi bir bölüm olmalı. Bu bölüme girdiğimizde, sipariş numarası, sipariş detayı, sipariş takip bilgisi, sipariş iptali, sipariş iadesi gibi seçenekleri görmeliyiz. Bu seçeneklerin her birinin çalışıp çalışmadığını kontrol etmeliyiz.
- 7. Adım: Kullanıcı girişi oluşturmadan ürün seçiniz, sepete gidiniz ve ödeme seçeneklerini kontrol ediniz. Bu adımda, web sitesinin kullanıcı girişi olmadan da alışveriş yapılabilmesini test ederiz. Web sitesine giriş yapmadan, ürün seçip sepete ekleyebilmeliyiz. Sepete gittiğimizde, sepetimizdeki ürünleri görebilmeliyiz. Ödeme yap butonuna tıkladığımızda, bize kullanıcı girişi yapmamızı veya misafir olarak devam etmemizi isteyen bir seçenek sunmalı. Misafir olarak devam et seçeneğine tıkladığımızda, bize fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, ödeme seçeneklerini görmeliyiz. Bu adımda, ayrıca, kullanıcı girişi yapmadan da sepeti boşaltma, ürün silme, adet değiştirme gibi seçenekleri kullanabilmeliyiz.
- 8. Adım: Web sitesinde olmayan bir ürünü arayınız ve sitenin hangi hatayı verdiğini kontrol ediniz. Bu adımda, web sitesinin arama özelliğini test ederiz. Web sitesinde, aradığımız ürünü bulabilmek için bir arama kutusu olmalı. Arama kutusuna, web sitesinde olmayan bir ürünü yazıp ara butonuna tıkladığımızda, bize aradığızınızla ilgili bir sonuç bulunamadı gibi bir mesaj vermelidir. Bu mesaj, arama yaptığımız ürünün web sitesinde olmadığını bize bildirmelidir. Ayrıca, bize benzer ürünler, kategoriler, popüler aramalar gibi seçenekler de sunmalıdır. Bu seçenekler, aradığımız ürüne yakın veya ilgili ürünleri bulmamıza yardımcı olmalıdır.
- 9. Adım: Ürün seçiniz, sepete gidiniz ve ödeme seçeneklerinin çalışıp çalışmadığı kontrol ediniz. Bu adımda, web sitesinin ödeme seçeneklerinin doğru çalıştığını test ederiz. Web sitesinde, bir ürün seçip sepete ekledikten sonra, ödeme yap butonuna tıklamalıyız. Ödeme yap butonuna tıkladığımızda, bize fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, ödeme seçeneklerini görmeliyiz. Ödeme seçenekleri arasında, kredi kartı, banka kartı, havale, eft, kapıda ödeme gibi seçenekler olmalı. Bu seçeneklerin her birinin çalışıp çalışmadığını, ödeme bilgilerini doğru girdiğimizde veya yanlış girdiğimizde ne gibi mesajlar verdiğini kontrol etmeliyiz.
Bu aşamaları Python kodu olarak yazmak için, aşağıdaki gibi bir kod yazabiliriz. Bu kod, web sitesinin işlevselliğini test etmek için Selenium gibi bir otomasyon aracı kullanıldığını varsayar. Kod, her adım için yorum satırları içerir.
# Import the selenium webdriver
from selenium import webdriver
# Create a webdriver object
driver = webdriver.Chrome()
# 1. Adım: Web sitesine giriş yapınız ve bir kullanıcı girişi oluşturunuz.
# Web sitesinin URL'sini açınız
driver.get("https://www.alisveris.com")
# Kayıt ol seçeneğini bulunuz ve tıklayınız
register_button = driver.find_element_by_id("register-button")
register_button.click()
# Kayıt formunu doldurunuz
username_input = driver.find_element_by_id("username-input")
email_input = driver.find_element_by_id("email-input")
password_input = driver.find_element_by_id("password-input")
confirm_password_input = driver.find_element_by_id("confirm-password-input")
username_input.send_keys("testuser")
email_input.send_keys("[email protected]")
password_input.send_keys("test1234")
confirm_password_input.send_keys("test1234")
# Kayıt ol butonuna tıklayınız
submit_button = driver.find_element_by_id("submit-button")
submit_button.click()
# Kayıt işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success_message.text == "Kayıt işleminiz başarıyla tamamlandı."
# Giriş yap seçeneğini bulunuz ve tıklayınız
login_button = driver.find_element_by_id("login-button")
login_button.click()
# Giriş formunu doldurunuz
username_input = driver.find_element_by_id("username-input")
password_input = driver.find_element_by_id("password-input")
username_input.send_keys("testuser")
password_input.send_keys("test1234")
# Giriş yap butonuna tıklayınız
submit_button = driver.find_element_by_id("submit-button")
submit_button.click()
# Giriş işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success_message.text == "Giriş işleminiz başarıyla tamamlandı."
# 2. Adım: Alınacak ürünleri seçiniz ve sepete ekleyiniz.
# Arama kutusunu bulunuz ve bir ürün adı yazınız
search_box = driver.find_element_by_id("search-box")
search_box.send_keys("kitap")
# Ara butonuna tıklayınız
search_button = driver.find_element_by_id("search-button")
search_button.click()
# Arama sonuçlarından bir ürünü seçiniz
product_link = driver.find_element_by_class_name("product-link")
product_link.click()
# Ürün sayfasında sepete ekle butonuna tıklayınız
add_to_cart_button = driver.find_element_by_id("add-to-cart-button")
add_to_cart_button.click()
# Sepete ekleme işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success_message.text == "Ürün sepetinize eklendi."
# 3. Adım: Sepete gidiniz ve seçilen ürünleri kontrol ediniz.
# Sepetim seçeneğini bulunuz ve tıklayınız
cart_button = driver.find_element_by_id("cart-button")
cart_button.click()
# Sepetinizdeki ürünleri, fiyatları, adetleri, toplam tutarı kontrol ediniz
product_name = driver.find_element_by_class_name("product-name")
product_price = driver.find_element_by_class_name("product-price")
product_quantity = driver.find_element_by_class_name("product-quantity")
total_price = driver.find_element_by_id("total-price")
assert product_name.text == "Kitap"
assert product_price.text == "10 TL"
assert product_quantity.text == "1"
assert total_price.text == "10 TL"
# Sepeti boşaltma, ürün silme, adet değiştirme gibi seçenekleri bulunuz ve çalıştığını kontrol ediniz
empty_cart_button = driver.find_element_by_id("empty-cart-button")
delete_product_button = driver.find_element_by_id("delete-product-button")
increase_quantity_button = driver.find_element_by_id("increase-quantity-button")
decrease_quantity_button = driver.find_element_by_id("decrease-quantity-button")
empty_cart_button.click()
assert driver.find_element_by_id("empty-cart-message").text == "Sepetiniz boş."
driver.back()
delete_product_button.click()
assert driver.find_element_by_id("empty-cart-message").text == "Sepetiniz boş."
driver.back()
increase_quantity_button.click()
assert product_quantity.text == "2"
assert total_price.text == "20 TL"
decrease_quantity_button.click()
assert product_quantity.text == "1"
assert total_price.text == "10 TL"
# 4. Adım: Ödeme seçeneklerine bakınız.
# Ödeme yap butonunu bulunuz ve tıklayınız
pay_button = driver.find_element_by_id("pay-button")
pay_button.click()
# Fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmenizi isteyen formu doldurunuz
billing_address_input = driver.find_element_by_id("billing-address-input")
shipping_address_input = driver.find_element_by_id("shipping-address-input")
shipping_option_select = driver.find_element_by_id("shipping-option-select")
payment_method_select = driver.find_element_by_id("payment-method-select")
billing_address_input.send_keys("Test sokak, Test mahalle, Test ilçe, Test şehir")
shipping_address_input.send_keys("Test sokak, Test mahalle, Test ilçe, Test şehir")
shipping_option_select.select_by_value("standard")
payment_method_select.select_by_value("credit-card")
# Devam et butonuna tıklayınız
continue_button = driver.find_element_by_id("continue-button")
continue_button.click()
# Ödeme seçeneklerini kontrol ediniz
payment_options = driver.find_elements_by_class_name("payment-option")
assert len(payment_options) == 4
assert payment_options[0].text == "Kredi Kartı"
assert payment_options[1].text == "Banka Kartı"
assert payment_options[2].text == "Havale/EFT"
assert payment_options[3].text == "Kapıda Ödeme"
# 5. Adım: Uygun ödeme seçeneğini işaretleyiniz. Gerekli ödeme bilgilerini giriniz.
# Ödeme seçeneklerinden birini seçiniz
payment_option = payment_options[0]
payment_option.click()
# Ödeme bilgilerini giriniz
card_number_input = driver.find_element_by_id("card-number-input")
card_expiry_input = driver.find_element_by_id("card-expiry-input")
card_cvv_input = driver.find_element_by_id("card-cvv-input")
card_number_input.send_keys("1111-2222-3333-4444
card_expiry_input.send_keys("12/23")
card_cvv_input.send_keys("123")
# Ödeme yap butonuna tıklayınız
pay_button = driver.find_element_by_id("pay-button")
pay_button.click()
# Ödeme işleminin başarılı veya başarısız olduğuna dair mesajı kontrol ediniz
payment_message = driver.find_element_by_id("payment-message")
assert payment_message.text == "Ödeme işleminiz başarıyla tamamlandı." or payment_message.text == "Ödeme işleminiz başarısız oldu."
# 6. Adım: Ödeme işlemini gerçekleştiriniz.
# Siparişlerim veya hesabım seçeneğini bulunuz ve tıklayınız
orders_button = driver.find_element_by_id("orders-button")
orders_button.click()
# Sipariş numarası, sipariş detayı, sipariş takip bilgisi, sipariş iptali, sipariş iadesi gibi seçenekleri kontrol ediniz
order_number = driver.find_element_by_class_name("order-number")
order_details = driver.find_element_by_class_name("order-details")
order_tracking = driver.find_element_by_class_name("order-tracking")
order_cancel = driver.find_element_by_class_name("order-cancel")
order_return = driver.find_element_by_class_name("order-return")
assert order_number.text == "123456789"
assert order_details.text == "Kitap, 1 adet, 10 TL"
assert order_tracking.text == "Siparişiniz kargoya verildi."
assert order_cancel.text == "Siparişinizi iptal etmek için tıklayınız."
assert order_return.text == "Siparişinizi iade etmek için tıklayınız."
# Sipariş iptali, sipariş iadesi gibi seçenekleri bulunuz ve çalıştığını kontrol ediniz
order_cancel.click()
assert driver.find_element_by_id("cancel-message").text == "Siparişiniz iptal edildi."
driver.back()
order_return.click()
assert driver.find_element_by_id("return-message").text == "Siparişiniz iade edildi."
# 7. Adım: Kullanıcı girişi oluşturmadan ürün seçiniz, sepete gidiniz ve ödeme seçeneklerini kontrol ediniz.
# Web sitesinden çıkış yapınız
logout_button = driver.find_element_by_id("logout-button")
logout_button.click()
# Arama kutusunu bulunuz ve bir ürün adı yazınız
search_box = driver.find_element_by_id("search-box")
search_box.send_keys("kalem")
# Ara butonuna tıklayınız
search_button = driver.find_element_by_id("search-button")
search_button.click()
# Arama sonuçlarından bir ürünü seçiniz
product_link = driver.find_element_by_class_name("product-link")
product_link.click()
# Ürün sayfasında sepete ekle butonuna tıklayınız
add_to_cart_button = driver.find_element_by_id("add-to-cart-button")
add_to_cart_button.click()
# Sepete ekleme işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success_message.text == "Ürün sepetinize eklendi."
# Sepetim seçeneğini bulunuz ve tıklayınız
cart_button = driver.find_element_by_id("cart-button")
cart_button.click()
# Sepetinizdeki ürünleri, fiyatları, adetleri, toplam tutarı kontrol ediniz
product_name = driver.find_element_by_class_name("product-name")
product_price = driver.find_element_by_class_name("product-price")
product_quantity = driver.find_element_by_class_name("product-quantity")
total_price = driver.find_element_by_id("total-price")
assert product_name.text == "Kalem"
assert product_price.text == "1 TL"
assert product_quantity.text == "1"
assert total_price.text == "1 TL"
# Sepeti boşaltma, ürün silme, adet değiştirme gibi seçenekleri bulunuz ve çalıştığını kontrol ediniz
empty_cart_button = driver.find_element_by_id("empty-cart-button")
delete_product_button = driver.find_element_by_id("delete-product-button")
increase_quantity_button = driver.find_element_by_id("increase-quantity-button")
decrease_quantity_button = driver.find_element_by_id("decrease-quantity-button")
empty_cart_button.click()
assert driver.find_element_by_id("empty-cart-message").text == "Sepetiniz boş."
driver.back()
delete_product_button.click()
assert driver.find_element_by_id("empty-cart-message").text == "Sepetiniz boş."
driver.back()
increase_quantity_button.click()
assert product_quantity.text == "2"
assert total_price.text == "2 TL"
decrease_quantity_button.click()
assert product_quantity.text == "1"
assert total_price.text == "1 TL"
# Ödeme yap butonunu bulunuz ve tıklayınız
pay_button = driver.find_element_by_id("pay-button")
pay_button.click()
# Kullanıcı girişi yapmamızı veya misafir olarak devam etmemizi isteyen bir seçenek sunulduğunu kontrol ediniz
login_option = driver.find_element_by_id("login-option")
guest_option = driver.find_element_by_id("guest-option")
assert login_option.text == "Kullanıcı girişi yapınız."
assert guest_option.text == "Misafir olarak devam ediniz."
# Misafir olarak devam et seçeneğine tıklayınız
guest_option.click()
# Fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmenizi isteyen formu doldurunuz
billing_address_input = driver.find_element_by_id("billing-address-input")
shipping_address_input = driver.find_element_by_id("shipping-address-input")
shipping_option_select = driver.find_element_by_id("shipping-option-select")
payment_method_select = driver.find_element_by_id("payment-method-select")
billing_address_input.send_keys("Test sokak, Test mahalle, Test ilçe, Test şehir")
shipping_address_input.send_keys("Test sokak, Test mahalle, Test ilçe, Test şehir")
shipping_option_select.select_by_value("standard")
payment_method_select.select_by_value("credit-card")
# Devam et butonuna tıklayınız
continue_button = driver.find_element_by_id("continue-button")
continue_button.click()
# Ödeme seçeneklerini kontrol ediniz
payment_options = driver.find_elements_by_class_name("payment-option")
assert len(payment_options) == 4
assert payment_options[0].text == "Kredi Kartı"
assert payment_options[1].text == "Banka Kartı"
assert payment_options[2].text == "Havale/EFT"
assert payment_options[3].text == "Kapıda Ödeme"
# 8. Adım: Web sitesinde olmayan bir ürünü arayınız ve sitenin hangi hatayı verdiğini kontrol ediniz.
# Arama kutusunu bulunuz ve web sitesinde olmayan bir ürünü yazınız
search_box = driver.find_element_by_id("search-box")
search_box.send_keys("telefon")
# Ara butonuna tıklayınız
search_button = driver.find_element_by_id("search-button")
search_button.click()
# Aradığınızla ilgili bir sonuç bulunamadı gibi bir mesaj verdiğini kontrol ediniz
no_result_message = driver.find_element_by_id("no-result-message")
assert no_result_message.text == "Aradığınızla ilgili bir sonuç bulunamadı."
# Benzer ürünler, kategoriler, popüler aramalar gibi seçenekler sunduğunu kontrol ediniz
similar_products = driver.find_elements_by_class_name("similar-product")
categories = driver.find_elements_by_class_name("category")
popular_searches = driver.find_elements_by_class_name("popular-search")
assert len(similar_products) > 0
assert len(categories) > 0
assert len(popular_searches) > 0
# 9. Adım: Ürün seçiniz, sepete gidiniz ve ödeme seçeneklerinin çalışıp çalışmadığı kontrol ediniz.
# Arama kutusunu bulunuz ve bir ürün adı yazınız
search_box = driver.find_element_by_id("search-box")
search_box.send_keys("defter")
# Ara butonuna tıklayınız
search_button = driver.find_element_by_id("search-button")
search_button.click()
# Arama sonuçlarından bir ürünü seçiniz
product_link = driver.find_element_by_class_name("product-link")
product_link.click()
# Ürün sayfasında sepete ekle butonuna tıklayınız
add_to_cart_button = driver.find_element_by_id("add-to-cart-button")
add_to_cart_button.click()
# Sepete ekleme işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success message = "Bu kod, web sitesinin işlevselliğini test etmek için Python dilinde yazılmış bir otomasyon kodudur. Kod, web sitesinin kullanıcı kaydı, girişi, ürün seçme, sepete ekleme, ödeme yapma, sipariş takip etme gibi özelliklerini kontrol eder. Kod, her adım için web sitesindeki ilgili elementleri bulur, gerekli işlemleri yapar ve beklenen sonuçları karşılaştırır. Kod, herhangi bir hata veya başarısızlık durumunda bunu bildirir. Kod, web sitesinin kullanıcı girişi olmadan da alışveriş yapılabilmesini, arama özelliğini, ödeme seçeneklerini de test eder. Kod, web sitesinin işlevselliğini doğrulamak için faydalı bir araçtır."
Kodu çalıştırmak için şu aşamaları takip etmeniz gerekir:
- Bu kodu çalıştırmak için, öncelikle Selenium gibi bir otomasyon aracını bilgisayarınıza kurmanız gerekmektedir. Selenium, web sitelerini otomatik olarak açıp, test etmenizi sağlayan bir kütüphanedir.
- Bu kodu çalıştırmak için, ayrıca, web sitesinin URL'sini, kullanıcı adı ve şifrenizi, ödeme bilgilerinizi gibi değişkenleri kodun başında tanımlamanız gerekmektedir. Bu değişkenler, web sitesine giriş yapmanızı ve ödeme yapmanızı sağlayacaktır.
- Bu kodu çalıştırmak için, son olarak, kod dosyasını bir Python editöründe açıp, çalıştır butonuna basmanız yeterlidir. Kod, web sitesini otomatik olarak açacak ve test adımlarını uygulayacaktır. Kod, test sonuçlarını ekranda gösterecektir.
Bilişim alanında güvenlik uzmanlarının kullandığı üç çeşit sızma testi bulunmaktadır.
Beyaz Kutu Testi
Beyaz kutu testi, bir sistemin güvenliğini ve performansını artırmak için yapılan bir sızma testi türüdür. Beyaz kutu testi, sistemin iç yapısını, kodlarını ve tasarımını inceleyerek yapılan bir testtir. Beyaz kutu testi yapan güvenlik uzmanı, sızılacak sisteme tam erişime sahiptir. Beyaz kutu testi, hem yazılım geliştiriciler hem de güvenlik uzmanları tarafından kullanılabilir. Beyaz kutu testi, diğer sızma testlerine göre daha ucuz ve daha hızlıdır. Beyaz kutu testi, şu durumları kontrol eder:
- Kodlarda var olan hatalar, eksiklikler veya fazlalıklar
- Kodların girdi ve çıktılarının doğru çalışması
- Programda kullanılan döngülerin ve fonksiyonların test edilmesi
- Programın bütün çalışma yollarının test edilmesi
Beyaz Kutu Testinin Avantajları ve Dezavantajları
Beyaz kutu testinin avantajları şunlardır:
- Yazılım geliştirme sürecinin başından itibaren test yapılabilir
- Yazılım geliştiriciler kodlarını daha iyi anlayabilir ve iyileştirebilir
- Sistemdeki güvenlik açıkları ve zayıflıkları daha kolay bulunabilir
Beyaz kutu testinin dezavantajları şunlardır:
- Kod okuyabilen ve analiz edebilen nitelikli bir güvenlik uzmanı gerektirir
- Yazılım geliştirici kendi testini yaptığı için bazı açıkları gözden kaçırabilir
- Testler çok detaylı olduğu için çok zaman alabilir
Beyaz kutu testi yapmak için çeşitli araçlar kullanılabilir. Bunlardan bazıları şunlardır:
- JUnit: Java programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır.
- HtmlUnit: Web tabanlı sistemleri test etmek için kullanılan bir araçtır. Tarayıcı işlevlerini taklit eder ve HTTP istekleri gönderir.
- PyUnit: Python programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır.
- Selenium: Web uygulamalarını otomatik olarak test etmek için kullanılan bir araç paketidir. Çeşitli platformlar ve tarayıcılar ile uyumludur. Farklı programlama dillerini destekler.
Beyaz Kutu Testinin Yapım Aşamaları
Beyaz kutu testi yapmak için şu adımları izleyebilirsiniz:
- Test edilecek sistemin kodlarını, tasarımını ve mimarisini inceleyin. Sistemin nasıl çalıştığını, hangi fonksiyonları, değişkenleri ve döngüleri kullandığını anlayın.
- Test senaryoları oluşturun. Sistemin bütün çalışma yollarını, girdi ve çıktılarını, hata durumlarını ve güvenlik açıklarını kapsayan test durumları belirleyin.
- Test araçlarını seçin. Sistemin kodlarını çalıştırmak, analiz etmek ve raporlamak için uygun beyaz kutu test araçlarını kullanın. Örneğin, Java için JUnit, Python için PyUnit, web uygulamaları için Selenium gibi araçlar kullanabilirsiniz.
- Testleri uygulayın. Test araçlarını kullanarak test senaryolarını çalıştırın. Sistemin beklenen çıktıları verip vermediğini, kodların doğru çalışıp çalışmadığını, hataları ve zafiyetleri tespit edin.
- Test sonuçlarını değerlendirin. Test araçlarının ürettiği raporları inceleyin. Sistemin performansını, güvenliğini ve kalitesini ölçün. Test metriklerini kullanarak test kapsamını ve etkinliğini belirleyin.
- Test sonuçlarını paylaşın. Test raporlarını ve bulgularını yazılım geliştiricileri, güvenlik uzmanları ve ilgili paydaşlarla paylaşın. Sistemin iyileştirilmesi için önerilerde bulunun. Gerekirse testleri tekrarlayın.
Beyaz kutu testi süresi, test edilecek sistemin büyüklüğüne, karmaşıklığına, kod kalitesine, test araçlarına ve test uzmanlarının deneyimine bağlı olarak değişebilir. Beyaz kutu testi, kodların detaylı bir şekilde incelenmesini ve çalıştırılmasını gerektirdiğinden, diğer test türlerine göre daha uzun zaman alabilir. Beyaz kutu testi süresini etkileyen bazı faktörler şunlardır:
- Test kapsamı: Test edilecek kodların sayısı ve çeşitliliği, test süresini artırabilir. Test kapsamını belirlemek için test metrikleri kullanılabilir.
- Test senaryoları: Test edilecek kodların bütün çalışma yollarını, girdi ve çıktılarını, hata durumlarını ve güvenlik açıklarını kapsayan test senaryoları oluşturmak, test süresini uzatabilir.
- Test araçları: Test edilecek kodları çalıştırmak, analiz etmek ve raporlamak için uygun beyaz kutu test araçları seçmek, test süresini kısaltabilir. Örneğin, JUnit, HtmlUnit, PyUnit ve Selenium gibi araçlar kullanılabilir.
- Test uzmanları: Kod okuyabilen ve analiz edebilen nitelikli bir güvenlik uzmanı bulmak, test süresini etkileyebilir. Test uzmanlarının kodlama dillerine, test araçlarına ve test tekniklerine hakim olması, test süresini kısaltabilir.
Beyaz kutu testi süresi, genellikle bir ders saati (sa) olarak ifade edilir. Bir ders saati, 45 dakikaya eşittir. Beyaz kutu testi süresi, test edilecek sistemin özelliklerine göre farklılık gösterebilir. Örneğin, basit bir web uygulaması için beyaz kutu testi süresi 10-20 ders saati arasında olabilir. Karmaşık bir yazılım sistemi için beyaz kutu testi süresi 100-200 ders saati arasında olabilir.
Beyaz kutu testi, bir sistemin iç yapısını, kodlarını ve tasarımını test etmeyi içeren bir sızma testi türüdür. Beyaz kutu testine ihtiyaç duyulan durumlar şunlardır:
- Sistemin performansını, güvenliğini ve kalitesini artırmak istediğinizde
- Sistemin kodlarında hatalar, eksiklikler, fazlalıklar veya güvenlik açıkları olduğundan şüphelendiğinizde
- Sistemin bütün çalışma yollarını, girdi ve çıktılarını, hata durumlarını ve güvenlik açıklarını kapsayan test senaryoları oluşturmak istediğinizde
- Sistemin kodlarını çalıştırmak, analiz etmek ve raporlamak için uygun beyaz kutu test araçları kullanmak istediğinizde
- Sistemin kodlarını daha iyi anlamak ve iyileştirmek istediğinizde.
Beyaz Kutu Test Araçları
Beyaz kutu testi yapmak için çeşitli araçlar kullanılabilir. Bunlardan bazıları şunlardır:
- Parasoft Jtest: Java programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. Kod kalitesini, güvenliğini ve performansını ölçer. Otomatik test oluşturma, kod analizi ve raporlama özellikleri sunar.
- EclEmma: Java programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. Kod kapsamını, yani test edilen kodların yüzdesini gösterir. Eclipse entegre geliştirme ortamı ile uyumludur.
- NUnit: C# programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. Birim testi, entegrasyon testi ve regresyon testi yapabilir. Test senaryolarını ve sonuçlarını yönetir.
- PyUnit: Python programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. JUnit ile benzer bir yapıya sahiptir. Test durumlarını, test takımlarını ve test koşucularını destekler.
- HTMLUnit: Web tabanlı sistemleri test etmek için kullanılan bir araçtır. Tarayıcı işlevlerini taklit eder ve HTTP istekleri gönderir. JavaScript, HTML, CSS ve AJAX gibi web teknolojilerini destekler.
- CppUnit: C++ programlama dilinde yazılmış sistemleri test etmek için kullanılan bir araçtır. Birim testi ve entegrasyon testi yapabilir. Test durumlarını, test takımlarını ve test koşucularını destekler.
Beyaz Kutu Testi Uygulaması
Python programlama dilinde yazılan kod blokunda değişkenlere değer vererek beyaz kutu testini yapmak istiyorsanız, aşağıdaki adımları izleyebilirsiniz:
- Beyaz kutu testi, kodun iç yapısını ve mantığını kontrol eden bir test yöntemidir. Bu testi yapmak için, kodunuzun tüm yollarını, dallarını ve döngülerini kapsayan test durumları oluşturmanız gerekir.
- Kodunuzun tüm yollarını bulmak için, kodunuzu bir akış diyagramına dönüştürebilir veya kodunuzun her satırını bir numara ile etiketleyebilirsiniz. Sonra, kodunuzun başından sonuna kadar hangi satırların çalıştığını belirleyen bir yol matrisi oluşturabilirsiniz.
- Kodunuzun dallarını ve döngülerini bulmak için, kodunuzda koşullu ifadeler (if, elif, else) veya döngü ifadeleri (for, while) arayabilirsiniz. Bu ifadeler, kodunuzun farklı yollara ayrılmasına veya tekrarlanmasına neden olur. Bu ifadelerin doğru veya yanlış olma durumlarını test etmek için, değişkenlerinize uygun değerler atamanız gerekir.
- Test durumlarınızı oluştururken, girdi olarak kullanacağınız değişken değerlerini, beklediğiniz çıktıyı ve testin başarılı olup olmadığını belirtmeniz gerekir. Test durumlarınızı bir tablo şeklinde düzenleyebilirsiniz.
Örnek olarak, aşağıdaki Python kod bloğunu ele alalım:
# Bir sayının asal olup olmadığını kontrol eden bir fonksiyon
def asal_mi
if n <= 1: # 1. satır
return False # 2. satır
for i in range(2, int(n**0.5) + 1): # 3. satır
if n % i == 0: # 4. satır
return False # 5. satır
return True # 6. satır
Bu kod bloğunda, n değişkenine değer vererek beyaz kutu testi yapmak için aşağıdaki adımları uygulayabiliriz:
- Kodun tüm yollarını bulmak için, kodun her satırını bir numara ile etiketledik. Kodun başından sonuna kadar izleyebileceğimiz üç farklı yol vardır:
- 1 -> 2 -> 6
- 1 -> 3 -> 4 -> 5 -> 6
- 1 -> 3 -> 4 -> 6
- Kodun dallarını ve döngülerini bulmak için, kodda iki koşullu ifade (if) ve bir döngü ifadesi (for) olduğunu görebiliriz. Bu ifadelerin doğru veya yanlış olma durumlarını test etmek için, n değişkenine farklı değerler atayabiliriz. Örneğin, n = 1, n = 4 ve n = 5 gibi.
- Test durumlarını oluşturmak için, girdi olarak n değişkeninin değerini, beklediğimiz çıktıyı (True veya False) ve testin başarılı olup olmadığını (Evet veya Hayır) belirtebiliriz. Test durumlarımızı aşağıdaki gibi bir tablo şeklinde düzenleyebiliriz:
| Test No | Girdi
| ------- | --------- | -------------- | ------------ | ----------------- |
| 1 | 1 | False | False | Evet |
| 2 | 4 | False | False | Evet |
| 3 | 5 | True | True | Evet |
Bu test durumları, kodun tüm yollarını, dallarını ve döngülerini kapsadığı için, beyaz kutu testi için yeterlidir.
GRİ KUTU TESTİ
Gri kutu testi, bir web uygulamasının güvenliğini değerlendirmek için kullanılan bir yöntemdir. Bu yöntemde, test uzmanı uygulamanın iç yapısı hakkında kısmi bilgiye sahiptir. Örneğin, uygulamanın hangi sunucuda çalıştığı, hangi IP adresine sahip olduğu, hangi programlama diliyle yazıldığı gibi bilgileri bilir. Ancak, uygulamanın tam koduna erişimi yoktur. Bu nedenle, test uzmanı hem siyah kutu testi hem de beyaz kutu testi tekniklerini kullanarak uygulamayı test eder. Gri kutu testi, siyah kutu testine göre daha hızlı ve etkili olabilir. Ayrıca, test uzmanının uygulamanın kodunu bilmemesi, testin kullanıcı perspektifinden yapılmasını sağlar.
Gri kutu testi yapmak için çeşitli araçlar kullanılabilir. Bunlardan bazıları şunlardır:
- Selenium: Web uygulamalarını farklı platformlarda ve tarayıcılarda otomatik olarak test etmeye yarayan bir araç paketidir. Python, C# ve JavaScript gibi birçok programlama dilini destekler. Selenium ile test senaryoları oluşturmak ve çalıştırmak mümkündür.
- Appium: Mobil uygulamalar için test otomasyonu sağlayan bir araçtır. IOS, Android ve Windows uygulamalarını test edebilir. Appium, uygulamanın koduna dokunmadan test yapılmasını sağlar.
- NUnit: .Net platformunda yazılan uygulamalara birim testi yapmak için kullanılan bir Framework'tür. Birim testi, uygulamanın küçük parçalarının doğru çalışıp çalışmadığını kontrol etmek için yapılır. NUnit, C#, VB.Net, F# gibi .Net dillerini destekler. NUnit ile test kodları yazmak ve sonuçları görmek kolaydır.
Gri Kutu Testi Uygulaması
Aşağıdaki işlem adımlarına göre gri kutu testini yapınız.
1. Adım: Maillere bakmak için öncelikle oturum açma sayfasında adresi ve şifreyi doğru şekilde yazınız. Giriş başarılı ise kullanıcıya ne gibi haklar verildiğini inceleyiniz.
2. Adım: Maillere bakmak için oturum açma sayfasında adres veya şifreden herhangi biri yanlış yazıldığında kullanıcıya nasıl bir mesaj verildiğini inceleyiniz.
İki adımdan oluşan bu çalışma bir gri kutu test örneğidir. Test kullanıcısı, oturum açma sayfasında şifresini ve mail adresini yazarak bu bilgilerin işlevselliğini test etmeye çalışır. Bir başka deyişle test kullanıcısı gerekli bilgileri girer ve veri tabanındaki bilgilerle bunların doğruluğunu karşılaştırır. Kullanıcı bu şekilde sistem davranışını kontrol eder.
Bu işlem adımlarına göre gri kutu testini yapmak için, test uzmanı şu şekilde bir Python kodu yazabilir:
# Selenium kütüphanesini import ediyoruz
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# Chrome tarayıcısını açıyoruz
driver = webdriver.Chrome()
# Oturum açma sayfasına gidiyoruz
driver.get("https://mail.example.com/login")
# Mail adresi ve şifre alanlarını buluyoruz
mail = driver.find_element_by_id("mail")
password = driver.find_element_by_id("password")
# Adım 1: Doğru mail adresi ve şifre giriyoruz
mail.send_keys("[email protected]")
password.send_keys("123456")
password.send_keys(Keys.RETURN)
# Giriş başarılı ise kullanıcıya verilen hakları kontrol ediyoruz
if driver.current_url == "https://mail.example.com/inbox":
print("Giriş başarılı, kullanıcıya mail okuma, yazma, silme, arşivleme gibi haklar verildi.")
else:
print("Giriş başarısız, kullanıcıya verilen haklar yok.")
# Adım 2: Yanlış mail adresi veya şifre giriyoruz
mail.clear()
password.clear()
mail.send_keys("[email protected]")
password.send_keys("654321")
password.send_keys(Keys.RETURN)
# Kullanıcıya verilen mesajı kontrol ediyoruz
message = driver.find_element_by_id("message")
if message.text == "Mail adresi veya şifre yanlış, lütfen tekrar deneyiniz.":
print("Kullanıcıya doğru mesaj verildi.")
else:
print("Kullanıcıya yanlış mesaj verildi.")
# Tarayıcıyı kapatıyoruz
driver.close()
Siyah Kutu Testi
Siyah kutu testi, bir yazılımın veya sistemin iç yapısını veya kodunu bilmeksizin, sadece girdi ve çıktıları kullanarak test etme yöntemidir. Bu yöntem, test uzmanlarının yazılımın işlevselliğini, performansını, güvenliğini ve kullanılabilirliğini değerlendirmelerine olanak sağlar. Siyah kutu testi, yazılım geliştiricilerin gözünden değil, kullanıcıların gözünden yazılımı test etmeyi amaçlar.
Siyah kutu testinin avantajları, test uzmanlarının kod bilgisine ihtiyaç duymaması, farklı bakış açılarıyla hataları bulabilmesi, testlerin hızlı ve etkin bir şekilde uygulanabilmesi, test senaryolarının gereksinimlere göre oluşturulabilmesi ve büyük ölçekli sistemlerde yüksek verim alınabilmesidir. Siyah kutu testinin dezavantajları ise, sistemin yapısını bilmemekten kaynaklanan hata bulma zorluğu, test edilen kodun tekrara düşebilmesi, karmaşık kod bloklarını test edememesi ve bütün olasılıkları kontrol edememesidir.
Siyah kutu testi yöntemleri, test uzmanlarının test senaryoları tasarlarken kullanabilecekleri farklı tekniklerdir. Bu tekniklerden bazıları şunlardır:
- Eşit bölümlere ayırma: Bu teknikle, girdi değerleri sonuçlarına göre eşit gruplara ayrılır ve her gruptan bir veya birkaç değer seçilerek test edilir.
- Sınır değer analizi: Bu teknikle, girdi değerlerinin sınır noktaları ve yakınlarındaki değerler test edilir. Bu değerler genellikle hata oluşturma olasılığı yüksektir.
- Karar tablosu: Bu teknikle, sistemin farklı koşullara göre nasıl davrandığını gösteren bir tablo oluşturulur ve bu tabloya göre test senaryoları yazılır.
- Durum geçişi: Bu teknikle, sistemin farklı durumlar arasında nasıl geçiş yaptığını ve hangi durumda sonlandığını test etmek için senaryolar oluşturulur.
- Hata tahmini: Bu teknikle, test uzmanları deneyimlerine, sezgilerine veya tahminlerine göre kodda olabilecek hataları belirler ve bunları test eder.
- Grafik tabanlı: Bu teknikle, sistemin nesneleri ve aralarındaki ilişkiler bir grafik olarak gösterilir ve bu grafiğe göre test senaryoları yazılır.
- Karşılaştırma: Bu teknikle, sistemin farklı bağımsız sürümleri birbirleriyle karşılaştırılarak hata bulmaya çalışılır.
SİYAH KUTU TESTİ UYGULAMASI
- 1. Adım: Web sitesine giriş yapınız ve bir kullanıcı girişi oluşturunuz. Bu adımda, web sitesinin kullanıcı kaydı ve girişi yapabilme özelliğini test ederiz. Web sitesine girdiğimizde, kayıt ol veya giriş yap seçeneklerini bulmalıyız. Kayıt ol seçeneğine tıkladığımızda, bize kullanıcı adı, e-posta, şifre gibi bilgileri girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, kayıt işleminin başarılı olduğuna dair bir mesaj almalıyız. Giriş yap seçeneğine tıkladığımızda, kayıtlı olduğumuz kullanıcı adı ve şifreyi girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, giriş işleminin başarılı olduğuna dair bir mesaj almalıyız. Bu adımda, ayrıca, kullanıcı adı veya şifre yanlış girildiğinde, hata mesajı verip vermediğini de kontrol etmeliyiz.
- 2. Adım: Alınacak ürünleri seçiniz ve sepete ekleyiniz. Bu adımda, web sitesinin ürün seçme ve sepete ekleme özelliğini test ederiz. Web sitesinde, aradığımız veya ilgilendiğimiz ürünleri bulabilmeliyiz. Ürünlerin fiyat, resim, açıklama gibi bilgilerini görebilmeliyiz. Ürünlerin stok durumunu, kargo ücretini, teslimat süresini, iade koşullarını gibi bilgileri de görebilmeliyiz. Ürünleri sepete eklemek için, ürün sayfasında sepete ekle butonuna tıklamalıyız. Sepete ekle butonuna tıkladığımızda, sepetimizin güncellendiğine dair bir mesaj almalıyız. Sepetimizdeki ürün sayısını, toplam tutarı, sepeti boşaltma, ürün silme, adet değiştirme gibi seçenekleri de görebilmeliyiz.
- 3. Adım: Sepete gidiniz ve seçilen ürünleri kontrol ediniz. Bu adımda, web sitesinin sepet işlevselliğini test ederiz. Sepete gittiğimizde, seçtiğimiz ürünlerin doğru bir şekilde listelendiğini, fiyat, adet, toplam tutar gibi bilgilerin doğru hesaplandığını, sepeti boşaltma, ürün silme, adet değiştirme gibi seçeneklerin çalıştığını kontrol ederiz. Ayrıca, sepetimizdeki ürünleri değiştirdiğimizde, sepetin güncellendiğine dair bir mesaj almalıyız.
- 4. Adım: Ödeme seçeneklerine bakınız. Bu adımda, web sitesinin ödeme seçeneklerini test ederiz. Sepetimizdeki ürünleri satın almak için, ödeme yap butonuna tıklamalıyız. Ödeme yap butonuna tıkladığımızda, bize fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, ödeme seçeneklerini görmeliyiz. Ödeme seçenekleri arasında, kredi kartı, banka kartı, havale, eft, kapıda ödeme gibi seçenekler olmalı. Bu seçeneklerin her birinin çalışıp çalışmadığını, ödeme bilgilerini doğru girdiğimizde veya yanlış girdiğimizde ne gibi mesajlar verdiğini kontrol etmeliyiz.
- 5. Adım: Uygun ödeme seçeneğini işaretleyiniz. Gerekli ödeme bilgilerini giriniz. Bu adımda, web sitesinin ödeme işlemini test ederiz. Ödeme seçeneklerinden birini seçtikten sonra, gerekli ödeme bilgilerini girmeliyiz. Örneğin, kredi kartı seçtiysek, kart numarası, son kullanma tarihi, cvv kodu gibi bilgileri girmeliyiz. Ödeme bilgilerini girdikten sonra, ödeme yap butonuna tıklamalıyız. Ödeme yap butonuna tıkladığımızda, ödeme işleminin başarılı olduğuna veya başarısız olduğuna dair bir mesaj almalıyız. Ödeme işlemi başarılı olduğunda, sipariş numarası, sipariş detayı, sipariş takip bilgisi gibi bilgileri de görmeliyiz. Ödeme işlemi başarısız olduğunda, hata nedenini ve tekrar deneme seçeneğini de görmeliyiz.
- 6. Adım: Ödeme işlemini gerçekleştiriniz. Bu adımda, web sitesinin ödeme işlemini tamamladığını test ederiz. Ödeme işlemini gerçekleştirdikten sonra, siparişimizin durumunu takip edebilmeliyiz. Web sitesinde, siparişlerim veya hesabım gibi bir bölüm olmalı. Bu bölüme girdiğimizde, sipariş numarası, sipariş detayı, sipariş takip bilgisi, sipariş iptali, sipariş iadesi gibi seçenekleri görmeliyiz. Bu seçeneklerin her birinin çalışıp çalışmadığını kontrol etmeliyiz.
- 7. Adım: Kullanıcı girişi oluşturmadan ürün seçiniz, sepete gidiniz ve ödeme seçeneklerini kontrol ediniz. Bu adımda, web sitesinin kullanıcı girişi olmadan da alışveriş yapılabilmesini test ederiz. Web sitesine giriş yapmadan, ürün seçip sepete ekleyebilmeliyiz. Sepete gittiğimizde, sepetimizdeki ürünleri görebilmeliyiz. Ödeme yap butonuna tıkladığımızda, bize kullanıcı girişi yapmamızı veya misafir olarak devam etmemizi isteyen bir seçenek sunmalı. Misafir olarak devam et seçeneğine tıkladığımızda, bize fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, ödeme seçeneklerini görmeliyiz. Bu adımda, ayrıca, kullanıcı girişi yapmadan da sepeti boşaltma, ürün silme, adet değiştirme gibi seçenekleri kullanabilmeliyiz.
- 8. Adım: Web sitesinde olmayan bir ürünü arayınız ve sitenin hangi hatayı verdiğini kontrol ediniz. Bu adımda, web sitesinin arama özelliğini test ederiz. Web sitesinde, aradığımız ürünü bulabilmek için bir arama kutusu olmalı. Arama kutusuna, web sitesinde olmayan bir ürünü yazıp ara butonuna tıkladığımızda, bize aradığızınızla ilgili bir sonuç bulunamadı gibi bir mesaj vermelidir. Bu mesaj, arama yaptığımız ürünün web sitesinde olmadığını bize bildirmelidir. Ayrıca, bize benzer ürünler, kategoriler, popüler aramalar gibi seçenekler de sunmalıdır. Bu seçenekler, aradığımız ürüne yakın veya ilgili ürünleri bulmamıza yardımcı olmalıdır.
- 9. Adım: Ürün seçiniz, sepete gidiniz ve ödeme seçeneklerinin çalışıp çalışmadığı kontrol ediniz. Bu adımda, web sitesinin ödeme seçeneklerinin doğru çalıştığını test ederiz. Web sitesinde, bir ürün seçip sepete ekledikten sonra, ödeme yap butonuna tıklamalıyız. Ödeme yap butonuna tıkladığımızda, bize fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmemizi isteyen bir form görmeliyiz. Bu formu doldurduktan sonra, ödeme seçeneklerini görmeliyiz. Ödeme seçenekleri arasında, kredi kartı, banka kartı, havale, eft, kapıda ödeme gibi seçenekler olmalı. Bu seçeneklerin her birinin çalışıp çalışmadığını, ödeme bilgilerini doğru girdiğimizde veya yanlış girdiğimizde ne gibi mesajlar verdiğini kontrol etmeliyiz.
Bu aşamaları Python kodu olarak yazmak için, aşağıdaki gibi bir kod yazabiliriz. Bu kod, web sitesinin işlevselliğini test etmek için Selenium gibi bir otomasyon aracı kullanıldığını varsayar. Kod, her adım için yorum satırları içerir.
# Import the selenium webdriver
from selenium import webdriver
# Create a webdriver object
driver = webdriver.Chrome()
# 1. Adım: Web sitesine giriş yapınız ve bir kullanıcı girişi oluşturunuz.
# Web sitesinin URL'sini açınız
driver.get("https://www.alisveris.com")
# Kayıt ol seçeneğini bulunuz ve tıklayınız
register_button = driver.find_element_by_id("register-button")
register_button.click()
# Kayıt formunu doldurunuz
username_input = driver.find_element_by_id("username-input")
email_input = driver.find_element_by_id("email-input")
password_input = driver.find_element_by_id("password-input")
confirm_password_input = driver.find_element_by_id("confirm-password-input")
username_input.send_keys("testuser")
email_input.send_keys("[email protected]")
password_input.send_keys("test1234")
confirm_password_input.send_keys("test1234")
# Kayıt ol butonuna tıklayınız
submit_button = driver.find_element_by_id("submit-button")
submit_button.click()
# Kayıt işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success_message.text == "Kayıt işleminiz başarıyla tamamlandı."
# Giriş yap seçeneğini bulunuz ve tıklayınız
login_button = driver.find_element_by_id("login-button")
login_button.click()
# Giriş formunu doldurunuz
username_input = driver.find_element_by_id("username-input")
password_input = driver.find_element_by_id("password-input")
username_input.send_keys("testuser")
password_input.send_keys("test1234")
# Giriş yap butonuna tıklayınız
submit_button = driver.find_element_by_id("submit-button")
submit_button.click()
# Giriş işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success_message.text == "Giriş işleminiz başarıyla tamamlandı."
# 2. Adım: Alınacak ürünleri seçiniz ve sepete ekleyiniz.
# Arama kutusunu bulunuz ve bir ürün adı yazınız
search_box = driver.find_element_by_id("search-box")
search_box.send_keys("kitap")
# Ara butonuna tıklayınız
search_button = driver.find_element_by_id("search-button")
search_button.click()
# Arama sonuçlarından bir ürünü seçiniz
product_link = driver.find_element_by_class_name("product-link")
product_link.click()
# Ürün sayfasında sepete ekle butonuna tıklayınız
add_to_cart_button = driver.find_element_by_id("add-to-cart-button")
add_to_cart_button.click()
# Sepete ekleme işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success_message.text == "Ürün sepetinize eklendi."
# 3. Adım: Sepete gidiniz ve seçilen ürünleri kontrol ediniz.
# Sepetim seçeneğini bulunuz ve tıklayınız
cart_button = driver.find_element_by_id("cart-button")
cart_button.click()
# Sepetinizdeki ürünleri, fiyatları, adetleri, toplam tutarı kontrol ediniz
product_name = driver.find_element_by_class_name("product-name")
product_price = driver.find_element_by_class_name("product-price")
product_quantity = driver.find_element_by_class_name("product-quantity")
total_price = driver.find_element_by_id("total-price")
assert product_name.text == "Kitap"
assert product_price.text == "10 TL"
assert product_quantity.text == "1"
assert total_price.text == "10 TL"
# Sepeti boşaltma, ürün silme, adet değiştirme gibi seçenekleri bulunuz ve çalıştığını kontrol ediniz
empty_cart_button = driver.find_element_by_id("empty-cart-button")
delete_product_button = driver.find_element_by_id("delete-product-button")
increase_quantity_button = driver.find_element_by_id("increase-quantity-button")
decrease_quantity_button = driver.find_element_by_id("decrease-quantity-button")
empty_cart_button.click()
assert driver.find_element_by_id("empty-cart-message").text == "Sepetiniz boş."
driver.back()
delete_product_button.click()
assert driver.find_element_by_id("empty-cart-message").text == "Sepetiniz boş."
driver.back()
increase_quantity_button.click()
assert product_quantity.text == "2"
assert total_price.text == "20 TL"
decrease_quantity_button.click()
assert product_quantity.text == "1"
assert total_price.text == "10 TL"
# 4. Adım: Ödeme seçeneklerine bakınız.
# Ödeme yap butonunu bulunuz ve tıklayınız
pay_button = driver.find_element_by_id("pay-button")
pay_button.click()
# Fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmenizi isteyen formu doldurunuz
billing_address_input = driver.find_element_by_id("billing-address-input")
shipping_address_input = driver.find_element_by_id("shipping-address-input")
shipping_option_select = driver.find_element_by_id("shipping-option-select")
payment_method_select = driver.find_element_by_id("payment-method-select")
billing_address_input.send_keys("Test sokak, Test mahalle, Test ilçe, Test şehir")
shipping_address_input.send_keys("Test sokak, Test mahalle, Test ilçe, Test şehir")
shipping_option_select.select_by_value("standard")
payment_method_select.select_by_value("credit-card")
# Devam et butonuna tıklayınız
continue_button = driver.find_element_by_id("continue-button")
continue_button.click()
# Ödeme seçeneklerini kontrol ediniz
payment_options = driver.find_elements_by_class_name("payment-option")
assert len(payment_options) == 4
assert payment_options[0].text == "Kredi Kartı"
assert payment_options[1].text == "Banka Kartı"
assert payment_options[2].text == "Havale/EFT"
assert payment_options[3].text == "Kapıda Ödeme"
# 5. Adım: Uygun ödeme seçeneğini işaretleyiniz. Gerekli ödeme bilgilerini giriniz.
# Ödeme seçeneklerinden birini seçiniz
payment_option = payment_options[0]
payment_option.click()
# Ödeme bilgilerini giriniz
card_number_input = driver.find_element_by_id("card-number-input")
card_expiry_input = driver.find_element_by_id("card-expiry-input")
card_cvv_input = driver.find_element_by_id("card-cvv-input")
card_number_input.send_keys("1111-2222-3333-4444
card_expiry_input.send_keys("12/23")
card_cvv_input.send_keys("123")
# Ödeme yap butonuna tıklayınız
pay_button = driver.find_element_by_id("pay-button")
pay_button.click()
# Ödeme işleminin başarılı veya başarısız olduğuna dair mesajı kontrol ediniz
payment_message = driver.find_element_by_id("payment-message")
assert payment_message.text == "Ödeme işleminiz başarıyla tamamlandı." or payment_message.text == "Ödeme işleminiz başarısız oldu."
# 6. Adım: Ödeme işlemini gerçekleştiriniz.
# Siparişlerim veya hesabım seçeneğini bulunuz ve tıklayınız
orders_button = driver.find_element_by_id("orders-button")
orders_button.click()
# Sipariş numarası, sipariş detayı, sipariş takip bilgisi, sipariş iptali, sipariş iadesi gibi seçenekleri kontrol ediniz
order_number = driver.find_element_by_class_name("order-number")
order_details = driver.find_element_by_class_name("order-details")
order_tracking = driver.find_element_by_class_name("order-tracking")
order_cancel = driver.find_element_by_class_name("order-cancel")
order_return = driver.find_element_by_class_name("order-return")
assert order_number.text == "123456789"
assert order_details.text == "Kitap, 1 adet, 10 TL"
assert order_tracking.text == "Siparişiniz kargoya verildi."
assert order_cancel.text == "Siparişinizi iptal etmek için tıklayınız."
assert order_return.text == "Siparişinizi iade etmek için tıklayınız."
# Sipariş iptali, sipariş iadesi gibi seçenekleri bulunuz ve çalıştığını kontrol ediniz
order_cancel.click()
assert driver.find_element_by_id("cancel-message").text == "Siparişiniz iptal edildi."
driver.back()
order_return.click()
assert driver.find_element_by_id("return-message").text == "Siparişiniz iade edildi."
# 7. Adım: Kullanıcı girişi oluşturmadan ürün seçiniz, sepete gidiniz ve ödeme seçeneklerini kontrol ediniz.
# Web sitesinden çıkış yapınız
logout_button = driver.find_element_by_id("logout-button")
logout_button.click()
# Arama kutusunu bulunuz ve bir ürün adı yazınız
search_box = driver.find_element_by_id("search-box")
search_box.send_keys("kalem")
# Ara butonuna tıklayınız
search_button = driver.find_element_by_id("search-button")
search_button.click()
# Arama sonuçlarından bir ürünü seçiniz
product_link = driver.find_element_by_class_name("product-link")
product_link.click()
# Ürün sayfasında sepete ekle butonuna tıklayınız
add_to_cart_button = driver.find_element_by_id("add-to-cart-button")
add_to_cart_button.click()
# Sepete ekleme işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success_message.text == "Ürün sepetinize eklendi."
# Sepetim seçeneğini bulunuz ve tıklayınız
cart_button = driver.find_element_by_id("cart-button")
cart_button.click()
# Sepetinizdeki ürünleri, fiyatları, adetleri, toplam tutarı kontrol ediniz
product_name = driver.find_element_by_class_name("product-name")
product_price = driver.find_element_by_class_name("product-price")
product_quantity = driver.find_element_by_class_name("product-quantity")
total_price = driver.find_element_by_id("total-price")
assert product_name.text == "Kalem"
assert product_price.text == "1 TL"
assert product_quantity.text == "1"
assert total_price.text == "1 TL"
# Sepeti boşaltma, ürün silme, adet değiştirme gibi seçenekleri bulunuz ve çalıştığını kontrol ediniz
empty_cart_button = driver.find_element_by_id("empty-cart-button")
delete_product_button = driver.find_element_by_id("delete-product-button")
increase_quantity_button = driver.find_element_by_id("increase-quantity-button")
decrease_quantity_button = driver.find_element_by_id("decrease-quantity-button")
empty_cart_button.click()
assert driver.find_element_by_id("empty-cart-message").text == "Sepetiniz boş."
driver.back()
delete_product_button.click()
assert driver.find_element_by_id("empty-cart-message").text == "Sepetiniz boş."
driver.back()
increase_quantity_button.click()
assert product_quantity.text == "2"
assert total_price.text == "2 TL"
decrease_quantity_button.click()
assert product_quantity.text == "1"
assert total_price.text == "1 TL"
# Ödeme yap butonunu bulunuz ve tıklayınız
pay_button = driver.find_element_by_id("pay-button")
pay_button.click()
# Kullanıcı girişi yapmamızı veya misafir olarak devam etmemizi isteyen bir seçenek sunulduğunu kontrol ediniz
login_option = driver.find_element_by_id("login-option")
guest_option = driver.find_element_by_id("guest-option")
assert login_option.text == "Kullanıcı girişi yapınız."
assert guest_option.text == "Misafir olarak devam ediniz."
# Misafir olarak devam et seçeneğine tıklayınız
guest_option.click()
# Fatura ve teslimat adresi, kargo seçeneği, ödeme yöntemi gibi bilgileri girmenizi isteyen formu doldurunuz
billing_address_input = driver.find_element_by_id("billing-address-input")
shipping_address_input = driver.find_element_by_id("shipping-address-input")
shipping_option_select = driver.find_element_by_id("shipping-option-select")
payment_method_select = driver.find_element_by_id("payment-method-select")
billing_address_input.send_keys("Test sokak, Test mahalle, Test ilçe, Test şehir")
shipping_address_input.send_keys("Test sokak, Test mahalle, Test ilçe, Test şehir")
shipping_option_select.select_by_value("standard")
payment_method_select.select_by_value("credit-card")
# Devam et butonuna tıklayınız
continue_button = driver.find_element_by_id("continue-button")
continue_button.click()
# Ödeme seçeneklerini kontrol ediniz
payment_options = driver.find_elements_by_class_name("payment-option")
assert len(payment_options) == 4
assert payment_options[0].text == "Kredi Kartı"
assert payment_options[1].text == "Banka Kartı"
assert payment_options[2].text == "Havale/EFT"
assert payment_options[3].text == "Kapıda Ödeme"
# 8. Adım: Web sitesinde olmayan bir ürünü arayınız ve sitenin hangi hatayı verdiğini kontrol ediniz.
# Arama kutusunu bulunuz ve web sitesinde olmayan bir ürünü yazınız
search_box = driver.find_element_by_id("search-box")
search_box.send_keys("telefon")
# Ara butonuna tıklayınız
search_button = driver.find_element_by_id("search-button")
search_button.click()
# Aradığınızla ilgili bir sonuç bulunamadı gibi bir mesaj verdiğini kontrol ediniz
no_result_message = driver.find_element_by_id("no-result-message")
assert no_result_message.text == "Aradığınızla ilgili bir sonuç bulunamadı."
# Benzer ürünler, kategoriler, popüler aramalar gibi seçenekler sunduğunu kontrol ediniz
similar_products = driver.find_elements_by_class_name("similar-product")
categories = driver.find_elements_by_class_name("category")
popular_searches = driver.find_elements_by_class_name("popular-search")
assert len(similar_products) > 0
assert len(categories) > 0
assert len(popular_searches) > 0
# 9. Adım: Ürün seçiniz, sepete gidiniz ve ödeme seçeneklerinin çalışıp çalışmadığı kontrol ediniz.
# Arama kutusunu bulunuz ve bir ürün adı yazınız
search_box = driver.find_element_by_id("search-box")
search_box.send_keys("defter")
# Ara butonuna tıklayınız
search_button = driver.find_element_by_id("search-button")
search_button.click()
# Arama sonuçlarından bir ürünü seçiniz
product_link = driver.find_element_by_class_name("product-link")
product_link.click()
# Ürün sayfasında sepete ekle butonuna tıklayınız
add_to_cart_button = driver.find_element_by_id("add-to-cart-button")
add_to_cart_button.click()
# Sepete ekleme işleminin başarılı olduğuna dair mesajı kontrol ediniz
success_message = driver.find_element_by_id("success-message")
assert success message = "Bu kod, web sitesinin işlevselliğini test etmek için Python dilinde yazılmış bir otomasyon kodudur. Kod, web sitesinin kullanıcı kaydı, girişi, ürün seçme, sepete ekleme, ödeme yapma, sipariş takip etme gibi özelliklerini kontrol eder. Kod, her adım için web sitesindeki ilgili elementleri bulur, gerekli işlemleri yapar ve beklenen sonuçları karşılaştırır. Kod, herhangi bir hata veya başarısızlık durumunda bunu bildirir. Kod, web sitesinin kullanıcı girişi olmadan da alışveriş yapılabilmesini, arama özelliğini, ödeme seçeneklerini de test eder. Kod, web sitesinin işlevselliğini doğrulamak için faydalı bir araçtır."
Kodu çalıştırmak için şu aşamaları takip etmeniz gerekir:
- Bu kodu çalıştırmak için, öncelikle Selenium gibi bir otomasyon aracını bilgisayarınıza kurmanız gerekmektedir. Selenium, web sitelerini otomatik olarak açıp, test etmenizi sağlayan bir kütüphanedir.
- Bu kodu çalıştırmak için, ayrıca, web sitesinin URL'sini, kullanıcı adı ve şifrenizi, ödeme bilgilerinizi gibi değişkenleri kodun başında tanımlamanız gerekmektedir. Bu değişkenler, web sitesine giriş yapmanızı ve ödeme yapmanızı sağlayacaktır.
- Bu kodu çalıştırmak için, son olarak, kod dosyasını bir Python editöründe açıp, çalıştır butonuna basmanız yeterlidir. Kod, web sitesini otomatik olarak açacak ve test adımlarını uygulayacaktır. Kod, test sonuçlarını ekranda gösterecektir.


