Автоматическое тестирование 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose