在15分钟内通过自动测试对候选发布软件进行烟雾测试

我的名字叫莉莉亚(Lilia),我是BCS金融集团的一个项目的质量保证负责人(一项服务,可以从许多贷款产品中为客户选择优惠价格),今天我将告诉您我们如何进行自动模拟测试,遇到的问题以及使用的技术栈。

最初,我们决定自动化回归测试,但是随着时间的流逝,功能发生了变化,我们意识到花了很多时间来支持已经编写的自动测试。 因此,他们决定先使smok测试自动化,然后再扩展它以自动进行回归测试。 测试部门的任务是尽快进行工作服测试的自动化。 该项目继续发展并获得了更多功能。

什么是烟雾测试


烟雾测试(也称为“烟雾测试”)是对最关键功能的快速测试。

在我们的项目中:

  • 注册/授权。
  • 入口处
  • 填写问卷。
  • 展示优惠。
  • 发送应用程序/单击指向合作伙伴网站的链接。
  • 反馈。
  • 阻塞。

编写自动测试的技术堆栈


我们在这样的堆栈上编写自动测试:Java + Selenium + Cucumber + Allure2中的报告。

图片

用于烟雾测试的BDD自动测试


1.扩展名为.feature的功能文件,其中包含Gerkin中测试脚本的描述。

一个例子:

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

2.步骤步骤。 它包含描述页面上元素的操作并验证这些元素的类。

一个例子:

 @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.使用页面上的定位器(PageObject模式)

一个例子:

 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. Allure2中的报告

图片

CI设置


在编写自动测试时,BCS财务小组出现了Selenoid,并且我们能够在pipline GitLab中配置测试的启动

组织不同展位的自动测试写作


我们在几个展台上进行开发,调试和验收,还有许多功能展台,我们可以测试分布式团队开发的新功能。

我们还有几个分支支架,分别对应于不同的开发环境,当更改支架上的文件时,具有自动测试的相应支架会自动启动。

合计


现在在我们的项目中,当在验收台上发布发行版时,将在15分钟内以自动模式自动执行全套smok测试。 根据结果​​,测试团队决定接受候选发布版本进行回归测试。

Source: https://habr.com/ru/post/zh-CN459734/


All Articles