diff --git a/home_work 10/conftest.py b/home_work 10/conftest.py new file mode 100644 index 0000000..8743018 --- /dev/null +++ b/home_work 10/conftest.py @@ -0,0 +1,32 @@ +import pytest +import datetime +import time + + +@pytest.fixture(scope='class', autouse=True) +def setup_module(request): + """Записываем время запуска сессии тестов""" + start_time = datetime.datetime.now().strftime('%d.%m %H:%M:%S') + print(f'Запустили тест {start_time}!') + + def closure(): + """Записываем время завершения сессии тестов""" + end_time = datetime.datetime.now().strftime('%d.%m %H:%M:%S') + print(f'Тест завершился {end_time}.') + + request.addfinalizer(closure) + + +@pytest.fixture(scope='function') +def test_fixture(request): + """Записываем время запуска отдельного теста""" + start_time = time.time() + print('Тест запустился!') + + def closure(): + """Записываем время завершения отдельного тестов""" + end_time = time.time() + print(f'Тест завершился. Время выполнения {end_time - start_time} секунд.') + + request.addfinalizer(closure) + diff --git a/home_work 10/lection 10_screenshots/all_tests.png b/home_work 10/lection 10_screenshots/all_tests.png new file mode 100644 index 0000000..a70973b Binary files /dev/null and b/home_work 10/lection 10_screenshots/all_tests.png differ diff --git a/home_work 10/lection 10_screenshots/smoke_tests.png b/home_work 10/lection 10_screenshots/smoke_tests.png new file mode 100644 index 0000000..d0d77ca Binary files /dev/null and b/home_work 10/lection 10_screenshots/smoke_tests.png differ diff --git a/home_work 10/lection 10_screenshots/tests_by_mask.png b/home_work 10/lection 10_screenshots/tests_by_mask.png new file mode 100644 index 0000000..8e798b7 Binary files /dev/null and b/home_work 10/lection 10_screenshots/tests_by_mask.png differ diff --git a/home_work 10/pytest.ini b/home_work 10/pytest.ini new file mode 100644 index 0000000..ad9d588 --- /dev/null +++ b/home_work 10/pytest.ini @@ -0,0 +1,7 @@ +[pytest] + +markers = + smoke: basic test + negative: negative test + by_zero + my_fixture \ No newline at end of file diff --git a/home_work 10/task1.py b/home_work 10/task1.py new file mode 100644 index 0000000..0d423bb --- /dev/null +++ b/home_work 10/task1.py @@ -0,0 +1,38 @@ +# Напишите генератор generate_random_name(), используя модуль random, +# который генерирует два слова из латинских букв от 1 до 15 символов, разделенных пробелами +# Например при исполнении следующего кода: +# gen = generate_random_name() +# print(next(gen)) +# print(next(gen)) +# print(next(gen)) +# print(next(gen)) +# +# Выводится: +# tahxmckzexgdyt ocapwy +# dxqebbukr jg +# aym jpvezfqexlv +# iuy qnikkgxvxfxtxv + +import random + + +def generate_random_name(): + max_lenght = 15 + min_lenght = 1 + + def random_words(): + lenght = random.randint(min_lenght, max_lenght) + word = "" + for _i in range(lenght): + letter = chr(random.randint(97, 112)) + word += letter + return word + + while True: + name = random_words() + " " + random_words() + yield name + +gen = generate_random_name() +print(next(gen)) +print(next(gen)) +print(next(gen)) \ No newline at end of file diff --git a/home_work 10/task3.py b/home_work 10/task3.py new file mode 100644 index 0000000..ab46540 --- /dev/null +++ b/home_work 10/task3.py @@ -0,0 +1,28 @@ +# Из набора тестов задания task_2 создайте один тест с параметрами, используя @pytest.mark.parametrize +# Промаркируйте 1 параметр из выборки как smokе, а 1 набор данных скипните + +import pytest + + +def all_division(*arg1): + + division = arg1[0] + for i in arg1[1:]: + division /= i + return division + +@pytest.mark.parametrize('numbers', [ + (10, 5), + (100, 10, 5), + pytest.param((100, 10, 2, 2), marks=pytest.mark.skip), + (1000, 10, 5, 2, 2) +]) +@pytest.mark.parametrize('smoke', [True, False], ids=['smoke', 'not smoke']) +def test_division(numbers, smoke): + if smoke: + pytest.skip('Пропускаем smoke тест.') + expected_result = numbers[0] / numbers[1] + for i in numbers[2:]: + expected_result /= i + assert all_division(*numbers) == expected_result + diff --git a/home_work 10/task4.py b/home_work 10/task4.py new file mode 100644 index 0000000..fdbb0fe --- /dev/null +++ b/home_work 10/task4.py @@ -0,0 +1,29 @@ +# Создайте класс с тестами и напишите фикстуры в conftest.py: +# 1) Фикстуру для класса и используйте её. Например, печать времени начала выполнения класса с тестами и окончания +# 2) Фикстуру для конкретного теста и используйте её не для всех тестов. Например, время выполнения теста. + +import pytest + + +def all_division(*arg1): + + division = arg1[0] + for i in arg1[1:]: + division /= i + return division + + +@pytest.mark.my_fixture +class TestAllDivision(): + + @pytest.mark.my_fixture + def test_division_by_zero(self, test_fixture): + with pytest.raises(ZeroDivisionError): + assert all_division(1, 0) + + def test_division_two_numbers(self): + assert all_division(4, 2) == 2 + + @pytest.mark.my_fixture + def test_division_three_numbers(self, test_fixture): + assert all_division(16, 4, 2) == 2 diff --git a/home_work 10/test_task2.py b/home_work 10/test_task2.py new file mode 100644 index 0000000..68990ba --- /dev/null +++ b/home_work 10/test_task2.py @@ -0,0 +1,46 @@ +# Напишите 5 тестов на функцию all_division. Обязательно должен быть тест деления на ноль. +# Промаркируйте часть тестов. Например, smoke. +# В консоли с помощью pytest сделайте вызов: +# 1) Всех тестов +# 2) Только с маркером smoke +# 3) По маске. Выберите такую маску, чтобы под неё подпадали не все тесты, но больше одного +# Пришлите на проверку файл с тестами, скрины с вызовами и их результаты. + +import pytest + +def all_division(*arg1): + + division = arg1[0] + for i in arg1[1:]: + division /= i + return division + +# Тест деление двух чисел +@pytest.mark.smoke +def test_division_two_numbers(): + assert all_division(25, 5) == 5 + +# Тест деление четырех чисел +@pytest.mark.smoke +def test_division_four_numbers(): + assert all_division(99, 3, 11, 3) == 1 + +# Тест деление на ноль +@pytest.mark.by_zero +def test_division_by_zero(): + with pytest.raises(ZeroDivisionError): + assert all_division(1, 0) + +# Тест с аргументами, включающими строковое значение +@pytest.mark.negative +def test_division_by_string(): + with pytest.raises(TypeError): + assert all_division(10, '5') + +# Тест с аргументами, включающими строковое значение +@pytest.mark.negative +def test_division_by_not_int(): + with pytest.raises(TypeError): + assert all_division(5, [3, 4]) + +