Подробное объяснение статьи об автоматическом тестировании Python
Подробное объяснение статьи об автоматическом тестировании Python

Будучи эффективным и простым для чтения языком программирования, Python стал популярным выбором в области автоматического тестирования благодаря своим богатым библиотекам и платформам. Будь то веб-приложение, API или мобильное приложение, Python может обеспечить мощную поддержку, позволяя тестировщикам быстро писать и поддерживать тестовые примеры.

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

Базовые знания автоматизированного тестирования Python.

Прежде чем погрузиться в автоматизированное тестирование, важно понять его основы.

1. Что такое автоматизированное тестирование?

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

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

2. Цель автоматизированного тестирования

Автоматизированное тестирование служит различным целям, в том числе:

  • Повышение эффективности:Автоматизируйте повторяющиеся тестовые случаи,Экономьте время.
  • Уменьшите человеческие ошибки:Уменьшите возможные ошибки, вызванные ручными операциями.,Повышение надежности испытаний.
  • Поддержка регрессионного тестирования:С итерацией программного обеспечения,Тест автоматизации позволяет быстро проверить, правильно ли работает предыдущая функциональность.
  • Ускорить циклы выпуска:Более быстрая обратная связь по тестированию помогает командам быстрее выпускать высококачественное программное обеспечение.。

3. Распространенные типы автоматизированных тестов

Автоматизированное тестирование можно разделить на множество типов, в основном включая:

3.1 Модульное тестирование

Модульное тестирование — это проверка наименьшей тестируемой единицы программного обеспечения, обычно функции или метода. существовать Python в, использовать unittest и pytest Такие фреймворки, как Python, упрощают написание модульных тестов.

Язык кода:javascript
копировать
import unittest
​
def add(a, b):
    return a + b
​
class TestAddFunction(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(1, 2), 3)
​
    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)
​
if __name__ == '__main__':
    unittest.main()
​

3.2 Интеграционное тестирование

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

Язык кода:javascript
копировать
def get_user_data(user_id):
    # Предполагая, что это функция, вызывающая внешний API
    pass
​
def process_user(user_id):
    data = get_user_data(user_id)
    # Логика обработки данных
    return data
​
def test_process_user(mocker):
    mocker.patch('module.get_user_data', return_value={'name': 'John'})
    assert process_user(1) == {'name': 'John'}
​

3.3 Функциональное тестирование

Функциональное тестирование проверяет, что конкретная функциональность системы соответствует требованиям. Selenium — популярный инструмент для функционального тестирования, особенно веб-приложений.

Язык кода:javascript
копировать
from selenium import webdriver
​
driver = webdriver.Chrome()
driver.get("http://example.com/login")
​
username = driver.find_element_by_name("username")
password = driver.find_element_by_name("password")
submit = driver.find_element_by_name("submit")
​
username.send_keys("testuser")
password.send_keys("password")
submit.click()
​
assert "Welcome" in driver.page_source
driver.quit()
​

3.4 Тестирование производительности

Тестирование производительности используется для оценки того, как система работает под нагрузкой. Такие инструменты, как Locust, могут писать нагрузочные тесты на Python.

Язык кода:javascript
копировать
from locust import HttpUser, task
​
class UserBehavior(HttpUser):
    @task
    def index(self):
        self.client.get("/")
​
    @task(2)
    def about(self):
        self.client.get("/about")
​

4. Обзор среды тестирования Python: подробный тест pytest

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

4.1 Установите Pytest

Сначала убедитесь, что у вас установлен pytest. Его можно установить через pip, используя следующую команду:

Язык кода:javascript
копировать
pip install pytest

4.2 Написание тестовых примеров

Мы создадим простую математическую библиотеку и напишем для нее тестовые примеры. Предположим, наша библиотека содержит две функции: сложение и вычитание.

Язык кода:javascript
копировать
# math_operations.py
def add(a, b):
    return a + b
​
def subtract(a, b):
    return a - b
​

Напишите тестовые примеры:

Язык кода:javascript
копировать
# test_math_operations.py
from math_operations import add, subtract
​
def test_add():
    assert add(1, 2) == 3
    assert add(-1, 1) == 0
    assert add(0, 0) == 0
​
def test_subtract():
    assert subtract(2, 1) == 1
    assert subtract(-1, -1) == 0
    assert subtract(0, 1) == -1
​

В командной строке перейдите в каталог, содержащий тестовые файлы, и выполните следующую команду для выполнения теста:

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

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

4.3. Подробный отчет об испытаниях.

Можно использовать -v опция для более подробного вывода теста:

Язык кода:javascript
копировать
pytest -v

4.4. Использование приспособлений.

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

Язык кода:javascript
копировать
import pytest
​
@pytest.fixture
def sample_data():
    return [1, 2, 3, 4, 5]
​
def test_sample_data(sample_data):
    assert len(sample_data) == 5
    assert sum(sample_data) == 15
​

4.5. Параметрическое тестирование.

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

Язык кода:javascript
копировать
import pytest
​
@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),
    (4, 5, 9),
    (-1, 1, 0)
])
def test_add(a, b, expected):
    assert add(a, b) == expected
​

в тестировании,Если вы хотите проверить, вызывает ли определенный блок кода определенное исключение,Можно использовать pytest.raises

Язык кода:javascript
копировать
def test_subtract_negative():
    with pytest.raises(ValueError):
        subtract(1, 2)

5. Углубиться в Selenium

Тестирование веб-приложений. Он поддерживает несколько браузеров и операционных систем.,Возможность имитировать действия пользователя в браузере,Проверьте функциональность и производительность приложения.

Он поддерживает множество языков программирования, в том числе Python、Java、C# и т. д., что делает разработчика Можно использовать они, знакомые с языком, для написания тестовых сценариев. Селен Основные компоненты включают в себя:

  • Selenium WebDriver:Для взаимодействия с браузером,Отправляйте действия пользователя и получайте веб-контент.
  • Selenium IDE:Простой плагин для браузера,Для тестирования записи и воспроизведения.
  • Selenium Grid:для параллельного тестирования,Тесты могут выполняться одновременно в нескольких средах.

5.1 Установка Селена

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

Язык кода:javascript
копировать
pip install selenium
​

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

Напишите простой тестовый пример для имитации работы пользователей на веб-странице. Допустим, мы хотим протестировать страницу входа.

Язык кода:javascript
копировать
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
​
# создать новый Chrome Экземпляр браузера
driver = webdriver.Chrome()
​
try:
    # Посетите целевой веб-сайт
    driver.get("http://example.com/login")
​
    # Найдите поле ввода имени пользователя и пароля и введите содержимое.
    username = driver.find_element(By.NAME, "username")
    password = driver.find_element(By.NAME, "password")
​
    username.send_keys("testuser")
    password.send_keys("password")
​
    # Найдите кнопку входа и нажмите
    login_button = driver.find_element(By.NAME, "submit")
    login_button.click()
​
    # Подождите, пока страница загрузится
    time.sleep(3)
​
    # Убедитесь, что вход в систему успешен
    assert "Welcome" in driver.page_source
​
finally:
    # Закрыть браузер
    driver.quit()
​

5.2 Ключевые операции и элементы позиционирования

Selenium предоставляет множество методов для поиска элементов веб-страницы. Обычно используются следующие методы позиционирования:

проходить ID

Язык кода:javascript
копировать
element = driver.find_element(By.ID, "element_id")

проходить Имя класса

Язык кода:javascript
копировать
element = driver.find_element(By.CLASS_NAME, "class_name")

проходить CSS селектор

Язык кода:javascript
копировать
element = driver.find_element(By.CSS_SELECTOR, "css.selector")

проходить XPath

Язык кода:javascript
копировать
element = driver.find_element(By.XPATH, "//tag[@attribute='value']")

5.3. Обработка взаимодействия со страницами.

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

нажмите кнопку

Язык кода:javascript
копировать
button = driver.find_element(By.ID, "submit")
button.click()

Введите текст

Язык кода:javascript
копировать
input_field = driver.find_element(By.NAME, "input")
input_field.send_keys("Sample text")

Обработка выпадающих меню

Язык кода:javascript
копировать
from selenium.webdriver.support.ui import Select
​
select = Select(driver.find_element(By.NAME, "dropdown"))
select.select_by_visible_text("Option 1")
​

5.4 Стратегия ожидания

Ожидание очень важно при тестировании, и Selenium предлагает две основные стратегии ожидания:

  • явное ожидание:Подождите, пока будут выполнены определенные условия(Если элемент виден)продолжить выполнение。
Язык кода:javascript
копировать
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
​
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "element_id")))
​
  • неявное ожидание:глобальное ожидание,После установки он вступит в силу каждый раз, когда будет найден элемент.
Язык кода:javascript
копировать
driver.implicitly_wait(10)
boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.