Будучи эффективным и простым для чтения языком программирования, Python стал популярным выбором в области автоматического тестирования благодаря своим богатым библиотекам и платформам. Будь то веб-приложение, API или мобильное приложение, Python может обеспечить мощную поддержку, позволяя тестировщикам быстро писать и поддерживать тестовые примеры.
В этой статье мы подробно рассмотрим использование Python в автоматизированном тестировании, охватывая различные среды тестирования, инструменты и лучшие практики. Понимая базовые концепции и практические примеры автоматизированного тестирования, читатели смогут научиться эффективно использовать Python для повышения эффективности тестирования. Независимо от того, являетесь ли вы новичком в автоматизированном тестировании или опытным инженером, эта статья предоставит вам ценную информацию и знания. практическое предложение.
Прежде чем погрузиться в автоматизированное тестирование, важно понять его основы.
Автоматизированное тестирование — это процесс автоматизации выполнения тестовых примеров с помощью программных инструментов. По сравнению с ручным тестированием, автоматическое тестирование использует сценарии или программы для выполнения тестов, что повышает эффективность и надежность тестирования. Основная цель автоматизированного тестирования — найти дефекты в программном обеспечении и убедиться, что его функциональность соответствует ожиданиям.
Предположим, у нас есть система входа в систему. Ручное тестирование может потребовать многократного ввода разных имен пользователей и паролей для проверки их достоверности, в то время как автоматическое тестирование может сэкономить время, написав сценарий для выполнения этих входных данных в пакетном режиме.
Автоматизированное тестирование служит различным целям, в том числе:
Автоматизированное тестирование можно разделить на множество типов, в основном включая:
Модульное тестирование — это проверка наименьшей тестируемой единицы программного обеспечения, обычно функции или метода. существовать Python в, использовать unittest
и pytest
Такие фреймворки, как Python, упрощают написание модульных тестов.
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()
Интеграционные тесты проверяют взаимодействие между различными модулями, чтобы убедиться, что они работают вместе.
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'}
Функциональное тестирование проверяет, что конкретная функциональность системы соответствует требованиям. Selenium — популярный инструмент для функционального тестирования, особенно веб-приложений.
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()
Тестирование производительности используется для оценки того, как система работает под нагрузкой. Такие инструменты, как Locust, могут писать нагрузочные тесты на Python.
from locust import HttpUser, task
class UserBehavior(HttpUser):
@task
def index(self):
self.client.get("/")
@task(2)
def about(self):
self.client.get("/about")
В расширении Python В рамках внедрения pytest популярен благодаря своей простоте, удобству использования и мощным функциям. Он не только поддерживает написание простых тестовых примеров, но также может быть расширен для выполнения сложных требований к тестированию.
Сначала убедитесь, что у вас установлен pytest. Его можно установить через pip, используя следующую команду:
pip install pytest
Мы создадим простую математическую библиотеку и напишем для нее тестовые примеры. Предположим, наша библиотека содержит две функции: сложение и вычитание.
# math_operations.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
Напишите тестовые примеры:
# 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
В командной строке перейдите в каталог, содержащий тестовые файлы, и выполните следующую команду для выполнения теста:
pytest
pytest будет автоматически обнаружен с помощью test_
Начните с тестовых функций и выполните их. Результаты выполнения показывают, какие тесты пройдены, а какие не пройдены.
Можно использовать -v
опция для более подробного вывода теста:
pytest -v
pytest также поддерживает фикстуры — мощную функцию для предоставления контекста, необходимого для тестирования. Например, мы можем создать приспособление, которое проверяет соединение с базой данных:
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
pytest также поддерживает параметризованное тестирование, позволяя использовать различные входные значения в тестовой функции.
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
:
def test_subtract_negative():
with pytest.raises(ValueError):
subtract(1, 2)
Тестирование веб-приложений. Он поддерживает несколько браузеров и операционных систем.,Возможность имитировать действия пользователя в браузере,Проверьте функциональность и производительность приложения.
Он поддерживает множество языков программирования, в том числе Python、Java、C# и т. д., что делает разработчика Можно использовать они, знакомые с языком, для написания тестовых сценариев. Селен Основные компоненты включают в себя:
в использовании Selenium Предварительно вам необходимо убедиться, что установлены соответствующие библиотеки и драйверы браузера. Вы можете установить его с помощью следующей команды: Selenium:
pip install selenium
В то же время вам также необходимо скачать соответствующий драйвер браузера, например ChromeDriver для Google Chrome. После завершения загрузки обязательно добавьте путь к нему в переменные среды вашей системы.
Напишите простой тестовый пример для имитации работы пользователей на веб-странице. Допустим, мы хотим протестировать страницу входа.
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()
Selenium предоставляет множество методов для поиска элементов веб-страницы. Обычно используются следующие методы позиционирования:
проходить ID:
element = driver.find_element(By.ID, "element_id")
проходить Имя класса:
element = driver.find_element(By.CLASS_NAME, "class_name")
проходить CSS селектор:
element = driver.find_element(By.CSS_SELECTOR, "css.selector")
проходить XPath:
element = driver.find_element(By.XPATH, "//tag[@attribute='value']")
Selenium может имитировать различные взаимодействия с пользователем, такие как клики, ввод данных, раскрывающиеся меню и т. д. Вот несколько примеров распространенных операций:
нажмите кнопку:
button = driver.find_element(By.ID, "submit")
button.click()
Введите текст:
input_field = driver.find_element(By.NAME, "input")
input_field.send_keys("Sample text")
Обработка выпадающих меню:
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element(By.NAME, "dropdown"))
select.select_by_visible_text("Option 1")
Ожидание очень важно при тестировании, и Selenium предлагает две основные стратегии ожидания:
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")))
driver.implicitly_wait(10)