Автоматическое тестирование Appium — утверждения
Автоматическое тестирование Appium — утверждения

😏Об авторе: Блогер является тест-менеджером и по совместительству лектором для иностранных компаний. 📡Адрес домашней страницы:【Austin_zhai】 🙆Цель и видение: Цель: помочь большему количеству людей в индустрии тестирования улучшить свои физические и мягкие навыки и поделиться последней информацией, связанной с отраслью. 💎Заявление: блоггер очень занят своей повседневной работой, и статьи будут время от времени обновляться. Вы можете отправлять личные сообщения о различных проблемах в отрасли или на рабочем месте, и я отвечу, когда у вас будет время.

1. Цель

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

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

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

2.Описание

  1. В этом примечании используется операционная система Win 11. Версия программного обеспечения, указанная в примечании, может привести к несоответствию или другим дополнительным операциям с течением времени. Пожалуйста, прочитайте и обратитесь к нему соответствующим образом.   2. Из-за особенностей операционной системы приведенные здесь руководства предназначены только для ОС Android и Hongmeng. Учебные пособия по установке и настройке Appium, а также руководства по ежедневному использованию, связанные с iOS, будут опубликованы позже.   3. В этой статье для объяснения используется язык Python и Appium. Учебные пособия, относящиеся к другим языкам, здесь не повторяются.

3. Возьмите трубку в последний раз

  проходить«Путь к автоматизированному тестированию»серия с«Среда автоматизации тестирования пользовательского интерфейса в режиме Appium PO — проектирование и практика»Общее введение в,Мы освоилиAppiumАвтоматизированное Основные методы использования в обучении и использование пользовательского интерфейса режима PO в приложении Автоматизированное инфраструктура инфраструктуры будущего,Далее блогер разберет большую часть процессов и подробно их объяснит.,Каждому удобно углубить свое впечатление. Сегодня мы познакомим вас с самым простым методом утверждения.

4. Концепция

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

Утверждения аналогичны ожидаемым результатам в наших тестах, выполняемых вручную. Без них ваши тесты потеряют смысл. Конечно, использование утверждений не только сделает наши тестовые примеры завершенными, но также может помочь нам быстро найти ошибки и проблемы в коде, особенно при автоматизированном тестировании. Они могут проверять возвращаемые значения функций, свойства объектов, состояние структур данных и различные другие условия. Кроме того, указанное нами сообщение об ошибке может быть выдано при сбое утверждения. Именно этот механизм позволяет нашим тестировщикам быстро обнаружить общую причину проблемы в неудавшемся тест-кейсе в большом количестве тест-кейсов и кодов, ускоряя работу. цикл устранения проблемы.

5. Основные утверждения

  Теперь мы дадим подробное объяснение и анализ некоторых методов утверждения в предыдущей среде автоматизации тестирования пользовательского интерфейса в режиме PO.

5.1 assertEqual

 Наглядный метод утверждения, по ритму аналогичный методу AssertTrue. Это означает «утверждать равенство». В рамках это оператор, используемый для проверки равенства двух значений. При использовании утверждения AssertEqual он сравнивает, равны ли два значения. Если они равны, утверждение проходит и тест продолжается; если они не равны, утверждение не выполняется, тест останавливается и выдается сообщение об ошибке.

Язык кода:javascript
копировать
self.assertEqual(actual_value, expected_value, "err_msg")

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

Язык кода:javascript
копировать
import unittest
from appium import webdriver

class AppElementCatch(unittest.TestCase):
    def setUp(self):
        desired_caps = {
            'platformName': 'Android',
            'deviceName': 'device',
            'appPackage': 'com.xxxxxx.app',
            'appActivity': 'MainActivity'
        }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_element_id(self):
        element_b = self.driver.find_element_by_id('element_b_id')

        element_a_id = self.driver.find_element_by_id('edt_customer_name').get_attribute('resourceId')

        self.assertEqual(element_b.get_attribute('resourceId'), element_a_id, «Идентификатор элемента не соответствует».)

5.2 assertTrue

   AssertTrue означает «утверждать истинность» или «утверждать истинность значения». Мы передаем условное выражение и ожидаем, что оно истинно. Если условие истинно, утверждение проходит и тест продолжает выполняться, в противном случае тестовый пример не пройден. Обычно AssertTrue используется для проверки того, выполнено ли определенное условие, например, для проверки истинности возвращаемого значения функции, проверки того, установлен ли определенный флаг, оценки истинности определенного условия и определения значения атрибута. Два элемента равны. Действительно подождите.

Язык кода:javascript
копировать
self.assertTrue(condition, «Условие неверное».)

Пример. Определите, являются ли атрибуты класса двух элементов кнопки на странице одинаковыми. Таким же образом мы можем использовать AssertTrue, чтобы определить, является ли результат того, что мы хотим проверить, истинным. То же самое верно, а другое — верно. ЛОЖЬ.

Язык кода:javascript
копировать
import unittest
from appium import webdriver

class MyTestCase(unittest.TestCase):
    def setUp(self):
        desired_caps = {
            'platformName': 'Android',
            'deviceName': 'device',
            'appPackage': 'com.xxxx.app',
            'appActivity': 'MainActivity'
        }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_button_class(self):
        button1 = self.driver.find_element_by_id('button1_id')
        button2 = self.driver.find_element_by_id('button2_id')

        button1_class = button1.get_attribute('class')
        button2_class = button2.get_attribute('class')

        self.assertTrue(button1_class == button2_class, «Значения атрибутов класса у кнопок разные.»)

5.3 assertIn

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

Язык кода:javascript
копировать
self.assertIn(item, container, «объект не существует в этом контейнере».)

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

Язык кода:javascript
копировать
import unittest
from appium import webdriver

class EcommerceTestCase(unittest.TestCase):
    def setUp(self):
        desired_caps = {
            'platformName': 'Android',
            'deviceName': 'device',
            'appPackage': 'com.xxxx.app',
            'appActivity': 'MainActivity'
        }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_dropdown_in_container(self):
        dropdown_element = self.driver.find_element_by_id('dropdown_id')
        container_element = self.driver.find_element_by_id('container_id')

        dropdown_options = dropdown_element.text.split('\n')
        container_options = container_element.text.split('\n')
        
        for option in dropdown_options:
            self.assertIn(option, container, f"В этом контейнере не существует параметра раскрывающегося списка «{option}».")

5.4 assertIs

   AssertIs означает «утверждать тот же объект», который имеет ту же функцию, что и в языках программирования. Один и тот же объект означает, относятся ли два элемента до и после утверждения к одному и тому же объекту. Обычно мы используем его, чтобы проверить, является ли объект, возвращаемый функцией, одним и тем же экземпляром, определить, относятся ли две переменные к одному и тому же объекту, проверить, соответствует ли объект ожиданиям и т. д. Итак, с точки зрения непрофессионала, когда нам нужно проверить идентичность объектов в тесте, чтобы убедиться, что они являются одним и тем же экземпляром, мы можем использовать AssertIs для подтверждения.

Язык кода:javascript
копировать
self.assertIs(obj1, obj2, «Два объекта не одинаковы».)

Пример: мы используем AssertIs, чтобы проверить, совпадают ли определенные объекты проверки с указанными объектами в списке на бизнес-странице.

Язык кода:javascript
копировать
import unittest
from appium import webdriver

class FinancialTestCase(unittest.TestCase):
    def setUp(self):
        desired_caps = {
            'platformName': 'Android',
            'deviceName': 'device',
            'appPackage': 'com.example.app',
            'appActivity': 'MainActivity'
        }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_same_product_in_list(self):
        # Предположим, что на странице списка финансовых продуктов перейдите find_element Расположение элемента названия продукта
        product1_element = self.driver.find_element_by_id('product1_name_id')
        product2_element = self.driver.find_element_by_id('product2_name_id')

        # Получить текст названия продукта
        product1_name = product1_element.text
        product2_name = product2_element.text

        # использовать assertIs утверждение Проверьте, являются ли два продукта одинаковыми
        self.assertIs(product1_name, product2_name, «Указанные объекты не совпадают».)

Некоторые методы утверждения, противоположные приведенным выше утверждениям, такие как AssertNotEqual, AssertNotEqual, AssertNotIn и AssertIsNot, здесь не будут представлены. Сценарии, в которых они используются, противоположны приведенным выше. Вы можете гибко разрабатывать и использовать их в соответствии с вашими предпочтениями. реальные тестовые бизнес-сценарии.

6. Комбинированные утверждения

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

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

Язык кода:javascript
копировать
import unittest

class LoanTestCase(unittest.TestCase):
    def test_interest_calculation(self):
        principal_amount = 100000
        interest_rate = 0.05
        expected_interest_amount = 5000

        actual_interest_rate, actual_interest_amount = calculate_loan_interest(principal_amount, interest_rate)

        self.assertEqual(actual_interest_rate, interest_rate, «Ошибка расчета процентной ставки по кредиту».)
        self.assertEqual(actual_interest_amount, expected_interest_amount, «Сумма процентов по кредиту рассчитана неверно».)

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

Язык кода:javascript
копировать
import unittest

class InvestmentTestCase(unittest.TestCase):
    def test_profit_rate(self):
        expected_min_profit_rate = 0.05
        expected_max_profit_rate = 0.1
        
        actual_profit_rate = get_investment_profit_rate()

        self.assertGreaterEqual(actual_profit_rate, expected_min_profit_rate, «Рабочая прибыль ниже ожидаемого минимума».)
        self.assertLessEqual(actual_profit_rate, expected_max_profit_rate, «Прибыль превысила ожидаемый максимум».)

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

Пример 3. Например, если мне нужно проверить, существует ли несколько ожидаемых элементов на странице сведений о продукте, то здесь мы можем использовать комбинированный метод утверждения для подтверждения.

Язык кода:javascript
копировать
import unittest
from appium import webdriver

class FinancialProductTestCase(unittest.TestCase):
    def setUp(self):
        desired_caps = {
            'platformName': 'Android',
            'deviceName': 'device',
            'appPackage': 'com.xxxx.app',
            'appActivity': 'com.example.app.MainActivity'
        }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_product_details(self):
        product_name_element = self.driver.find_element_by_id('txt_product_name')
        profit_rate_element = self.driver.find_element_by_id('txt_profit_rate')
        term_element = self.driver.find_element_by_id('txt_term')

        self.assertIsNotNone(product_name_element, «Элемент названия продукта не найден».)
        self.assertIsNotNone(profit_rate_element, «Элемент прибыли не найден».)
        self.assertIsNotNone(term_element, «Элемент термина не найден».)

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

Язык кода:javascript
копировать
import unittest
from appium import webdriver

class LoginTestCase(unittest.TestCase):
    def setUp(self):
        desired_caps = {
            'platformName': 'Android',
            'deviceName': 'device',
            'appPackage': 'com.xxxx.app',
            'appActivity': 'com.example.app.MainActivity'
        }
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_login_flow(self):
        username_element = self.driver.find_element_by_id('edt_username')
        password_element = self.driver.find_element_by_id('edt_password')
        login_button_element = self.driver.find_element_by_id('btn_login')

        username_element.send_keys('testuser')
        password_element.send_keys('password123')

        login_button_element.click()

        home_element = self.driver.find_element_by_id('txt_home')

        self.assertIsNotNone(username_element, «Компонент ввода имени пользователя не найден».)
        self.assertIsNotNone(password_element, «Компонент ввода пароля не найден».)
        self.assertIsNotNone(login_button_element, «Кнопка входа не найдена».)
        self.assertIsNotNone(home_element, «Обнаружен компонент возврата на домашнюю страницу».)

7. На что следует обратить внимание

  1. Когда мы разрабатывали утверждение,Необходимо убедиться, что тестируемый элемент загружен.,Поэтому необходимо добавить различные методы ожидания.,В случае, если вариант использования теста даже с утверждением все еще не может найти элемент, который необходимо захватить, объект,Сделайте вариант использования бессмысленным;
  2. утверждениеметод, насколько это возможноиспользоватьточный метод,избегатьиспользоватькакое-то нечеткое совпадениеутверждениеметод,Например, оценка чисел или результатов в пределах интервала.,Ни один из них не может точно найти нужные вам результаты.,Часто из-за непредсказуемых результатов тестовый вариант использования проходит ненормально;
  3. Когда мы выполняем тестовый вариант использования,В дополнение к добавлению конкретной информации об исключении в утверждение,Выполните после него более полные операции по обработке исключений.,Будь то ведение журнала после сообщения об ошибке или выполнение самовосстановления, это хороший выбор.,Это может сделать ваш тестовый вариант использования более надежным.
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода