Protractor ile Apinizer’ı Nasıl Test Ediyoruz?

Elif Duman
Apinizer
Published in
4 min readDec 2, 2021

Bu yazı Apinizer’da Protractor ile uçtan uca (end-to-end) testlerin nasıl gerçekleştirildiği ile ilgilidir. Protractor hakkında daha fazla bilgi almak için bir önceki yazıyı buradan okuyabilirsiniz.

Apinizer’da uçtan uca (e2e) testlerimiz için Protractor’ı kullanıyoruz. Öncelikle kısaca uçtan uca test nedir:

https://medium.com/@jasonphilipcosta/e2e-testing-in-the-real-world-f30991bf3cca

Uçtan uca test, uygulama akışının beklendiği gibi davrandığından emin olmak için tüm yazılım ürününü baştan sona test eden bir test tekniğidir. Uçtan uca testin temel amacı, gerçek kullanıcı senaryosunu simüle ederek ve test edilen sistemi ve bileşenlerini entegrasyon ve veri bütünlüğü için doğrulayarak son kullanıcının gözünden test etmektir.

Apinizer’da testler “crudve “scenariotestleri olarak temelde iki ayrı başlığa ayrılmış durumdadır. Bu yazıda crud testinden bir örnekle neler yaptığımızı açıklayacağım.

Crud Testi: Basic Authentication e2e Test

Bu örnek Global Policies menüsü altında Basic Authentication politikasının eklenmesini test eder.

Bunun için öncelikle politika için gerekli olan Variable’ı oluşturmak üzere Variable sayfasına gidilir, ardından Basic Authentication sayfasına gelinerek politika eklenir ve ardından arama yapılarak eklenen politika silinir. En son adımda ise eklenmiş olan Variable silinerek platformdan çıkış yapılır ve test sonlanır.

Test akışı

Menüden Basic Authentication’ı seçtiğimizde karşımıza aşağıdaki ekran gelir:

Basic Authentication ekranı

Create butonuna basıldığında ise yeni bir Basic Authentication ekleme ekranı açılır ve bu da aşağıdaki gibidir:

Basic Authentication — Create ekranı

Bu ekranları test etmek için öncelikle ekranlardaki etkileşime gireceğimiz nesneleri tanımlıyoruz. Bunun için Page Object yapısını kullanıyoruz. Bu sayede kod tekrarını azaltmış oluyoruz aynı zamanda da test senaryosunun bakımı kolaylaşmış oluyor.

Basic Authentication ekranına ait Page Object sayfasına göz atmak isterseniz Github üzerinden kodları inceleyebilirsiniz.

Basic Authentication Page Object

Burada Basic Authentication sayfası açıldığında karşılaşılan ilk ekrana ait nesneler PolicyBasicAuthenticationComponentPage sınıfında, create butonu ile yeni bir Basic Authentication oluşturma sayfasına ait nesneler PolicyBasicAuthenticationUpdateComponentPage sınıfında ve PolicyBasicAuthenticationDeleteDialogComponentPage sınıfında ise Basic Authentication’ı silmek istediğimizde açılan ekrana ait nesneler bulunmaktadır.

Şimdi gelelim test adımlarımızı yazdığımız spec dosyasına:

Şimdi adım adım inceleyelim:

before(async () => {
await browser.get('/');
navBarPage = new NavBarPage(true);
signInPage = await navBarPage.getSignInPage();
await signInPage.autoSignInUsing(USER_ADMIN, PASSWORD_ADMIN);
});
  • Burada before ile test başlamadan önce yapılacakları belirtilir. İlk önce Apinizer adresine gidilir ve önceden belirlenmiş olan kullanıcı adı ve parola ile hesaba giriş yapılır.
it('should select Default Project', async () => {
headerBaseComponent = new HeaderBaseComponent();
await headerBaseComponent.goToDefaultProject();
});
  • Proje menüsünden Default Project seçilir.
it('should first create required variable', async () => {
await navBarPage.goToVariable();
variableComponentPage = new VariableComponentPage();
await variableComponentPage.clickOnCreateButton();
variableUpdateComponentPage = new VariableUpdateComponentPage();
await variableUpdateComponentPage.fillAndSaveHeaderVariable(NAME_PREFIX + 'basic', 'Authorization');
await navBarPage.clickOnDevelopMenu();
});
  • Basic Authentication oluştururken kullanmak için bir Variable eklenmiş olmalı. Bu yüzden önce Variable sayfasına gidilerek bir variable oluşturulur.
it('should load Basic Authentication Page', async () => {
await navBarPage.goToGlobalPolicy('policy-basic-authentication');
policyBasicAuthenticationComponentPage = new PolicyBasicAuthenticationComponentPage();
});
  • Global Policies menüsünden Basic Authentication sayfasına gelinir.
it('should save Basic Authentication', async () => {
await policyBasicAuthenticationComponentPage.clickOnCreateButton();
await policyBasicAuthenticationUpdateComponentPage.fillAndSaveBasicAuthPolicyLocally(
NAME_PREFIX + 'policyBasicAuth',
'description',
true,
true,
'Auth-Header-Name',
NAME_PREFIX + 'basic',
NAME_PREFIX + 'basic',
AUTH_PROVIDER_TYPE_SECRET_MANAGER,
'Authentication'
);
});
  • Bu adımda bir Basic Authentication oluşturulur. Bunun için daha önce page object’te yazılmış olan fillAndSaveBasicAuthPolicyLocally() metodu kullanılır.
it('should search by value in Basic Authentication Page', async () => {
await policyBasicAuthenticationComponentPage.setQueryNameInput(NAME_PREFIX + 'policyBasicAuth');
expect(await policyBasicAuthenticationComponentPage.getQueryNameInput()).to.eq(NAME_PREFIX + 'policyBasicAuth');
});
  • Basic Authentication sayfasında arama kutucuğu kullanılarak eklenmiş olan politika aranır.
it('should delete Basic Authentication', async () => {
const nbButtonsBeforeDelete = await policyBasicAuthenticationComponentPage.countDropButtons();
await policyBasicAuthenticationComponentPage.clickOnDropButton();
await policyBasicAuthenticationComponentPage.clickOnDeleteButton();
policyBasicAuthenticationDeleteDialogComponentPage = new PolicyBasicAuthenticationDeleteDialogComponentPage();
expect(await policyBasicAuthenticationDeleteDialogComponentPage.getDialogTitle()).to.eq(
'apinizerManagerApp.PolicyBasicAuthentication.delete.question'
);
await policyBasicAuthenticationDeleteDialogComponentPage.clickOnConfirmButton();
const nbButtonsAfterDelete = await policyBasicAuthenticationComponentPage.countDropButtons();
expect(nbButtonsAfterDelete).to.eq(nbButtonsBeforeDelete - 1);
await navBarPage.clickOnDevelopMenu();
});
  • Arama sonucunda bulunan politika bu adımda silinir.
it('should last delete Variable', async () => {
await navBarPage.goToVariable();
await variableComponentPage.deleteAlreadyExistsVariable(NAME_PREFIX + 'basic');
});
  • Eklenmiş olan variable da silinir.
after(async () => {
await navBarPage.autoSignOut();
});
  • after ile test bittiğinde gerçekleştirilecek olan son adım söylenir. Apinizer platformundan çıkış yapılarak test sonlanır.

Apinizer platformumuzda Protractor ile nasıl test yazdığımızı örnek vererek anlattım. Hem sayfa yapılarını hem de test akışını incelediğim bu yazı umarım faydalı olmuştur. Bir sonraki yazıda görüşmek üzere! 🚀

--

--