Asap menguji kandidat rilis dengan autotest dalam 15 menit

Nama saya Lilia, saya QA Lead di salah satu proyek grup keuangan BCS (layanan untuk memilih penawaran yang menguntungkan bagi klien dari sejumlah produk pinjaman), dan hari ini saya akan memberi tahu Anda bagaimana kami mengetes smock testing, masalah apa yang kami temui, dan tumpukan teknologi apa yang kami gunakan.

Awalnya kami memutuskan untuk mengotomatisasi pengujian regresi, tetapi seiring berjalannya waktu, fungsi berubah dan kami menyadari bahwa cukup banyak waktu dihabiskan untuk mendukung autotest yang sudah ditulis. Oleh karena itu, mereka memutuskan untuk mengotomatisasi tes smok terlebih dahulu, dan kemudian mengembangkannya untuk secara otomatis melakukan pengujian regresi. Departemen pengujian ditugaskan mengotomatiskan pengujian baju sesegera mungkin. proyek terus tumbuh dan memperoleh fitur tambahan.

Apa itu pengujian smok


Pengujian asap, seperti juga disebut "pengujian asap", adalah tes cepat dari fungsi yang paling kritis.

Pada proyek kami:

  • Registrasi / otorisasi.
  • Pintu masuk
  • Mengisi kuesioner.
  • Penawaran showcase.
  • Mengirim aplikasi / mengklik tautan ke situs web mitra.
  • Umpan balik.
  • Memblokir.

Stack teknologi untuk menulis autotest


Kami menulis autotest pada tumpukan seperti itu: Laporan Java + Selenium + Mentimun + di Allure2.

gambar

BDD Auto Tests untuk Smok Testing


1. File fitur dengan ekstensi .feature yang menggambarkan skrip pengujian di Gerkin.

Contoh:

:  ,     @all :              :      :      **********  :       :       ****  :         :            :       :       :       :       :       

2. Langkah langkah. Ini berisi kelas yang menggambarkan tindakan dengan elemen di halaman dan memvalidasi elemen-elemen ini.

Contoh:

 @When("^  (.*)") public void pressKey(String key) { webElementUtils.pressKey(key); } @When("^(.*):   (.*)") public void press(String pageTitle, String elementName) { waitUtils.waitElementToBeClickable(getWebElementOnWebPageWithWaiter(elementName, pageTitle)).click(); } @When("^(.*):    (.*)") public void checkCheckbox(String pageTitle, String elementName) { WebElement element = getWebElementOnWebPageWithWaiter(elementName, pageTitle); if (!webElementUtils.isCheckboxSelected(element)) { element.click(); } } @When("^(.*):    (.*)") public void uncheckCheckbox(String pageTitle, String elementName) { WebElement element = getWebElementOnWebPageWithWaiter(elementName, pageTitle); if (webElementUtils.isCheckboxSelected(element)) { element.click(); } } @And("^(.*):    (.*)$") public void erase(String pageTitle, String elementName) { WebElement element = getWebElementOnWebPageWithWaiter(elementName, pageTitle); webElementUtils.clearElement(element); } @And("^(.*):   (.*)  (.*)$") public void enterValue(String pageTitle, String elementName, String text) { WebElement element = getWebElementOnWebPageWithWaiter(elementName, pageTitle); webElementUtils.fillElementWithText(element, expressionUtils.parseString(text)); } @And("^(.*):  (.*)  (.*)$") public void selectValue(String pageTitle, String dropdownListName, String value) { WebElement element = getWebElementOnWebPageWithWaiter(dropdownListName, pageTitle); webElementUtils.selectValueFromCombobox(element, value); } @Then("^(.*):  (.*)  $") public void elementDoesNotContainAnyText(String pageTitle, String elementName) { WebElement element = getWebElementOnWebPageWithWaiter(elementName, pageTitle); assertEquals("", webElementUtils.getTextFromWebElement(element).trim()); } @Then("^(.*):  (.*)    (.*)$") public void checkSliderPosition(String pageTitle, String elementName, String expectedPosition) { WebElement element = getWebElementOnWebPageWithWaiter(elementName, pageTitle); String sliderTrackPosition = StringUtils.substringBetween(element.findElement(By.cssSelector(".rc-slider-track")).getAttribute("style"), "width: ", ";"); String sliderHandlePosition = StringUtils.substringBetween(element.findElement(By.cssSelector(".rc-slider-handle")).getAttribute("style"), "left: ", ";"); assertEquals(expectedPosition, sliderTrackPosition); assertEquals(expectedPosition, sliderHandlePosition); } @Then("^(.*):   (.*)$") public void checkComponentIsDisplayed(String pageTitle, String component) { WebElement element = getWebElementOnWebPageWithWaiter(component, component); assertTrue(webElementUtils.isElementVisible(element)); } @When("^(.*):   (.+)  (.*)$") public void loadFileInField(String pageTitle, String fileName, String elementName) { WebElement element = getWebElementOnWebPage(elementName, pageTitle); File file = new File(Objects.requireNonNull(getClass().getClassLoader().getResource(fileName)).getFile()); element.sendKeys(file.getAbsolutePath()); } @Then("^(.+):   (.+)  (.+)   (.+)$") public void checkAttributeInElement(String pageTitle, String elementName, String attributeName, String expectedValue) { WebElement element = getWebElementOnWebPage(elementName, pageTitle); String attribute = webElementUtils.getAttribute(element, attributeName); String message = String.format(" '%s'   '%s'   '%s'    .\n" + " : '%s'.\n : '%s'.\n", attributeName, elementName, pageTitle, expectedValue, attribute); assertEquals(message, expectedValue, attribute); } @Then("^(.+):   (.+)  (.+)/$") public void checkValueTag(String pageTitle, String tagName, String expectedValue) { WebElement title = webDriver.findElement(By.tagName(tagName)); assertEquals(expectedValue, title.getAttribute("innerHTML").trim()); } } 

3. Bekerja dengan pelacak pada halaman (pola PageObject)

Contoh:

 import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import ru.bcs.creditmarkt.acceptance.pageobject.annotation.PageObject; import ru.yandex.qatools.htmlelements.annotations.Name; @PageObject(title = "", path = "/entry/login") public class LoginPage extends WebPage { @Name(" ") @FindBy(xpath = "//a[text()='']") private WebElement registrationLink; @Name(" ") @FindBy(xpath = "//a[text()='']") private WebElement loginLink; @Name(" ") @FindBy(css = "#phone") private WebElement phoneInput; @Name("  ") @FindBy(css = "button[type=submit]") private WebElement receiveCodeButton; @Name("  ") @FindBy(css = "input#sms") private WebElement smsInput; @Name("      ") @FindBy(css = "button#personalAgreement") private WebElement personalAgreementCheckbox; @Name(" -") @FindBy(css = "div.wa-userpic") private WebElement chatBotIcon; } 

4. Laporkan di Allure2

gambar

Pengaturan CI


Saat kami sedang menulis autotest, grup keuangan BCS muncul Selenoid, dan kami dapat mengonfigurasi peluncuran tes di pipit GitLab

Organisasi penulisan autotest untuk stan yang berbeda


Kami memiliki beberapa stand tempat pengembangan, debugging, dan penerimaan berlangsung, dan ada juga banyak stand fitur di mana kami menguji fungsi baru yang dikembangkan oleh tim yang didistribusikan.

Kami juga memiliki beberapa dudukan cabang yang sesuai dengan lingkungan pengembangan yang berbeda, ketika mengubah file pada dudukan, dudukan yang sesuai dengan pengujian otomatis dimulai secara otomatis.

Total


Sekarang di proyek kami, ketika menerbitkan rilis pada stand penerimaan, satu set penuh tes smok secara otomatis dilakukan dalam 15 menit dalam mode otomatis. Bergantung pada hasil, tim pengujian memutuskan untuk menerima kandidat rilis untuk pengujian untuk pengujian regresi.

Source: https://habr.com/ru/post/id459734/


All Articles