7 причин использовать автоматизированные тесты в Selenium, JUnit5 и Gauge Framework
14 февраля 2023 г.Автоматические тесты можно запускать параллельно в нескольких средах, в нескольких браузерах, на нескольких устройствах и в нескольких наборах данных.
Эти тесты менее подвержены человеческим ошибкам, чем ручные тесты, что может помочь повысить точность и надежность процесса тестирования. Кроме того, они воспроизводимы, последовательны и надежны, что помогает уменьшить число ложноположительных и ложноотрицательных результатов. В этой статье я расскажу о том, почему вам стоит использовать автоматизированные тесты в Selenium, JUnit5 и Gauge Framework.
-
Повышает эффективность
Автоматические тесты можно выполнять быстрее, чем ручные, что позволяет выполнять больше тестов за более короткий период времени. Это может помочь быстрее выявлять проблемы и ошибки, экономя время и ресурсы в долгосрочной перспективе. Автоматизированные тесты могут выполняться в нескольких средах, в нескольких браузерах, на нескольких устройствах и в нескольких наборах данных параллельно, что повышает общую эффективность процесса тестирования.
```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
-
Повышает точность
Автоматические тесты менее подвержены человеческим ошибкам, чем ручные тесты, что может помочь повысить точность и надежность процесса тестирования. Автоматические тесты воспроизводимы, последовательны и надежны, что помогает уменьшить число ложноположительных и ложноотрицательных результатов.
```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("Найти
@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 для обеспечения непрерывной интеграции и непрерывной доставки. Это позволяет автоматизировать процесс тестирования.
Заключительные мысли
- Повышает эффективность, позволяя запускать несколько тестовых случаев в одном скрипте.
- Повышает точность за счет уменьшения человеческих ошибок и обеспечения стабильных результатов.
- Позволяет проводить частое тестирование, упрощая регулярное выполнение тестов.
- Рентабельно за счет снижения общей стоимости тестирования и расширения охвата тестами.
- Повышает охват, позволяя запускать один и тот же тестовый набор с несколькими входными данными и наборами данных.
- Повышает согласованность, гарантируя, что программное обеспечение работает должным образом.
- Включает непрерывную интеграцию и непрерывную доставку, позволяя запускать тесты автоматически как часть процесса сборки и при каждом изменении кода, гарантируя, что изменения кода проверены и имеют хорошее качество перед развертыванием в рабочей среде. ли>
В целом автоматизированное тестирование помогает повысить общее качество программного обеспечения, снизить общую стоимость тестирования, увеличить охват тестированием, повысить согласованность и обеспечить непрерывную интеграцию и непрерывную доставку, что приводит к более быстрой и надежной доставке программного обеспечения. п
Оригинал