Рубрики
Без рубрики

Случайное руководство для питоистских светильников с примерами

При написании ваших сценариев автоматизации тестов Selenium вы часто требовали данных, которые вы хотите поделиться … Теги с Pтойцами, Python, Selenium, учебником.

При написании ваших сценариев автоматизации тестирования Selenium вы часто требуют данных, которые вы хотите поделиться на нескольких тестах. Это делается с помощью объектов, которые используются для создания конкретного набора данных. В Pytest это можно легко сделать с помощью светильников.

Рассмотрите тестовый сценарий, где MySQL-запросы выполняются в базе данных. Время выполнения здесь зависит от размера базы данных, и операции могут быть тяжелыми процессорами в зависимости от его размера. В таких случаях повторяющиеся реализация и выполнение избегают с использованием приспособлений Ptyest, поскольку они подают данные тестам, таким как соединения БД. Они также помогают интунтировать Webdriver Selenium для просмотра браузеров, URL-адресов для тестирования и т. Д.

В этой части серии SELENIUM PYTHON УПРАВЛЕНИЯ, я сосредоточусь на Питистые светильники Отказ Я бы дальше исследовал, почему вы должны использовать его, а затем исследовать сферу приспособлений.

Что такое питистые светильники?

Приспособления Pтойца являются функциями, прикрепленными к тестам, которые выполняются до выполнения функции тестирования. Светильники являются набором ресурсов, которые должны быть установлены до и очищены после завершения выполнения автоматизации тестирования Selenium.

Функция прибора для Pteest автоматически вызывается Pytest Framework, когда имя аргумента и крепеж одинаково.

Функция помечена в виде крепежа, используя следующий маркер:

@pytest.fixture

Ниже показано, что приведен образец Pтойной приспособления для этого учебного пособия Selenium Python:

@pytest.fixture
def fixture_func():
   return "fixture test"
def test_fixture(fixture_func):
    assert fixture_func == "fixture test"

В примерном коде, показанном выше, функция прибора является fixture_func (). Это называется, когда функция тестирования Test_Fixture () вызывается для выполнения. Возвращаемое значение функции прибора передается как аргумент для test_fixture (). Assert повышен, если значение, возвращаемое fixture_func (), не соответствует ожидаемому выводу.

ПОЧЕМУ ИСПОЛЬЗУЙТЕ УСТАНОВКИ PTESTEST?

Приспособления для PyTest используются в Python вместо классических методов настройки стиля XUNIT и STOUP и STALDOND, где определенный раздел кода выполнен для каждого тестового корпуса.

Существуют различные причины использования приспособлений Ptyest, основные из них ниже:

  • Питистые светильники реализуются модульной образом. Они просты в использовании, и никакая кривая обучения не участвует.
  • Как и нормальные функции, приспособления также имеют массу и срок службы. Объем по умолчанию Pteest Baskture является функциональной областью. Помимо спецификации функций, другие приспособления Ptyest Scopes – модуль, класс и сеанс.
  • Приспособления с помощью области функций улучшают читаемость и согласованность в тестовом коде. Это делает техническое обслуживание кода намного проще.
  • Функция приспособлений Pteest многоразовая и может использоваться для простых единиц-тестирования, а также тестирующих сложных сценариев.
  • Светильники используют инъекцию зависимости, популярное объектно-ориентированное программирование концепции. Функции прибора действуют как инжекторы и тестовые функции, которые используют приспособления, являются потребителями объектов прибора.

Чтобы объяснить важность упорных приспособлений, я возьму простой пример, где функции настройки () и operdown () одного теста (Test_1) вызываются даже когда выполняется другой тест (Test_2). Для простого теста этот маленький накладные расходы не могут сделать такую огромную разницу в исполнении. Однако, если сценарии автоматизации тестирования Selenium содержат частый доступ к базам данных или тестам, выполняемыми на нескольких комбинациях браузеров и ОС, повторяющееся исполнение может вызвать значительный удар по производительности выполнения.

#Import all the necessary modules for Selenium test automation for this Selenium Python tutorial
import pytest

def resource_1_setup():
    print('Setup for resource 1 called')

def resource_1_teardown():
    print('Teardown for resource 1 called')

def setup_module(module):
    print('\nSetup of module is called')
    resource_1_setup()

def teardown_module(module):
    print('\nTeardown of module is called')
    resource_1_teardown()

def test_1_using_resource_1():
    print('Test 1 that uses Resource 1')

def test_2_not_using_resource_1():
    print('\nTest 2 does not need Resource 1')

Test Case Test_2_not_using_Resource_1 () выполняется, вызывая следующую команду на терминале

pytest --capture=no --verbose test_advantages.py::test_2_not_using_resource_1

Как показано на выходе выполнения, функции для ресурса 1 излишне используются, даже если выполняется только Test_2.

Упомянутая выше проблема в этом уроке Selenium Python может быть зафиксирован путем определения функции прибора Resource_1_Setup () и Resource_1_Teardown (), похожим на реализацию стиля XUNIT. Область применения функции прибора – модуль)]

Как видно в снимке исполнения, функция настройки для ресурса 1 вызывается только для Test_1 (а не для test_2).

Это то, где упорные светильники эффективны в качестве повторяющихся реализации и необходимости ненужного выполнения исключается.

Сфера применения питоиста

Область применения функции прибора указывает количество раз, когда вызывается функция прибора. Вот подробное описание приспособления питоистских приспособлений в этом учебном пособии Selenium Python:

  • Функция – Это значение по умолчанию область применения прибора. Приспособление с функцией Case выполняется один раз на сеанс.
  • Пакет (или сеанс) – приспособление Pteest с объемом в качестве сеанса создается только один раз для всей сеанса автоматизации тестирования Selenium. Область сеанса идеально подходит для использования, так как ручки WebDriver доступны для сеанса автоматизации тестирования Selenium.
  • Модуль – Как указывает имя, создается функция приспособления с объемом в качестве модуля (или вызываемого) только один раз на модуль.
  • Класс – Функция прибора создана один раз на класс объекта.

Сфера функции приспособления Pteest может быть поставляется с @ pytest.fixture маркер

# Fixture function with function scope for Selenium automation in this Selenium Python tutorial
@pytest.fixture(scope="function")

# Fixture function with session scope
@pytest.fixture(scope="session")

# Fixture function with module scope
@pytest.fixture(scope="module")

# Fixture function with class scope
@pytest.fixture(scope="class")

Автоматическое тестирование браузера с помощью селена и упорных светильников

В автоматическом тестировании браузера с селеном веб-браузер должен быть загружен до выполнения автоматизации тестирования Selenium. Загрузка браузера до каждого теста не является хорошей практикой. Скорее, веб-браузер должен быть загружен один раз, прежде чем тесты начались и закрыты после завершения испытаний. Приспособления для Pteest чрезвычайно полезны, когда вы выполняете автоматическое тестирование браузера.

Общий Селен Webdriver Реализация может быть частью функции прибора, в частности – инициализация Webdriver SELENIUM для браузера при тестировании и очистке ресурсов после завершения испытаний. Если вы новичок в WebDriver Selenium, я рекомендую вам проверить наш блог на архитектуре Webdriver Selenium.

Для демонстрации автоматического тестирования браузера с самыми приспособлениями Pteest и WebDriver Selenium я рассмотрю сценарии автоматизации тестирования Selenium, упомянутые ниже в этом руководстве Selenium Python:

Тестовый случай 1 (тестовый браузер – Chrome)

  1. Перейдите к URL https://lambdatest.github.io/sample-todo-app/
  2. Выберите первые два флажка
  3. Отправить «счастливое тестирование на лямбдатест» на текстовое поле с
  4. Нажмите кнопку «Добавить» и убедитесь, был ли текст был добавлен или нет

Тестовый случай 2 (тестовый браузер – Firefox)

  1. Перейдите к URL https://www.google.com.
  2. Поиск “лямбдатест”
  3. Нажмите на первый результат теста
  4. Поднимите утверждение, если название страницы не соответствует ожидаемому названию

Поскольку есть два разных случая автоматизации тестирования Selenium, нам понадобится две функции приборов для Ptyest для инициализации и депринимализации ресурсов для браузера Chrome & Firefox соответственно. Полная реализация ниже:

# Import the 'modules' that are required for execution for Selenium test automation
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time
from time import sleep
import sys

#Fixture for Firefox
@pytest.fixture(scope="class")
def driver_init(request):
    ff_driver = webdriver.Firefox()
    request.cls.driver = ff_driver
    yield
    ff_driver.close()

#Fixture for Chrome
@pytest.fixture(scope="class")
def chrome_driver_init(request):
    chrome_driver = webdriver.Chrome()
    request.cls.driver = chrome_driver
    yield
    chrome_driver.close()

@pytest.mark.usefixtures("driver_init")
class BasicTest:
    pass
class Test_URL(BasicTest):
    def test_open_url(self):
        self.driver.get('https://www.google.com/')
        self.driver.maximize_window()
        title = "Google"
        assert title == self.driver.title

        search_text = "LambdaTest"
        search_box = self.driver.find_element_by_xpath("//input[@name='q']")
        search_box.send_keys(search_text)

        time.sleep(5)

        # Option 1 - To Submit the search
        # search_box.submit()

        # Option 2 - To Submit the search
        search_box.send_keys(Keys.ARROW_DOWN)
        search_box.send_keys(Keys.ARROW_UP)
        time.sleep(2)
        search_box.send_keys(Keys.RETURN)

        time.sleep(5)

        # Click on the LambdaTest HomePage Link
        title = "Cross Browser Testing Tools | Free Automated Website Testing | LambdaTest"
        lt_link = self.driver.find_element_by_xpath("//h3[.='LambdaTest: Cross Browser Testing Tools | Free Automated ...']")
        lt_link.click()

        time.sleep(10)
        assert title == self.driver.title   
        time.sleep(2)

@pytest.mark.usefixtures("chrome_driver_init")
class Basic_Chrome_Test:
    pass
class Test_URL_Chrome(Basic_Chrome_Test):
    def test_open_url(self):
        self.driver.get('https://lambdatest.github.io/sample-todo-app/')
        self.driver.maximize_window()

        self.driver.find_element_by_name("li1").click()
        self.driver.find_element_by_name("li2").click()

        title = "Sample page - lambdatest.com"
        assert title ==  self.driver.title

        sample_text = "Happy Testing at LambdaTest"
        email_text_field =  self.driver.find_element_by_id("sampletodotext")
        email_text_field.send_keys(sample_text)
        time.sleep(5)

        self.driver.find_element_by_id("addbutton").click()
        time.sleep(5)

        output_str =  self.driver.find_element_by_name("li6").text
        sys.stderr.write(output_str)

        time.sleep(2) 

Код прохождения

Шаг 1 – Все необходимые модули для этого пример ученика Selenium Python импортируются в начале реализации.

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

Шаг 2 – Для тестирования создаются две функции приспособлений Pтойных приспособлений, одна для каждого корпуса автоматизации тестирования селена в виде разных браузеров используются для тестирования. Функция Chrome_Driver_init () украшена @ pytest.fixture, указывающей, что она будет использоваться в качестве функции прибора. Область применения крепежа установлена в класс.

#Fixture for Chrome
@pytest.fixture(scope="class")
def chrome_driver_init(request):
    chrome_driver = webdriver.Chrome()
    request.cls.driver = chrome_driver 

request.Cls будет установлен на некоторое время на область, который не имеет класс типа. Поскольку объем функции приспособлений Pтойца устанавливается в класс, запрос .CLS – это не что иное, как класс теста, который использует функцию. Для тестирования test_url_chrome () request.cls.driver будет такой же, как test_url_chrome.driver, который является ссылкой на экземпляр Webdriver Chrome.

Код после выхода выполняется как финализатор. После выполнения теста Webdriver SELENIUM отключается с помощью тестового метода автоматизации тестирования селена.

yield
chrome_driver.close()

Реализация для другой функции прибора I.E. Driver_init () одинаково, за исключением того, что используемый браузер является Firefox.

Шаг 3 – Для обеспечения того, чтобы веб-драйвер инициализирован только один раз, приспособления применяются к соответствующим базовым классам I.E. Baseetest () и Basic_chrome_test (). Классы испытаний будут продлены с соответствующего базового класса.

@pytest.mark.usefixtures("driver_init")
class BasicTest:
    pass
class Test_URL(BasicTest):
  .................................
  .................................

@pytest.mark.usefixtures("chrome_driver_init")
class Basic_Chrome_Test:
    pass
class Test_URL_Chrome(Basic_Chrome_Test):
  .................................
  .................................

Шаг 4 – Функции прибора [Driver_init () и Chrome_driver_init ()] передаются как аргументы к соответствующим тестовым функциям.

TEST_URL – это класс теста, который распространяется от базового класса Couseestest.

@pytest.mark.usefixtures("driver_init")
.................
.................
class Test_URL(BasicTest):
    def test_open_url(self):
        self.driver.get('https://www.google.com/')
        self.driver.maximize_window()
        title = "Google"
        assert title == self.driver.title
        .................
        .................
        search_box = self.driver.find_element_by_xpath("//input[@name='q']")
        search_box.send_keys(search_text)

        time.sleep(5)

        # Option 1 - To Submit the search
        # search_box.submit()

        # Option 2 - To Submit the search
        search_box.send_keys(Keys.ARROW_DOWN)
        search_box.send_keys(Keys.ARROW_UP)
        time.sleep(2)
        search_box.send_keys(Keys.RETURN)
        .................
        .................

TEST_URL_CHROME – это класс теста, который продлен от базового класса Basic_chroMe_test.

@pytest.mark.usefixtures("chrome_driver_init")
.................
.................
class Test_URL_Chrome(Basic_Chrome_Test):
    def test_open_url(self):
        self.driver.get('https://lambdatest.github.io/sample-todo-app/')
        self.driver.maximize_window()
        .................
        .................

        self.driver.find_element_by_name("li1").click()
        self.driver.find_element_by_name("li2").click()

        title = "Sample page - lambdatest.com"
        assert title ==  self.driver.title

        sample_text = "Happy Testing at LambdaTest"
        email_text_field =  self.driver.find_element_by_id("sampletodotext")
        email_text_field.send_keys(sample_text)
        time.sleep(5)

        self.driver.find_element_by_id("addbutton").click()
        .................
        .................

Оба класса содержат один тест. Испытания находят необходимые веб-элементы на веб-странице. После расположения соответствующие методы Selenium [find_element_by_name (), find_element_by_id ()] и необходимые операции [i.e. Нажмите (), отправьте (), send_keys () и т. Д.] Проводятся на этих элементах. Как эта часть учебного пособия Selenium Python ориентирована на приспособления для Ptyest, мы не получили бы в минуту подробности реализации автоматизации тестирования Selenium.

Следующая команда используется для выполнения автоматизации тестирования Selenium:

pytest --capture=no --verbose 

Ниже приведен ниже в этом уроке Selenium Python – это моментальный снимок выполнения, который указывает, что оба теста выполняются успешно.

Параметризованные приспособления для Ptyest

Что, если вам нужно выполнить те же тесты на разных веб-браузерах E.g. Chrome, Firefox, Opera и т. Д., С отдельными функциями приспособлений Ptyest Sciretures, которые создают величину Webdriver Selenium для требуемого веб-браузера. Рекомендуется иметь единую функцию прибора, которая может быть выполнена в разных входных значениях. Это может быть достигнуто через параметризованные приспособления для Ptyest, которые я покажу следующую в этом учебном пособии Selenium Python.

Параметризованное приспособление Driver_init, которое принимает ввод в качестве Chrome и Firefox ниже:

@pytest.fixture(params=["chrome", "firefox"],scope="class")

Декларация параметров с @ pytest.fixture содержит список значений (i.e. chrome, firefox) для каждого из которых будет выполнена функция прибора. Значение может быть доступно с использованием запроса .param function. Портирование кода из обычного (то есть непараметризованного) приспособления к параметризованному крепежу не требует никаких изменений в реализации функции.

Чтобы продемонстрировать параметризованные функции Pтойца, я бы выполнил следующее Тестовая автоматизация селена Шкафы на браузерах Chrome и Firefox:

Тестовый случай 1 (тестовые браузеры – Chrome, Firefox)

  • Перейдите к URL https://lambdatest.github.io/sample-todo-app/
  • Выберите первые два флажка
  • Отправить «счастливое тестирование на лямбдатест» на текстовое поле с
  • Нажмите кнопку «Добавить» и убедитесь, был ли текст был добавлен или нет

Поскольку автоматизация тестирования Selenium должна быть выполнена на браузерах Chrome и Firefox, мы сначала создаем параметризованную функцию прибора, которая принимает их в качестве аргументов. В зависимости от браузера, используемого для тестирования, инициирован подходящий экземпляр Webdriver для браузера I.E. Если значение параметра является Chrome, WebDriver для Chrome Browser инициализируется.

Как показано ниже в этом уроке Selenium Python, запрос .param используется для чтения значения из функции прибора. Остальная реализация функции прибора остается такой же, как функция не-параметра.

@pytest.fixture(params=["chrome", "firefox"],scope="class")
def driver_init(request):
    if request.param == "chrome":
        web_driver = webdriver.Chrome()
    if request.param == "firefox":
        web_driver = webdriver.Firefox()
    request.cls.driver = web_driver
    yield
    web_driver.close()

Реализация

# Import the 'modules' that are required for execution for Selenium test automation

import pytest
import pytest_html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time
from time import sleep
import sys

@pytest.fixture(params=["chrome", "firefox"],scope="class")
def driver_init(request):
    if request.param == "chrome":
        web_driver = webdriver.Chrome()
    if request.param == "firefox":
        web_driver = webdriver.Firefox()
    request.cls.driver = web_driver
    yield
    web_driver.close()

@pytest.mark.usefixtures("driver_init")
class BasicTest:
    pass
class Test_URL_Chrome(BasicTest):
    def test_open_url(self):
        self.driver.get('https://lambdatest.github.io/sample-todo-app/')
        self.driver.maximize_window()

        self.driver.find_element_by_name("li1").click()
        self.driver.find_element_by_name("li2").click()

        title = "Sample page - lambdatest.com"
        assert title ==  self.driver.title

        sample_text = "Happy Testing at LambdaTest"
        email_text_field =  self.driver.find_element_by_id("sampletodotext")
        email_text_field.send_keys(sample_text)
        time.sleep(5)

        self.driver.find_element_by_id("addbutton").click()
        time.sleep(5)

        output_str =  self.driver.find_element_by_name("li6").text
        sys.stderr.write(output_str)

        time.sleep(2)

Код прохождения

Как показано ниже в этом уроке Selenium Python, запрос .param используется для чтения значения из функции приспособлений Ptyest. Остальная реализация функции прибора остается такой же, как функция не-параметра.

@pytest.fixture(params=["chrome", "firefox"],scope="class")
def driver_init(request):
    if request.param == "chrome":
        web_driver = webdriver.Chrome()
    if request.param == "firefox":
        web_driver = webdriver.Firefox()
    request.cls.driver = web_driver
    yield
    web_driver.close()

Остальная часть реализации остается такой же, как тестовый случай (1), который продемонстрирован в разделе «Автоматическое тестирование браузера» с использованием приборов Selenium & Ptyest. Единственное изменение состоит в том, что мы использовали функцию параметризованного прибора для выполнения теста на браузерах Chrome и Firefox.

Ниже показано, является выполнение автоматизации тестирования Selenium на тесте браузеров:

Как видно в снимке терминала, тестовый код TEST_OPEN_URL () вызывается отдельно для входных значений Chrome и Firefox.

Параметризованные тестовые функции

Наряду с параметризованными тестовыми приспособлениями Pytest также предоставляет декораторы, использующие, что вы можете параметризировать тестовые функции. The @ pytest.mark.paranametrize Decorator позволяет параметризации аргументов для функции тестирования. Используя этот декоратор, вы можете использовать подход, ориентированный на данные для тестирования, поскольку автоматизация тестирования Selenium может быть выполнена в разных входных комбинациях.

Вот как @ pytest.mark.parametrize Decorator можно использовать для передачи входных значений:

@pytest.mark.parametrize("input_arg_1, input_arg_2,...,input_arg_n",
                         [("input_val_1", "input_val_2",...,"input_val_n")])

Как показано в Официальная документация параметризации в Pytest Ожидаемый вывод также может быть предоставлен вместе с входными параметрами.

Демонстрация параметризованных тестовых функций

Чтобы продемонстрировать параметризацию в тестовых функциях, мы выполняем автоматизацию тестирования Selenium, где открываются отдельные веб-страницы для браузеров Chrome и Firefox. Assert повышен, если заголовок страницы не соответствует ожидаемому названию.

Реализация

# Import the 'modules' that are required for execution

import pytest
import pytest_html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time
from time import sleep
import sys

@pytest.mark.parametrize(
                         "test_browser, test_url",
                         [
                             ("chrome", "https://www.lambdatest.com/"),
                             ("firefox", "https://www.lambdatest.com/blog/"),
                         ]
                        )
def test_open_url(test_browser, test_url):
    if test_browser == "chrome":
        web_driver = webdriver.Chrome()
        expected_title = "Cross Browser Testing Tools | Free Automated Website Testing | LambdaTest"
    if test_browser == "firefox":
        web_driver = webdriver.Firefox()
        expected_title = "LambdaTest | A Cross Browser Testing Blog"

    web_driver.get(test_url)
    web_driver.maximize_window()

    assert expected_title ==  web_driver.title

    time.sleep(5)

    web_driver.close()

Как показано в приведенном выше реализации для этого учебного пособия Selenium Python, два входных аргумента типа String (Test_Browser & Test_URL) поставляются в декоратор @ Pytest.mark.parametrize. Входные значения разделены запятой (,) и прилагаются под [].

@pytest.mark.parametrize(
                         "test_browser, test_url",
                         [
                             ("chrome", "https://www.lambdatest.com/"),
                             ("firefox", "https://www.lambdatest.com/blog/"),
                         ]
                        )

Функция тестирования использует входные аргументы, добавленные через декоратор для выполнения автоматизации тестирования Selenium.

def test_open_url(test_browser, test_url):
if test_browser == "chrome":
        web_driver = webdriver.Chrome()
        expected_title = "Cross Browser Testing Tools | Free Automated Website Testing | LambdaTest"
    ...............................
    ...............................

Остальная часть реализации является самосвязкой, и мы бы не получили детали того же. Ниже приведены ниже в этом уроке Selenium Python – это снимок исполнения, который указывает на то, что автоматизация тестирования Selenium была выполнена по всему как входные комбинации.

Совместное использование Pтойских светильников по тестам

Там могут быть случаи, когда упорные приспособления должны быть разделены на разные тесты. Совместное использование питоистских приспособлений может быть достигнуто путем добавления функций приложений Ptyest, которые будут выставлены в Conftest.py. Это хорошая практика, чтобы сохранить Conftest.py в корневой папке, откуда выполняется исполнение автоматизации тестирования Selenium.

Ниже приведено Conftest.py, где добавляется параметризованная функция прибора Driver_init ().

conftest.py

# Import the 'modules' that are required for execution

import pytest
from selenium import webdriver

@pytest.fixture(params=["chrome", "firefox"])
def driver_init(request):
    if request.param == "chrome":
        web_driver = webdriver.Chrome()
    if request.param == "firefox":
        web_driver = webdriver.Firefox()
    request.cls.driver = web_driver
    yield
    web_driver.close()

В качестве функции приспособления Driver_init () является частью Conftest.py, реализация функции крепления удаляется из тестового кода и @ pytest.mark.usefixtures Decorator с входом в качестве функции прибора добавляется в тестовом файле.

@pytest.mark.usefixtures("driver_init")

Ниже приведен фрагмент реализации в тестовом файле:

import pytest
import pytest_html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time
from time import sleep
import sys

@pytest.mark.usefixtures("driver_init")
class BasicTest:
    pass
class Test_URL_Chrome(BasicTest):
    def test_open_url(self):
        self.driver.get('https://lambdatest.github.io/sample-todo-app/')
        self.driver.maximize_window()
        ...............................
        ...............................

Остальная часть реализации остается прежним, что и тот, который продемонстрировал в разделе Параметризованные приспособления. Как видно из фрагмента кода, реализация светильника больше не является частью тестового кода, так как он теперь смещен в Conftest.py. Мы не импортируем Conftest.py в тестовом коде, так как Pytest Framework автоматически проверяет его наличие в корневом каталоге, когда выполняется компиляция.

Пропуск и XFail Tests в Pтойте

Есть случаи, когда тест может не иметь отношения к определенной платформе или браузеру. Вместо того, чтобы выполнить корпус автоматизации тестирования Selenium для этой платформы и ожидаю, что его проваливается, было бы лучше, если тест пропущен с действительной причиной.

А Пропустить В Pytest означает, что ожидается, что тест пройдет только на если определенные условия выполнены. Обычные случаи выполняют определенные тесты для перекрестных браузеров на новейших браузерах, таких как Chrome, Firefox и т. Д. И пропуская в Internet Explorer по причине.

А xfail означает, что ожидается, что тест не пройдет по какой-то причине. Общий пример – это тест на функцию, которая еще предстоит реализовать. Если тест, помеченный как XFail, по-прежнему происходит, он помечен как XPASS (и не проход).

Тесты XFail указаны с использованием следующего маркера:

@pytest.mark.xfail

Тесты могут быть пропущены для выполнения, используя следующий маркер:

@pytest.mark.skip

Испытания, которые пропускают, XPAS или XFail, сообщаются отдельно в резюме теста. Подробная информация о пропущенных/с xFailed Tests недоступна по умолчанию в сводной основе и может быть включена с использованием опции ‘-R’

pytest -rxXs  

Пропуск тестовых функций

Функция тестирования, которая должна быть пропущена для выполнения, может быть помечена с помощью декоратора Skip вместе с необязательной причиной пропуска теста.

@pytest.mark.skip(reason="reason to be skipped")
def test_a_feature():
    .................

Для условного пропуска marker @ pytest.mark.skipif можно использовать для пропустить функцию, если условие верно. В примере, показанном ниже этого учебного пособия Selenium Python, Test_function () не будет выполнен (I.e. пропущена), если версия Python составляет менее 3,8.

@pytest.mark.skipif(sys.version_info < (3, 8), reason="requires python3.8 or higher")
def test_function():
    ...............

Подробная информация о маркерах Skip & Skipif доступна в официальной документации Pteest здесь & здесь Отказ

XFail – Marking Test Test Function, как ожидается неудачно

Marker XFail используется для отмены функции тестирования, которая, как ожидается неудачно.

@pytest.mark.xfail
def test_func():
    .................

Если тест не удается только в определенном состоянии, тест может быть помечен как XFail с условием и необязательной причиной, напечатанной рядом с XFailed Test.

@pytest.mark.xfail(sys.platform == "win64", reason="Test cannot be executed on Win 64 platform")
def test_func():
    .................

Маркеры XFail и Skip также могут быть использованы вместе с приспособлениями в Pтойте. Соответствующие маркеры могут поставляться вместе с параметрами в параметризованном приспособлении. Снаппин пример кода ниже:

@pytest.mark.parametrize(
    "test_browser, test_url",
    [
        pytest.param("firefox", "https://lambdatest.github.io/sample-todo-app/", marks=pytest.mark.xfail),
        pytest.param("chrome", "https://www.lambdatest.com/blog/", marks=pytest.mark.basic),
        pytest.param("safari", "https://www.lambdatest.com/blog/", marks=pytest.mark.skip),
    ]
)

Чтобы продемонстрировать использование маркеров XFail и Skip с параметризованными приспособлениями, мы принимаем образец тестовых случаев, которые выполняются на браузерах Chrome, Firefox и Safari. Как видно в фрагменте выше:

  1. Тест на Firefox отмечен как xfail
  2. Тест на Chrome – это обычный тест и отмечен маркером Pytest.mark.basic
  3. Тест на сафари помечен как пропустить, следовательно, это не будет выполнено

Полная реализация ниже:

# Import the 'modules' that are required for execution

import pytest
import pytest_html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time
from time import sleep
import sys

@pytest.mark.parametrize(
    "test_browser, test_url",
    [
        pytest.param("firefox", "https://lambdatest.github.io/sample-todo-app/", marks=pytest.mark.xfail),
        pytest.param("chrome", "https://www.lambdatest.com/blog/", marks=pytest.mark.basic),
        pytest.param("safari", "https://www.lambdatest.com/blog/", marks=pytest.mark.skip),
    ]
)

def test_open_url(test_browser, test_url):
        if test_browser == "firefox":
            web_driver = webdriver.Firefox()
            web_driver.get(test_url)

            web_driver.maximize_window()

            web_driver.find_element_by_name("li1").click()
            web_driver.find_element_by_name("li2").click()

            title = "Sample page - lambdatest.com"
            assert title ==  web_driver.title

            sample_text = "Happy Testing at LambdaTest"
            email_text_field =  web_driver.find_element_by_id("sampletodotext")
            email_text_field.send_keys(sample_text)
            time.sleep(5)

            web_driver.find_element_by_id("addbutton").click()
            time.sleep(5)

            output_str =  web_driver.find_element_by_name("li6").text
            sys.stderr.write(output_str)
        if test_browser == "chrome":
            web_driver = webdriver.Chrome()
            web_driver.get(test_url)
            title = "LambdaTest | A Cross Browser Testing Blog"

            assert title ==  web_driver.title

        time.sleep(2)
        web_driver.close()

Тестовый случай, который должен быть выполнен на Firefox, помечен как xfail, но проходит тестовый корпус. Следовательно, окончательный статус теста на Firefox является XPASS. Тест на Chrome браузер отмечен маркером Pytest.mark.basic. Он успешно выполняется и, следовательно, статус проходит. Окончательный тест находится на браузере Safari и помечается маркером Skip. Следовательно, это пропущено для исполнения. Ниже приведен ниже в этом уроке Selenium Python – это снимка исполнения:

Мы используем более ранний пример для демонстрации использования маркеров XFail и Skip с маркерами, применяемыми к индивидуальным тестам.

# Import the 'modules' that are required for execution

import pytest
import pytest_html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time
from time import sleep
import sys

@pytest.mark.xfail
def test_chrome_url():
    web_driver = webdriver.Chrome()
    web_driver.get("https://lambdatest.github.io/sample-todo-app/")

    web_driver.maximize_window()

    web_driver.find_element_by_name("li1").click()
    web_driver.find_element_by_name("li2").click()

    title = "Sample page - lambdatest.com"
    assert title ==  web_driver.title

    sample_text = "Happy Testing at LambdaTest"
    email_text_field =  web_driver.find_element_by_id("sampletodotext")
    email_text_field.send_keys(sample_text)
    time.sleep(5)

    web_driver.find_element_by_id("addbutton").click()
    time.sleep(5)

    output_str =  web_driver.find_element_by_name("li6").text
    sys.stderr.write(output_str)
    time.sleep(2)
    web_driver.close()

@pytest.mark.xfail    
def test_firefox_url():
    web_driver = webdriver.Firefox()
    web_driver.get("https://www.lambdatest.com/blog/")

    web_driver.maximize_window()    

    title = "LambdaTest | A Cross Browser Testing Blog"
    assert title ==  web_driver.title
    time.sleep(2)
    web_driver.close()

@pytest.mark.skip 
def test_safari_url():
    web_driver = webdriver.Safari()
    web_driver.get("https://www.lambdatest.com/")

    web_driver.maximize_window()    

    title = "Cross Browser Testing Tools | Free Automated Website Testing | LambdaTest"
    assert title ==  web_driver.title
    time.sleep(2)
    web_driver.close()

Тестовые случаи test_chrome_url () и test_firefox_url () помечены как xfail Но они успешно выполняют. Следовательно, результат для этих испытаний является XPASS. С другой стороны, окончательный тест TEST_SAFARI_URL () отмечен Pytest.mark.skip Marker и, следовательно, будет пропущен из исполнения. Ниже показано, что моментальный снимок выполнения:

Ударяя это!

Светильники Pтойца являются функциями, которые выполняются до того, как каждая функция, к которой она применяется, выполняется. Светильники могут быть использованы для простых модульных тестирования, а также тестирования для сложных сценариев. Приспособления для питистов идеально подходят для использования в Тестирование кросс-браузера Поскольку ресурсы браузера не должны быть созданы каждый раз, когда выполняется тест.

Функция, модуль, класс и сеанс – это различные области, доступные с функциями приспособления. Приспособления для Ptyest, а также тестовые функции могут быть параметризованы. Conftest.py используется для обмена светильниками по тестам.

Не стесняйтесь ретвитнуть и поделиться этой статьей со своими сверстниками! Дайте нам знать о любых запросах или сомнениях, которые вы можете иметь в разделе «Комментарий» ниже. Вот и все сейчас! Счастливое тестирование !!! 😊

Оригинал: “https://dev.to/himanshusheth004/end-to-end-tutorial-for-pytest-fixtures-with-examples-518k”