Gauge ve Java ile BDD nasıl yapılır?(Davranışa Yönelik Geliştirme — Behavioral Driven Development)

Tuğçe Akın
3 min readDec 6, 2019

--

Merhaba,

Bu yazımda size basit bir login senaryosu üzerinden BDD ve Gauge’ten bahsedeceğim.

Behaviour Driven Development ilk olarak 2009 yılında Dan North tarafından ortaya atılmıştır. Bu test yaklaşımında yazılmış olan kodları test etmek yerine kullanıcı davranışlarının test edilmesi hedeftir. BDD, TDD mantığının karmaşıklığını basitleştirmek için ortaya çıkmıştır. TDD’ den biraz bahsedecek olursak yazılım kodlarından önce test senaryolarının yazıldığı yaklaşımdır diyebiliriz. BDD mantığı anlaşılır bir yapıya sahiptir. Müşteri ile daha sağlıklı iletişim kurulur. TDD’ ye göre BDD nin maliyeti daha düşüktür.

Projenin genel mimarisi aşağıdaki gibidir. IDE olarak JetBrains firmasına ait IntelliJ IDEA programının ücretsiz sürümü olan Community’i kullanacağım.

Örnek bir proje üzerinden gidelim. Projede login senaryosunu anlatacağım. İlk olarak maven projesi oluşturdum ve aşağıdaki kütüphaneleri ekledim. Kütüphaneleri Maven Repository sitesinden alabilirsiniz.

pom.xml

<dependencies>
<dependency>
<groupId>io.github.aktoluna</groupId>
<artifactId>slnarch-junit</artifactId>
<version>${slnarch.version}</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.gauge</groupId>
<artifactId>gauge-java</artifactId>
<version>${gauge.java.version}</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.6</version>
</dependency>
</dependencies>

Java kodlarını yazdığımız dosyamız:

Java kodlarını yazdığımız step.java dosyamızda metodlar bulunur. Tıklama ve değer yazma metotlarına ihtiyacımız olacak. Metotlara anlaşılır bir isim verdik. @Step ile başlayan yerlere json dosyamızda kullanacağımız cümleleri yazacağız. <> işaretlerinin arasına da jsonda verdiğimiz key leri yazacağız. Json dosyasının ne işe yaradığını ileriki bölümlerde anlatacağım.

Step.java

protected void waitVisibilityOfElementLocatedKey(String key) {
ElementInfo elementInfo = StoreHelper.INSTANCE.findElementInfoByKey(key);
waitVisibilityOfElementLocatedBy(ElementHelper.getElementInfoToBy(elementInfo));

}
protected void waitElementToBeClickableWebElement(WebElement webElement) {
try {
waitingAction.waitUntil(ExpectedConditions
.elementToBeClickable(webElement));
}catch (Exception e){
logger.error(webElement + "--> Element Not To Be Clickable. " + e.getStackTrace().toString());
}
}
@Step({"<key> li elemente tikla"})
public void clickElementByKey(String key) {
WebElement webElement = findElementByKey(key);
waitVisibilityOfElementLocatedKey(key);
waitElementToBeClickableWebElement(webElement);
webElement.click();
}
@Step({"<key> li elemente <text> degerini yaz"})
public void sendKeyByKey(String key, String text) {
WebElement webElement = findElementByKey(key);
waitVisibilityOfElementLocatedKey(key);
webElement.clear();
webElement.sendKeys(text);
}
WebElement webElement = findElementByKey(key); Bu satırda elementimizi buluyoruz. Bir elementi bir web sayfasından nasıl alırız bunu Selenium.. adlı makalemde öğrenebilirsiniz.waitVisibilityOfElementLocatedKey(key); Buradaki metod bekleme işlemini yapıyor.

Login olmak için yazdığımız spec dosyamız: Tırnak içinde yazdığımız değerleri jsonda key olarak isimlendiriyoruz. Bir üstte bahsettiğimiz <> işaretlerinin yerine gelen key leri spec dosyamızda görüyoruz. Hangi elementte işlem yapılacağını böylelikle belirtmiş oluyoruz.

login.spec

* "edtUsername" li elemente "tugce" degerini yaz
* "edtPassword" li elemente "123" degerini yaz
* "slctFacility" li elemente tikla
* "1" saniye bekle
* "X" li elemente tikla
* "btnLogin" li elemente tikla
* "1" saniye bekle

login.json

Elementlerimizi sisteme tanıtmak için aldığımız id, css, xpath leri .json uzantılı dosyalarda tutuyoruz.

Json uzantılı dosyamızda bir elemente 3 özellik vererek tanımlıyoruz. Key elementimizin ismi, value elementin sayfadan aldığımız yolu, type da elementin yolunu hangi tipte aldığımızı belirtir.

Ve böylelikle basit bir login olma case i yapmış olduk.

[
{
"key": "edtUsername",
"value": "username",
"type": "id"
},
{
"key": "edtPassword",
"value": "password",
"type": "id"
},
{
"key": "slctFacility",
"value": "facilityCombo",
"type": "id"
},
{
"key": "btnLogin",
"value": "btnsubmit",
"type": "id"
},
{
"key": "btnMenuUser",
"value": ".core-menu-user",
"type": "css"
},
{
"key": "btnLogout",
"value": ".core-menu-user>div>div>ul>li:last-child>a",
"type": "css"
},
{
"key": "Test_Core",
"value": "//option[contains(text(),'TEST CORE')]",
"type": "xpath"
}
]

Basit bir login senaryosu üzerinden BDD nasıl yapılır ve gauge nasıl uygulanır öğrenmiş olduk. Bir sonraki yazılarımda görüşmek üzere.

--

--

Tuğçe Akın
Tuğçe Akın

Written by Tuğçe Akın

Developer in Test @Trendyol Group

No responses yet