Форум сайта python.su
Всем привет. Я QA и новичек в Python. Поэтому прошу не судить очень строго
До этого писал автотесты на c# но в связи с “производственной” необходимостью начал переписывать все свои тесты на python. Не вдаваясь в подробности - язык хорош однозначно, но никак не могу правильно построить тестовую архитектуру в контексте параметризации тестов.
Тестируемое приложение: web казино - Рулетки. Экран в основном всегда один
Использую Py.test + Selenium
Попытаюсь описать в чем у меня возникает сложность:
Тестовая ахтиектура строится по PageObject (но боюсь ошибиться в названии):
project:
conftest.py:
import json import os import pytest from fixture.app_manager import AppManager from data.data_test import testdata fixture = None restart = False target = None @pytest.fixture(scope="function") def app(request): global target global fixture path_to_target = os.path.join(os.path.dirname(os.path.abspath(__file__)), request.config.getoption("--target")) if target is None: with open(path_to_target) as config_file: target = json.load(config_file) if fixture is None or not fixture.is_valid(): fixture = AppManager(browser=target["browser"][0]) smart_start(fixture) return fixture @pytest.fixture(scope="session", autouse=True) def stop(request): def fin(): fixture.destroy() request.addfinalizer(fin) return fixture def smart_start(fixture): global restart restart = fixture.navigator.smart_home_page_opening() fixture.settings.smart_settings_popup_closed(restart) def pytest_addoption(parser): # parser.addoption("--browser", action="store", default="firefox") parser.addoption("--target", action="store", default="target.json") def pytest_generate_tests(metafunc): for fixture in metafunc.fixturenames: if fixture.startswith("data_for_test"): data_for_test = testdata metafunc.parametrize(fixture, data_for_test, ids=[str(x) for x in testdata])
[code python]
def test_when_game_opened_expected_spin_button_displayd(app, data_for_test):
assert app.game_buttons.spin_button_is_displayed()[/code]
class AppManager: def __init__(self, browser="firefox"): if browser=="firefox": self.driver = webdriver.Firefox() elif browser == "chrome": self.driver = webdriver.Chrome() else: "incorrect browser" self.driver.implicitly_wait(0.5) self.game_buttons = Game_button_helper(self) self.navigator = Navigation_helper(self) self.settings = GameSettings(self) self.wait = Waiters(self) self.client = Clients(self) def destroy(self): self.driver.quit() def is_valid(self): try: self.driver.current_url return True except: return False
[{'eng': ['USD', 255]}, {'eng': ['GBP', 255]}, {'eng': ['EUR', 255]}, {'eng': ['CAD', 255]}, {'eng': ['SEK', 255]}, {'eng': ['NOK', 255]}, {'dan': ['DKK', 8]}, {'rum': ['RON', 9]}, {'ita': ['EUR', 1]}, {'spa': ['EUR', 2]}, {'eng': ['USD', 7]}
Офлайн
1. Вы можете задать в фикстурах исполнение с разными параметрами.
2. Можно разные параметры задавать для тест функции.
P.S. Пишите проще. Никто Весь ваш код читать не будет Лучше напишите типа простые функции с принтами и параметры, которые эти тестовые функции получают и какие принты хотите получить в итоге…
Офлайн
4kpt_V
1. Вы можете задать в фикстурах исполнение с разными параметрами
4kpt_VСпасибо за совет, обязателно учту. Просто никогда форумами напользовался, это уже от бенадежности
P.S. Пишите проще. Никто Весь ваш код читать не будет Лучше напишите типа простые функции с принтами и параметры, которые эти тестовые функции получают и какие принты хотите получить в итоге…
Офлайн
Офлайн