Якщо ви працювали
Я працював над проектами автоматизації тестування Python досить довго, щоб знати кілька порад і трюків для найкращих результатів.
1. Виберіть правильну структуру автоматизації тестів на основі специфікацій вашого проекту.
Виберіть правильну структуру автоматизації тестів на основі специфікацій вашого проекту.Python поставляється зі своєю вбудованою системою автоматизації тестування Unittest. Але це найкраще для невеликих проектів. Якщо ви хочете тестування автоматизації, яка дозволяє працювати на невеликих - до великих проектів, Pytest є кращим варіантом.
Pytest надає структурований та ефективний спосіб написання тестових випадків для більш керованої та масштабованої тестової автоматизації. Він також має найпростішу синтаксу та найповнішу екосистему плагінів. Наприклад, ви можете використовувати pytest-xdist для паралельного виконання тестів. Крім того, ви можете запустити тестові випадки, які ви написали в Unittest або Nose 2 на Pytest.
Якщо ви робите більше робот автоматизації процесів (
Якщо ви працюєте в команді, яка практикує поведінковий розвиток (BDD), поведінка - це найкраща рамка.
Я б радив вам вибрати рамку, яка відповідає технічному стеку, який використовує ваша команда, щоб уникнути будь-яких бар'єрів у спілкуванні.Використовуйте WebDriverWait в Selenium, щоб подолати проблеми з тимчасом.
Я згадував, що ви можете інтегрувати Pytest з Selenium для веб-тестування. Хоча Pytest відмінно підходить для функціонального тестування, Selenium піднімає веб-автоматизацію на цілком новий рівень.
Коли ви запускаєте тести на Selenium, ви повинні чекати певну кількість часу, оскільки система працює над елементами розташування. Після того, як цей час пройде, скажімо, 10 секунд, драйвер припиняється. Проблема з непрямим очікуванням, як його називають, полягає в тому, що різні елементи потребують різних часів очікування.
from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # Wait for the element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # Execute action after the element is ready driver.from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # Wait for the element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() #
Якщо ваші тести постійно провалилися, це не обов'язково означає, що веб-додаток має будь-які проблеми. Це може бути просто через деякі зміни в коді програми або інтерфейсі користувача. Щоб уникнути надмірного дебютування від невдач тестування, переконайтеся, що ви використовуєте унікальні ідентифікатори, щоб точно визначити веб-елементи.
Використовуйте параметризовані випробування Pytest, щоб уникнути дублювання функцій тестування.Тестування автоматизації іноді вимагає тестування тієї ж функції в додатку з різними наборами даних. Замість дублювання функцій тестування, ви можете просто запустити одну функцію тестування за допомогою pytest.mark.parametrize
, і вона буде дублюватися кілька разів з різними параметрами. Ось як це виглядає:
pytest.mark.parametrize
Завантажити
Import pytest
Import pytest
Завантажити
@pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)])
@pytest.mark.parametrize("вхід, очікується", [(2, 4), (3, 9), (4, 16)]
def test_square(введення, очікується):
def test_square(введення, очікується):
Assert input ** 2 == expected
Assert input ** 2 == очікується
Якщо ви запитуєтеся, чи можна запустити параметризоване тестування за допомогою вбудованої структури автоматизації тестування Python, відповідь є так — за певних умов. Unittest не підтримує параметризоване тестування, але ви можете додати модуль для цієї мети.
ввезення одиниць
завантажити одиницю
from параметризований імпорт параметризований
from параметризований імпорт параметризований
клас ТестуванняРедагувати(unittest.TestCase):
клас ТестМатхОперації(unittest.TestCase):
«Бр»
[
] («квадрат 2», 2, 4),
(«квадрат 2», 2, 4),
(«квадрат 3», 3, 9),
(«квадрат 3», 3, 9),
(«квадрат 4», 4, 16),
(«квадрат 4», 4, 16),
]
]
def test_square(саме собою, ім'я, вхід, очікування):
def test_square(саме собою, ім'я, вхід, очікування):
self.assertEqual(input ** 2, expected)
self.assertEqual(input ** 2, expected)
Прискорення виконання тестів за допомогою паралельного тестування.
Чим більше API, випробувальних випадків, баз даних та систем третіх сторін у вашому тестуванні, тим більше затримок у виконанні, що може уповільнити розвиток.На щастя, є спосіб впоратися з цим, не порушуючи вашого тестування. Python дозволяє паралельне тестування з рамками, такими як Pytest.
Ось як виконувати паралельне тестування з Pytest:
pip install прізвисько
pip install псевдо-xdist
pytest -n 4 # Запуск тестів на 4 процесорах
pytest -n 4 # Запуск тестів на 4 процесорах
Ви також можете збільшити кількість процесорів, які обробляють навантаження, але є тільки така локальна інфраструктура , що може обробляти його.Наступна стаття Автоматизація автоматизації тестування в CI/CD трубопроводах.Повірте мені; ви не зловите перерви, якщо ви працюєте з швидкими циклами розробки, і ви повинні ручно коригувати код кожного разу, коли щось змінюється в програмному забезпеченні.
Ви можете автоматизувати тести Python у ваш CI/CD трубопровід, щоб виконувати їх автоматично при будь-яких змінах коду.
Щоб інтегрувати автоматизацію тестування Python у ваші трубопроводи CI/CD. Додати pytest-cov
до вашого проекту і використовувати команду Pytest для автоматичного виконання ваших тестів і відзначити будь-які проблеми.
авіаквитки
Крок за кроком:
- ім'я: Інсталяція залежності
- ім'я: Інсталяція залежності
run: pip install pytest pytest-cov
run: pip install pytest pytest-cov
- ім'я: Виконувати тестування
- ім'я: Завантажити посилання
run: найголовніше --cov=my_project
run: найпоширеніший --cov=my_project
Якщо ви працюєте над більш великими тестовими комплектами, вам доведеться додати робот-рамки до інструментів CI, таких як Jenkins. Для Unittest охоплення дозволяє інтегрувати свій тест в трубопровід, як це;
Тест:
Скрипт:
Скрипт:
- Python -m coverage run -m unittest discover
- Python -m coverage run -m unittest discover
- Звіт про охоплення Python -m
- Звіт про охоплення Python -m
6. Проводити випробування в ізоляції.
Одним з поширених проблем, з якими ви можете зіткнутися з автоматизацією тестування Python, є прорив тесту через взаємозалежності. В основному, ваш тест не вдається, тому що ваш один тест спирається на дані або стан навколишнього середовища інших тестів. Отже, якщо один тест змінюється, інші тести не вдаються в результаті ланцюгової реакції, що викликає зміни. Щоб вирішити це, ізолюйте всі тести, щоб кожен почав не пов'язаний з іншими.
Ось як забезпечити ізоляцію тестування за допомогою логіки налаштування та зняття сліз на Pytest;
Import pytest
Import pytest
Завантажити
@pytest.fixture
@pytest.fixture
Завантажити
def clean_environment():
def clean_environment():
# Налаштування: Підготувати чистий стан
# Налаштування: Підготувати чистий стан
друк(«Налаштування чистого середовища.»)
print(«Налаштування чистого середовища.»)
ield
yield
# Теардаун: Реалізація середовища
# Теардаун: Завантажити середовище
принтувати("Чищення після тестування.")
print("Чищення після тестування.")
def test_example(clean_environment):
«Бр»def test_example(clean_environment):
Assert 2 + 2 == 4
Assert 2 + 2 == 4
Зауважте, що пристрій Pytest гарантує, що ресурси, які ви використовуєте, очищаються після кожного тестування.
7. Дотримуйтесь найкращих методів автоматизації випробувань.
Я висвітлю кілька кращих практик, щоб стати більш ефективними в автоматизації тестування Python;
- Перш ніж розпочати тестування автоматизації, встановити тестові метрики для вашої тестувальної комплектації. Тестувальні метрики, такі як покриття коду, кількість виконаних, пройдених або невдалих випадків тестування та час виконання тестування допоможуть вам відслідковувати тестування та виявляти бар'єри для вирішення проблеми.
- У дуже великій мірі кожен у вашій команді повинен знати, як писати тестування від кінця до кінця (E2E). Таким чином, якість не є просто післядумством, але вкорінена в процес розробки з самого початку.
- Не тестуйте залежності третіх сторін, такі як посилання на зовнішні сайти або сервери, які виТестові метрики, такі як охоплення кодом, кількість виконаних, пройдених або невдалих випадків тестування та час виконання тестування допоможуть вам відслідковувати тестування та визначити бар'єри, які потрібно вирішити.
- У дуже великій мірі кожен у вашій команді повинен знати, як написати тест E2E. Таким чином, якість - це не просто думка, а вкорінена в процес розробки з самого початку.
- Не тестуйте залежності третіх сторін, наприклад, посилання на зовнішні сайти або сервери, які ви не можете контролювати.Це може спровокувати уповільнення тестування, а також можуть бути баннери з файлами cookie або деякі інші елементи, які можуть призвести до невдачі тестування.
- Використовуйте
assertions щоб переконатися, що ваші результати тесту відповідають очікуваним результатам. переконання переконанняТримайте свої інструменти автоматизації тестів оновленими, щоб випробувати свою програму на останніх версіях браузера та вилучити помилки, перш ніж вона стане публічною.Заключення
Тестування автоматизації може бути складним завданням, особливо при вирішенні ряду, здавалося б, невирішених помилок.Я виявив, що автоматизація тестування є менш помилковою при використанні піраміди тестування.Тут ви зосереджуєтеся на тестах одиниць та інтеграції перед тестами E2E.За допомогою порад та практик, які я виділив, ви можете ефективно виконувати тестування безперервної регресії в середовищі CI/CD і отримувати негайну відгук, перш ніж розгортати код.