Інструменти та оточення
Реалізація завдань на тестування виконується мовою Python (бажано - версії 3.5 або новіше, прийнятно - версії 2.7) з використанням модуля unittest. Тестування front-end - виключно для браузера Google Chrome (потрібно мати встановлений chromedriver) з використанням Selenium for Python.
Завдання
Перше завдання кожного рівня стосується тестування графічного інтерфейсу сайтів, друге передбачає написання unit тестів для Python модулів. У кожному рівні треба виконати тільки одне завдання. Бажано обирати завдання різного спрямування, наприклад, перше у першому рівні та друге - у другому, або навпаки. Якщо з якимось типом завдань виникають складнощі, припустимо виконати завдання одного спрямування у двох рівнях (тільки перші або тільки другі).
Що взагалі оцінюється?
● розуміння The Zen of Python
● дотримання PEP8
● знання основних принципів тестування
● базове розуміння будови графічного інтерфейсу web-ресурсу та взаємодія з DOM.
Якщо проблеми виникають саме з використанням Python - можливо запропонувати рішення з використанням псевдо-коду або іншої мови програмування.
Перший рівень
Реалізувати тести, описані наступними тестовими випадками:
Зміст тесту Дія Очікуваний результат
Заголовок сайту
python.org містить слово ‘Python’ Перейти на сторінку за адресою
https://www.python.org/, дочекатися її завантаження Слово ‘Python’ входить у строку, яка міститься у title
За кліком на кнопку ‘About’ на сайті
python.org відбувається перехід на іншу сторінку. Перейти на сторінку за адресою
https://www.python.org/, дочекатися її завантаження. Виконати клік на елементі з css-селектором ‘li#about’. URL сторінки, що відкриється, буде
https://www.python.org/about/Результат виконання завдання: модуль з двома тестовими функціями у ньому.
або
Приведена нижче функція приймає об’єкти типу list довільної довжини, які містять тільки int 0 або 1, інвертує один довільний елемент та повертає результуючий list. Зробити цей код працездатним та створити тест, який перевірить, що було виконано одну заміну:
def mutate(some_list):
mutation_position = random.choice(range(len(some_list))
if some_list[mutation_position] == 0:
some_list[mutation_position] = 1
else:
some_list[mutation_position] = 0
return some_list
Результат виконання завдання: модуль, що містить функцію mutate у працездатному стані та модуль із одним тестом.
Другий рівень
Створити тестовий клас, що перевірятиме наявність елементів для реєстації за допомогою облікових записів Google та Facebook, а також форми (три поля даних та кнопка Sign Up) реєстрації на сайті
https://stackoverflow.com. Перевірити, що за спроби реєстрації через форму без введення електронної адреси і паролю, буде показано відповідне попередження.
Результат виконання завдання: модуль, що містить клас тестів із щонайменше трьома тестовими функціями у ньому.
або
Розробити усі необхідні юніт тести для наведеної нижче функції, виконати її рефакторинг:
import random
def mutate_text(text):
allowed_symbols = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' ', ',', '.']
if not isinstance(text, str):
raise TypeError('Argument is not a string!')
for symbol in text:
if symbol not in allowed_symbols:
raise ValueError('Text contains some undesirable symbols')
sentences = text.split('.')
for s_index in range(len(sentences) - 1):
sentences[s_index] = sentences[s_index].strip()
s_index_to_mutate = random.choice(