Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2017 11:31:43

Grif0n
Зарегистрирован: 2017-03-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Py.test Automation testing

Всем привет. Я 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])

=> tests:
=> test_table.py
[code python]
def test_when_game_opened_expected_spin_button_displayd(app, data_for_test):

assert app.game_buttons.spin_button_is_displayed()[/code]
=> fixture
ap_manager.py:
 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

=>data:
data_test.py:
возвращает список parameters, приблизетельно следующего вида:
 [{'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]}

Вот собственно вопрос:

Мне нужно что б каждый тест выполнялся согласно заданных параметров, НО таким образом как у меня построен conftest.py сначала каждый тест выполняется с каждым из параметров , а потом начинается запуск второго теста. Из-за этого я теряю очень много времени на берегрузке ссылки к игре (т.к. ссылка зависит от входных параметров). Мне нужно сделать так что б каждый набор тестов выполнился с одним из параметров и только потом этот же набор тестов выполнялся с другим.

Заранее спасибо за помощь

Офлайн

#2 Март 22, 2017 12:47:41

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Py.test Automation testing

1. Вы можете задать в фикстурах исполнение с разными параметрами.
2. Можно разные параметры задавать для тест функции.

P.S. Пишите проще. Никто Весь ваш код читать не будет Лучше напишите типа простые функции с принтами и параметры, которые эти тестовые функции получают и какие принты хотите получить в итоге…

Офлайн

#3 Март 22, 2017 12:54:13

Grif0n
Зарегистрирован: 2017-03-22
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Py.test Automation testing

4kpt_V
1. Вы можете задать в фикстурах исполнение с разными параметрами

вот наверное этот способ мне поможет больше всего. Как такое можно провернуть?

4kpt_V
P.S. Пишите проще. Никто Весь ваш код читать не будет Лучше напишите типа простые функции с принтами и параметры, которые эти тестовые функции получают и какие принты хотите получить в итоге…
Спасибо за совет, обязателно учту. Просто никогда форумами напользовался, это уже от бенадежности

Офлайн

#4 Март 22, 2017 13:01:37

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Py.test Automation testing

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version