7 причин использовать автоматизированные тесты в Selenium, JUnit5 и Gauge Framework

7 причин использовать автоматизированные тесты в Selenium, JUnit5 и Gauge Framework

14 февраля 2023 г.

Автоматические тесты можно запускать параллельно в нескольких средах, в нескольких браузерах, на нескольких устройствах и в нескольких наборах данных.

Эти тесты менее подвержены человеческим ошибкам, чем ручные тесты, что может помочь повысить точность и надежность процесса тестирования. Кроме того, они воспроизводимы, последовательны и надежны, что помогает уменьшить число ложноположительных и ложноотрицательных результатов. В этой статье я расскажу о том, почему вам стоит использовать автоматизированные тесты в Selenium, JUnit5 и Gauge Framework.

  1. Повышает эффективность

Автоматические тесты можно выполнять быстрее, чем ручные, что позволяет выполнять больше тестов за более короткий период времени. Это может помочь быстрее выявлять проблемы и ошибки, экономя время и ресурсы в долгосрочной перспективе. Автоматизированные тесты могут выполняться в нескольких средах, в нескольких браузерах, на нескольких устройствах и в нескольких наборах данных параллельно, что повышает общую эффективность процесса тестирования.

```java импортировать com.thoughtworks.gauge.Step импортировать org.openqa.selenium.By импортировать org.openqa.selenium.WebDriver импортировать org.openqa.selenium.chrome.ChromeDriver

класс AutomationTest { частный драйвер lateinit var: WebDriver @Step("Откройте браузер и перейдите на сайт") весело openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") драйвер = хромдрайвер() driver.get("https://www.example.com")

@Step("Искать <запрос>") забавный поиск (searchTerm: String) { driver.findElement(By.name("q")).sendKeys(searchTerm) driver.findElement(By.name("btnK")).click()

@Step("Закройте браузер") весело closeBrowser() { водитель.выйти() } } ```

Это пример простого сценария автоматизации тестирования, написанного на Kotlin, который использует Selenium для взаимодействия с веб-страницей и Gauge framework для организации и запуска тестов. Этот сценарий открывает браузер, переходит на веб-сайт, выполняет поиск и затем закрывает браузер.

Поскольку этот тест автоматизирован, он может выполняться быстрее, чем если бы он выполнялся вручную.

Это всего лишь простой пример, в реальном сценарии использования у вас может быть несколько сценариев, несколько тестовых наборов и несколько наборов тестов, которые можно автоматизировать и запускать параллельно, повышая общую эффективность процесса тестирования.

Стоит отметить, что если вы работаете с веб-приложением, существуют другие фреймворки и инструменты, которые можно использовать вместе с Selenium или вместо него, такие как Cypress, WebDriverIO и TestCafe, каждый из которых имеет свои особенности и преимущества. .

n
  1. Повышает точность

Автоматические тесты менее подвержены человеческим ошибкам, чем ручные тесты, что может помочь повысить точность и надежность процесса тестирования. Автоматические тесты воспроизводимы, последовательны и надежны, что помогает уменьшить число ложноположительных и ложноотрицательных результатов.

```java импортировать com.thoughtworks.gauge.Step импортировать org.openqa.selenium.By импортировать org.openqa.selenium.WebDriver импортировать org.openqa.selenium.chrome.ChromeDriver

класс AutomationTest { частный драйвер lateinit var: WebDriver

@Step("Откройте браузер и перейдите на сайт") весело openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") драйвер = хромдрайвер() driver.get("https://www.example.com")

@Step("Найти и проверить результат") забавный поиск (searchTerm: String) { driver.findElement(By.name("q")).sendKeys(searchTerm) driver.findElement(By.name("btnK")).click() val searchResult = driver.findElement(By.xpath("//div[@class='g']")) утверждать (searchResult.text.contains (searchTerm))

@Step("Закройте браузер") весело closeBrowser() { водитель.выйти() } } ```

В этом примере сценарий не только выполняет поиск, но также проверяет результаты, утверждая, что возвращаемые результаты поиска содержат условие поиска. Это помогает обеспечить точность теста и выявить любые проблемы, которые могут возникнуть с функцией поиска.

Поскольку сценарий автоматизирован, он будет работать одинаково каждый раз, когда выполняется с одними и теми же входными данными, что обеспечивает воспроизводимость, согласованность и надежность теста. Это помогает уменьшить количество ложноположительных и ложноотрицательных результатов, которые могут возникнуть при ручном тестировании.

Кроме того, вы можете использовать инструменты отчетов о тестах, такие как Gauge report, Allure, TestNG, JUnit и т. д., чтобы отслеживать результаты тестов, что позволяет вам увидеть, был ли тест не пройден или пройден. В случае сбоя он покажет причину сбоя, что поможет выявить проблемы на ранних этапах процесса разработки и предотвратить их перерастание в более серьезные проблемы позже.

<сильный>3. Включает частое тестирование

![](https://cdn.hackernoon.com/images/Fnh7En829rMisf8H1ZKKdkcSG8r1-ilc3uux.png)

Автоматические тесты можно запускать на регулярной основе, например при каждом изменении кода, что может помочь выявить проблемы на ранней стадии процесса разработки и предотвратить их перерастание в более серьезные проблемы позже. Это помогает выявлять ошибки на ранних этапах цикла разработки и помогает снизить общие затраты на исправление ошибок.

```java импортировать com.thoughtworks.gauge.Step импортировать org.openqa.selenium.By импортировать org.openqa.selenium.WebDriver импортировать org.openqa.selenium.chrome.ChromeDriver импортировать org.junit.jupiter.api.Test импортировать org.junit.jupiter.api.BeforeEach

класс AutomationTest { частный драйвер lateinit var: WebDriver @BeforeEach весело openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") драйвер = хромдрайвер() driver.get("https://www.example.com")

@Тест забавный тестПоиск() { driver.findElement(By.name("q")).sendKeys("searchTerm") driver.findElement(By.name("btnK")).click() val searchResult = driver.findElement(By.xpath("//div[@class='g']")) утверждать(searchResult.text.contains("searchTerm"))

@После каждого весело closeBrowser() { водитель.выйти() } } ```

Этот скрипт использует структуру JUnit5 и аннотацию @Test, которая помечает метод как метод тестирования. Это позволяет запускать тест автоматически как часть набора тестов. Кроме того, скрипт использует аннотации @BeforeEach и @AfterEach, которые помечают метод, который должен выполняться до или после каждого метода тестирования.

Вы также можете использовать конвейер CI/CD и интегрировать с ним автоматические тесты, позволяя запускать тесты автоматически как часть процесса сборки и при каждом изменении кода. Это помогает гарантировать, что изменения кода проверены и имеют хорошее качество перед развертыванием в рабочей среде. п

4. Экономично

![](https://cdn.hackernoon.com/images/Fnh7En829rMisf8H1ZKKdkcSG8r1-lwd3ufd.png)

Автоматические тесты могут выполняться без вмешательства человека, что со временем снижает стоимость тестирования. Автоматические тесты можно запускать на регулярной основе и по расписанию в определенное время, что снижает потребность в человеческих ресурсах.

```java импортировать com.thoughtworks.gauge.Step импортировать org.openqa.selenium.By импортировать org.openqa.selenium.WebDriver импортировать org.openqa.selenium.chrome.ChromeDriver импортировать org.junit.jupiter.api.Test импортировать org.junit.jupiter.api.BeforeEach

класс AutomationTest { частный драйвер lateinit var: WebDriver

@BeforeEach весело openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") драйвер = хромдрайвер() driver.get("https://www.example.com")

@Тест забавный тестПоиск() { driver.findElement(By.name("q")).sendKeys("searchTerm") driver.findElement(By.name("btnK")).click() val searchResult = driver.findElement(By.xpath("//div[@class='g']")) утверждать(searchResult.text.contains("searchTerm"))

@Тест весело testSignUp() { driver.findElement(By.linkText("Зарегистрироваться")).click() driver.findElement(By.name("имя пользователя")).sendKeys("myusername") driver.findElement(By.name("пароль")).sendKeys("мойпароль") driver.findElement(By.name("отправить")).click() val message = driver.findElement(By.xpath("//div[@class='message']")) assert(message.text.contains("Добро пожаловать, мое имя пользователя"))

@После каждого весело closeBrowser() { водитель.выйти() } } ```

В этом примере у нас есть два теста. Первый предназначен для тестирования функций поиска, а второй — для тестирования функций регистрации. Наличие нескольких тестовых случаев в одном скрипте повышает общую эффективность процесса тестирования, что может помочь снизить общую стоимость тестирования.

Кроме того, вы можете использовать параметризацию теста, где вы можете запустить один и тот же тестовый пример с несколькими входными данными и наборами данных. Это увеличивает общий охват тестами и помогает найти больше ошибок, снижая общую стоимость тестирования.

Кроме того, вы можете использовать облачные среды тестирования, такие как SauceLabs, BrowserStack и TestingBot, что позволяет запускать тесты в различных браузерах и операционных системах без необходимости поддерживать собственную тестовую инфраструктуру. Это может сократить расходы, связанные с поддержкой и масштабированием тестовой инфраструктуры.

В целом автоматизированные тесты могут быть рентабельными за счет сокращения потребности в человеческих ресурсах, повышения эффективности процесса тестирования и использования облачных сред тестирования.

<сильный>5. Увеличивает охват

![](https://cdn.hackernoon.com/images/Fnh7En829rMisf8H1ZKKdkcSG8r1-xle3usi.png)

Автоматические тесты могут охватывать широкий спектр сценариев, входных данных и вариантов использования, которые трудно охватить вручную, что увеличивает общий охват тестирования. Автоматизированные тесты могут охватывать разные браузеры, разные устройства, разные версии операционной системы, разные наборы данных и разные сценарии, что увеличивает общий охват тестирования.

```java импортировать com.thoughtworks.gauge.Step импортировать org.openqa.selenium.By импортировать org.openqa.selenium.WebDriver импортировать org.openqa.selenium.chrome.ChromeDriver импортировать org.junit.jupiter.api.Test импортировать org.junit.jupiter.api.BeforeEach импортировать org.junit.jupiter.params.ParameterizedTest импортировать org.junit.jupiter.params.provider.CsvSource

класс AutomationTest { частный драйвер lateinit var: WebDriver

@BeforeEach весело openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") драйвер = хромдрайвер() driver.get("https://www.example.com")

@Параметризованный тест @CsvSource (значение = ["searchTerm1, ожидаемый результат1", "searchTerm2, ожидаемый результат2", "searchTerm3, ожидаемый результат3"]) весело testSearch (searchTerm: строка, ожидаемый результат: строка) { driver.findElement(By.name("q")).sendKeys(searchTerm) driver.findElement(By.name("btnK")).click() val searchResult = driver.findElement(By.xpath("//div[@class='g']")) утверждать (searchResult.text.contains (ожидаемый результат))

@После каждого весело closeBrowser() { водитель.выйти() } } ```

В этом примере мы используем аннотацию JUnit5 @ParameterizedTest и @CsvSource для запуска одного и того же теста с несколькими входными данными, увеличивая общее покрытие тестами. Тест будет выполняться три раза с разными входными значениями, и каждый раз будет проверяться соответствие выходных данных ожидаемому результату.

Таким образом, вы можете протестировать одну и ту же функциональность с несколькими наборами данных, что поможет найти больше ошибок и увеличит общее покрытие тестами. Кроме того, вы также можете использовать среды тестирования на основе данных, такие как TestNG, JUnit5 и т. д., для запуска тестовых случаев с несколькими входными данными, что увеличивает общее покрытие тестами.

<сильный>6. Улучшает согласованность Автоматические тесты каждый раз запускаются одинаково, гарантируя, что одни и те же проблемы неоднократно не пропускал. Автоматические тесты воспроизводимы, последовательны и надежны, что снижает количество ложноположительных и ложноотрицательных результатов.

```java импортировать com.thoughtworks.gauge.Step импортировать okhttp3.OkHttpClient импортировать okhttp3.Request импортировать okhttp3.Response

класс API_AutomationTest{

@Step("GET-запрос к <конечной точке> и проверка ответа") весело testAPI (конечная точка: строка) { Вал клиент = OkHttpClient() val запрос = Request.Builder() .url(конечная точка) .получать() .строить() val ответ = client.newCall(запрос).execute() val json = response.body()?.string() утверждать(json!!.contains(""userId": 1")) } } ```

Этот скрипт использует платформу Gauge и аннотацию @Step, которая помечает метод как шаг в тестовом сценарии. Это позволяет написать тестовый сценарий в удобочитаемом и понятном формате, что упрощает понимание хода теста.

Вы также можете использовать концепцию тестирования на основе данных, когда вы можете запускать один и тот же тестовый сценарий с несколькими входными данными, увеличивая общее тестовое покрытие и потенциально обнаруживая больше ошибок.

Кроме того, вы можете использовать функцию отчетности датчика, которая предоставляет четкий и краткий отчет о тестовых сценариях, результатах тестов и времени выполнения тестов.

<сильный>7. Обеспечивает непрерывную интеграцию и непрерывную доставку

![](https://cdn.hackernoon.com/images/Fnh7En829rMisf8H1ZKKdkcSG8r1-x1g3u5w.png)

Автоматизированное тестирование – это ключевой фактор непрерывной интеграции и поставки, что является важным аспектом современной разработки программного обеспечения. Автоматические тесты можно интегрировать с конвейером CI/CD и запускать автоматически при каждом изменении кода, гарантируя, что изменения кода будут протестированы и имеют хорошее качество перед развертыванием в рабочей среде.

Вы можете использовать конвейер CI/CD и интегрировать с ним скрипт, что позволит запускать тесты автоматически как часть процесса сборки и при каждом изменении кода.

Например, вы можете использовать Jenkins, Travis, CircleCI и т. д. в качестве инструмента CI/CD. Затем вы можете настроить задание для сборки проекта, запуска тестовых случаев и развертывания приложения в рабочей среде, если тесты пройдены.

Это важнейший аспект современной разработки программного обеспечения, который помогает обеспечить более быструю и надежную доставку программного обеспечения.

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh './gradlew build'
            }
        }
        stage('Test') {
            steps {
                sh 'gauge run specs/'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy.sh'
            }
        }
    }
}

Этот Jenkinsfile определяет конвейер с тремя этапами: сборка, тестирование и развертывание.

На этапе сборки конвейер запускает команду './gradlew build'. Эта команда создаст проект и создаст необходимые артефакты.

На этапе тестирования конвейер запускает команду 'Gauge Run Specs/'. Эта команда выполнит все тестовые примеры датчика в папке спецификаций.

На этапе Развертывание конвейер запускает команду './deploy.sh'. Эта команда развернет приложение в рабочей среде.

Вы можете настроить задание Jenkins для запуска этого Jenkinsfile, и оно создаст, протестирует и развернет приложение, если тесты пройдены.

В этом примере вы можете увидеть, как можно использовать тесты Gauge в Jenkinsfile для обеспечения непрерывной интеграции и непрерывной доставки. Это позволяет автоматизировать процесс тестирования.

Заключительные мысли

  • Повышает эффективность, позволяя запускать несколько тестовых случаев в одном скрипте.
  • Повышает точность за счет уменьшения человеческих ошибок и обеспечения стабильных результатов.
  • Позволяет проводить частое тестирование, упрощая регулярное выполнение тестов.
  • Рентабельно за счет снижения общей стоимости тестирования и расширения охвата тестами.
  • Повышает охват, позволяя запускать один и тот же тестовый набор с несколькими входными данными и наборами данных.
  • Повышает согласованность, гарантируя, что программное обеспечение работает должным образом.
  • Включает непрерывную интеграцию и непрерывную доставку, позволяя запускать тесты автоматически как часть процесса сборки и при каждом изменении кода, гарантируя, что изменения кода проверены и имеют хорошее качество перед развертыванием в рабочей среде.

В целом автоматизированное тестирование помогает повысить общее качество программного обеспечения, снизить общую стоимость тестирования, увеличить охват тестированием, повысить согласованность и обеспечить непрерывную интеграцию и непрерывную доставку, что приводит к более быстрой и надежной доставке программного обеспечения. п


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE