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

Как сделать параметризацию в Pтойте с Selenium?

Включение автоматизированного тестирования в качестве части тестирования ускоряет процесс тестирования, чтобы ИСУ … Теги с Python, Selenium, тестированием, автоматизацией.

Включение автоматизированного тестирования в качестве части тестирования ускоряет процесс тестирования, чтобы вопросы могли быть определены и исправлены быстрее. На начальных этапах разработки продукта достаточно небольшой набор входов для тестирования и функционального тестирования единиц. Тем не менее, сложность испытаний увеличится как развитие развития, а большой набор входных значений требуется для проверки всей функциональности кода. Параметризованные тесты помогают лучше всего в таких сценариях. В этом Учебник Selenium Python Мы будем глубоко погружаться в параметризацию в Pтостесте – программное обеспечение.

Параметризованные тесты

Параметризованные тесты являются отличным способом определения и выполнения нескольких тестовых чехлов/тестовых люков, где только разница – это данные, используемые для тестирования кода. Параметризованные тесты не только помогают избежать дублирования кода, но и помогают улучшить покрытие/тестовое покрытие. Методы параметризации в Python могут использоваться вместо классических операций по настройке и разрывам, поскольку эти методы помогают ускорению задач, которые включают тестирование в разных браузерах, задачах, связанных с тестированием базы данных и т. Д.

Тестовая параметризация в Pytest возможна на нескольких уровнях:

  • pytest.fixture () для параметризованных функций прибора.
  • @ pteest.mark.parrametrize Чтобы определить несколько наборов аргументов и приспособлений на уровне тестовых функций или класса.
  • pytest_generate_tests () определить пользовательские параметризации схем или расширений.

Питиш – Светильники (использование и внедрение)

Рассмотрим сценарий, когда записи сотрудников, которые хранятся в базе данных, должны быть извлечены путем выполнения серии запросов MySQL. Если база данных сотрудников невелики, добыча записи не займет много времени, но ситуация будет отличаться, если у организации есть большое количество сотрудников.

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

Pytest Framework имеет гораздо лучший способ обработки приспособлений по сравнению с Стиль Ссунитских светильников Отказ Приспособления являются набором ресурсов, которые инициализированы/настройки до начала теста и очищены после завершения испытаний. Есть несколько преимуществ использования светильников в Pтойте; Некоторые из ключевых преимуществ ниже:

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

Функции прибора Используйте концепцию объектно-ориентированной концепции программирования, называемую впрыску зависимости, что позволяет приложениям вводить объекты на лету до классов, требующих их, без которых несут ответственность за эти объекты. В случае pteest функции приспособления являются инжекторами, а тестовые функции являются потребителями тех функций прибора.

Объем прибора по умолчанию является функцией. Область может быть изменена на модуль, сеанс или класс на основе требований к тестированию. Область применения крепежа указывает количество времен, которые создается прибор. Поскольку Python 3.5, приспособления сеанса объема имеют более высокий объем, чем приспособления охвата – функция, класс и модуль.

Приспособление выполняется только один раз за тестовую сессию Функция
Одно приспособление создается для полной тестовой сессии Сессия
Для каждого класса тестов создается только одно приспособление Класс
Этот прибор создан только один раз на модуль Модуль

Функции прибора – параметризация приспособлений

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

Параметры являются имитерами, и когда Pytest поставляется на повторном режиме, он преобразует утечку в список. Тестовые функции не должны знать о параметризации прибора. Используя параметризацию прибора, вы можете проверить функциональность вашего кода, написав исчерпывающие тестовые случаи с минимальным дублированием кода.

Чтобы продемонстрировать использование приборов, мы смотрим на простой пример, где методы настройки () и Sharddown () для ресурса 1 называются даже при выполнении Test_2. В случае, если такой сценарий включает в себя операции базы данных (чтение/запись), это приведет к тому, что значительные накладные расходы на систему, на которой выполняется тесты.

#Import all the necessary modules
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_2_not_using_resource_1 () называется следующей командой

pytest --capture=no --verbose ::test_2_not_using_resource_1

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

Это можно решить с помощью приборов, выравнивая Resource_1_Setup () и Resource_1_Teardown () в стиль XUNIT и присвоение применения модуля в функцию прибора.

#Import all the necessary modules
import pytest

#Implement the fixture that has module scope
@pytest.fixture(scope='module')
def resource_1_setup(request):
    print('\nSetup for resource 1 called')

def resource_1_teardown():
        print('\nTeardown for resource 1 called')

    # An alternative option for executing teardown code is to make use of the addfinalizer method of the request-context
    # object to register finalization functions.
    # Source - https://docs.pytest.org/en/latest/fixture.html
    request.addfinalizer(resource_1_teardown)

def test_1_using_resource_1(resource_1_setup):
    print('Test 1 uses resource 1')

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

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

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

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

В приведенном ниже примере Chrome & Firefox используются в качестве параметров к функциям прибора с объемом в качестве класса I.e. @ pytest.fixture (params = [“Chrome”,)

# 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
from time import sleep

@pytest.fixture(params=["chrome", "firefox", "MicrosoftEdge"],scope="class")
def driver_init(request):
    if request.param == "chrome":
        web_driver = webdriver.Chrome()
    if request.param == "firefox":
        web_driver = webdriver.Firefox()
    if request.param == "MicrosoftEdge":
        web_driver = webdriver.Edge(executable_path=r'C:\EdgeDriver\MicrosoftWebDriver.exe')
    request.cls.driver = web_driver
    yield
    web_driver.close()

@pytest.mark.usefixtures("driver_init")
class BasicTest:
    pass
class Test_URL(BasicTest):
        def test_open_url(self):
            self.driver.get("https://www.lambdatest.com/")
            print(self.driver.title)
            sleep(5)

Функция прибора получает доступ к каждому параметру через объект запроса.

def driver_init(request):

`

Три параметра с объемом в качестве класса используются для тестирования перекрестных браузеров. Параметры – это браузеры, на которых необходимо выполнить тестирование, то есть Chrome, Firefox и Microsoft Edge.

@ pytest.fixture (params = [“Chrome” , “Fire Fox”,)

В зависимости от параметра входного сигнала соответствует соответствующей WebDriver, то есть, если входной параметр Chrome, Chrome WebDriver установлен.

Если запрос.парам: .Хром ()

Как только выполнение/тестирование завершено, выделенные ресурсы по инициализации должны быть освобождены. Код после оператора дохода служит в качестве кода разрыва, где ресурсы, выделенные для Webdriver, освобождены.

урожай web_driver.close ()

Ниже показано, что выходной снимок, где URL-адрес теста, то есть Лямбдатест Главная страница, успешно открыта на трех браузерах, то есть хрома, Firefox и Microsoft Edge.

Обмен функциями прибора с использованием Conftest.py

Если вы должны поделиться функциями прибора между различными файлами, вы можете использовать Conftest.py. Функции прибора, которые должны быть переданы, должны быть перемещены в Conftest.py. Импорт конкретного файла/функции не требуется, так как он автоматически открывается Pтостестным, когда он определен в Conftest.py.

Функции приспособления проверяются на наличие в иерархическом порядке, который является тестовыми классами, затем тестовые модули, затем файлы Conftest.py и, наконец, встроенные и сторонние плагины.

Распределение тестовых данных

Если есть требование обмениваться данными между различными тестами, вы должны загрузить данные для совместных средств в приборах. Извлечение данных с использованием этого подхода может быть быстрее, поскольку она использует автоматические механизмы кэширования Pтойца.

Существует также возможность добавлять данные в папке тестов в структуре каталогов, где расположены тестовые чехлы/тестовые люксы. Плагины сообщества, такие как Pteest-datadir. и pteest-datafiles Также можно также использовать.

@ pytest.mark.parrametrize: Параметрирование тестовых функций

Перед тем, как мы глубоко погрузиться в @ pytest.mark.paranametize Decorator, мы посмотрим на пример, где добавление/операция Concatenation выполняется на разных типах входных значений, например, целое число, поплавок, строку и т. Д. Ниже приведена реализация в Pтой

`

Импорт Pтойца импортировать Pytest_html

def add_operation (input_1, input_2): return input_1 + input_2

Def Test_add_Integers (): (9, 6) Assert результат

def test_add_strings (): (тестирование перекрестного браузера на «,« лямбдатест ») Assert результат

В коде функция тестирования ADD_Function () тестируется для целочисленных и строковых входных значений. Утверждение поднимается на случай, если тестовый случай не пройден. Ниже приведен снимок тестового исполнения

Существует много дублирования кода, и единственное, что изменилось в двух тестовых функциях, то есть test_add_integers () и test_add_strings (), является типом входных аргументов. Этого можно избежать, используя декоратор @ pytest.mark.parametrize, который позволяет параметризации тестовых функций. Ниже приведен синтаксис Pytest.mark.paranametize Decorator

Metafunc.parametrize (аргументы, аргируты ,,,)

Metafunc – это объект, используемый для проверки функции тестирования и генерировать тесты в соответствии с тестовой конфигурацией или значениями, указанными в классе или модуле, где определяется тестовая функция. @ pytest.mark.parametrise может принимать разные параметры, как указано ниже:

Мы портируем пример код, который был показан выше, используя @ pytest.mark.paranametize Decorator.

`

Импорт Pтойца импортировать Pytest_html

def add_operation (input_1, input_2): return input_1 + input_2

@ pytest.mark.parrametrize (‘inp_1, inp_2, результат “, [(9, 6, 15) (тестирование кросс-браузера на’, ‘Lambdatest’ ‘, тестирование перекрестного браузера на лямбдатесте)]))

def test_add_integers_strings (inp_1, inp_2, результат): (inp_1, inp_2) assert result_1 `

Аргументы в @ pytest.mark.parrametrize передаются как строки, разделенные запятыми (,).

@ pytest.mark.parrametrize (‘inp_1, inp_2, результат “,

Имена аргументов, используемые в параметризованных параметрах, используются в функции тестирования, где выполняется тестирование. Входные значения в параметризованном декораторе передаются итеративно к функции тестирования. Например, в первом запуске входные значения (9, 6, 15) присваиваются для ввода аргументов Test_add_Integers_Strings Test I.e. ,,.

Как показано на снимке исполнения, набор входных значений (в виде кортежей) итерации после каждого тестового прогона до тех пор, пока не будет никаких входных значений в списке ввода.

Когда вы выполняете автоматическое тестирование по перекрестному браузеру для вашего веб-сайта/веб-приложения, вам необходимо проверить функциональные возможности на различных комбинациях веб-браузеров, операционных систем и устройств. @ pteest.mark.parametrize Decorator можно использовать для обеспечения параметризации тестовых случаев, которые используются для тестирования по перекрестному браузеру.

Ниже показан тестовый код, который использует @ pytest.mark.parametrize Decorator для передачи аргументов ввода (веб-браузер, URL) к функции тестирования I.E. Test_url_On_Browsers (input_browser, input_url)

`

Импорт Pteest Import Pytest_HTML из Webdriver Seelenium Import Webdriver от Selenium.webdriver.Chrome.Options Параметры импорта от Selenium.WebDriver.comMon.keys Импортные клавиши от времени Импорт Сон

Global Url_under_test.

@ pytest.mark.parrametrize (‘input_browser, input_url’, [ («Chrome», ‘ http://www.lambdatest.com’ ), («Firefox», ‘ http://www.duckduchgo.com’ ), («MicrostedEdge», ‘ http://www.google.com’ ), ] ) def test_url_on_browsers (input_browser, input_url): Если input_browser: .Хром () Если input_browser: .Fire Fox () Если input_browser: # Местоположение, где Microsoft Edge Driver (MicrosoftWriveriver.exe) размещен. Жди (Executable_Path = R’C: \ Edgedriver \ MicrosoftWebdriver.exe ») web_driver.maximize_window () web_driver.get (input_url) Печать (web_driver.title) Сон (5) web_driver.close () `

В зависимости от INPUT_BROWSER, соответствующая Webdriver устанавливается i.e. Webdriver Chrome устанавливается, если входной браузер Chrome.

def test_url_on_browsers (input_browser, input_url): Если input_browser: .Хром () Если input_browser: .Fire Fox () Если input_browser: # Местоположение, где Microsoft Edge Driver (MicrosoftWriveriver.exe) размещен. Жди (Executable_Path = R’C: \ Edgedriver \ MicrosoftWebdriver.exe »)

Как видно в выходном снимок, декоратор @parametrize определяет три разных (input_browser, input_url) кортелей, чтобы TEST_URL_ON_BROWSERS () будет работать в три раза, используя их в свою очередь.

Pтойцы API, которые можно использовать с параметризацией

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

Это где API Pтойцы используются с декораторами в Pтойте, некоторые из них упоминаются ниже:

1. pytest.fail – Отказ от выполнения тестового теста с сообщением для указания пользователя о состоянии выполнения тестирования.

Синтаксис

Не удается (Msg:, pytrace:)

Параметры

MSG (строка) Сообщение, которое показывает причину сбоя
Pytrace. Если это значение ложно, MSG покажет информацию о полной информации.

Пример

`импортировать pteest.

def add_operation (input_1, input_2): return input_1 + input_2

@ pteest.mark.parametrize (‘inp_1, inp_2, результат “, [(9, 6, 15), (10, 6, 22)]))

def test_add_integers_strings (inp_1, inp_2, результат): (inp_1, inp_2), если (result_1): # Включить трассировку стека для отладки вопроса Pytest.fail («Не удалось», True) `

2. pytest.xfail – Намеренно отметьте тестовый случай, как XFAILED с действительной причиной. Эта опция удобна, когда у вас есть тестовые случаи, готовые к проверке функциональности, которые не полностью завершены. После завершения выполнения функциональности тестовый случай можно удалить из статуса XFail.

Синтаксис

xfail (причина:)

Пример

`импортировать pteest.

def add_operation (input_1, input_2): return input_1 + input_2

@ pytest.mark.parrametrize (‘inp_1, inp_2, результат “, [(9, 6, 15), pytest.param (10, 6, 22, .mark.xfail)]))

def test_add_integers_strings (inp_1, inp_2, результат): (inp_1, inp_2) assert result_1 `

3. pytest.skip – Пропустить уже выполнение теста с сообщением, указывающим причину отказа. Эта API может использоваться только во время настройки, вызова или процесса разрыва тестирования или во время сбора, используя флаг allow_module_level_level

Синтаксис

Скип (MSG [,])

Параметры

MSG (строка) Сообщение, которое показывает причина пропуска теста.
allow_module_level (bool) / center> Если это значение верно, остальная часть выполнения модуля пропускается. Значение по умолчанию является ложным.

Пример

`импортировать pteest.

def add_operation (input_1, input_2): return input_1 + input_2

@ pytest.mark.parrametrize (‘inp_1, inp_2, результат “, [(9, 6, 15), pytest.param (10, 6, 22, .mark.skip)]))

def test_add_integers_strings (inp_1, inp_2, результат): (inp_1, inp_2) assert result_1 `

4. pytest.main – Проведен тестовый прогон для процессов, и код выхода возвращается в звонящий. Это идеальный способ, которым вы можете прописать Pтойцы программно из кода.

Синтаксис

,)

Параметры

args. Список аргументов командной строки.
плагины Объекты плагина должны быть автоматически зарегистрированы во время инициализации.

Пример

Ниже показано, что фрагмент кода, который показывает некоторые способы, в которых Ptyest.main может быть использован

`импортировать pteest.

Некоторая реализация Pтоиста перед Pytest.main вызывается

pytest.main (“test_multiplication.py”)

pytest.main (“- x ue-dir”) `

5. pytest.param – Этот API используется для уточнения параметров в Pytest.mark.paraMetrize Вызовы или параметризованные приспособления.

Синтаксис

pytest.param (значения, знаки, id_in_str),

Параметры

Пример

Уже покрыты как часть примеров, которые используют pytest.xfail и pytest.skip.

6. pytest.exit – Как указано имя, это API используется для выхода из процесса тестирования.

Синтаксис

Выход (MSG: STR, RETENCODE:)

Параметры

Msg Сообщение, которое необходимо отобразить при выходе
returncode. Обратный код, который должен использоваться при выходе.

Пример

`импортировать pteest.

def add_operation (input_1, input_2): return input_1 + input_2

@ pytest.mark.paraMetrize (‘inp_1, inp_2, результат “, [(10, 6, 22), (9, 6, 15)]))

def test_add_integers_strings (inp_1, inp_2, Результат): (inp_1, inp_2), если (result_1): # Первый тест терпит неудачу, отсюда второй тест не будет выполнен вообще Pytest.exit («Тест не удался», -1)

7. pytest.raises – Поднимите исключение неудачи.

Синтаксис

С повышением (ожидаемое_Exception: исключение [, совпадение]) как Excinfo

Параметры

Пример

`импортировать pteest.

def ill_div_test (): return 20/0 def test_invocation_1 (): с pytest.raises (zerodivisionError): zal_div_test ()

@ pytest.mark.xfail (Roises = ZerodivisionError) def test_invocation_2 (): zal_div_test () `

Помимо этих API, есть много других полезных API, таких как Pytest.importorskip, pytest.deprecated_call, pteest_warns и т. Д.; Однако покрытие всех API находится за пределами объема статьи. Для подробной информации о Pteest API, пожалуйста, посмотрите на Справочник API Pytest API Отказ

Укладка параметризованных декораторов

Если вы хотите выполнить тестирование на разных входных комбинациях, вы можете стекировать параметризованные декораторы. Возьмите пример, где входные значения X = [5, 6] и Y = [7, 8] передаются в @ pytest.mark.parrametrize Decorator. Тестовый код, который использует эти входные аргументы, может иметь 2 ^ n) входных комбинаций I.e/y,/y,/y,/y.

Когда вы выполняете тестирование по перекрестному браузеру для вашего веб-продукта, будут требования, в которых необходимо проводить тесты на комбинациях веб-браузеров и веб-URL. Это то, где параметризованная укладка может быть удобна, где параметризация в Pтойте можно сделать для веб-браузеров и тестовых URL.

Как показано в примере ниже, браузеры (Chrome & Firefox) и URL-адрес ввода ( https://www.lambdatest.com и https://www.duckduckgo ) сложены в параметризованных декораторах. Следовательно, четыре тестовых случая генерируются, и каждый браузер испытан к двум входным URL-адресам.

`

Импорт Pteest Import Pytest_HTML из Webdriver Seelenium Import Webdriver от Selenium.webdriver.Chrome.Options Параметры импорта от Selenium.WebDriver.comMon.keys Импортные клавиши от времени Импорт Сон

Global Url_under_test.

@ pytest.mark.parrametrize («input_browser», [«Chrome», «Firefox»]) @ pytest.mark.parrametrize (“input_url”, [‘ https://www.lambdatest.com ‘, ‘ https://www.duckduckgo.com’] )

def test_url_on_browsers (input_browser, input_url): если input_browser: .chrome () Если input_browser: .firefox () Web_Driver.maximize_window () web_driver.get (input_url) print (web_driver.title) (5) web_driver.close () `

Как видно в выходной скриншоте ниже, штабелированные параметризованные декораторы генерируют четыре тестовых случая.

pytest_generate_tests – определить пользовательскую параметризацию

В этом уроке Selenium Python мы сейчас посмотрим в аспект пользовательской параметризации в Pтойте. pytest_generate_tests – это полезный крючок, через который вы можете параметризировать тесты и реализовать схему пользовательской параметризации в Pтойте. Произвольная параметризация с использованием PyTest_Generate_Tests выполняется во время этапа сбора. pytest_generate_tests – это функция, а не приспособление. Входной аргумент для pytest_generate_tests – это объект metafunc.

Metafunc Объекты помогают проверять функцию тестирования и генерировать тесты в соответствии с тестовой конфигурацией (или значениями), указанными в классе или модуле, где определена тестовая функция. Аргумент MetaFunc To Pytest_Generate_tests дает некоторую полезную информацию о тестовой функции:

  • Взгляд на имя функции.
  • Посмотрите названия светильников, которые функционируют запросы.
  • Гибкость, чтобы увидеть код функции.

Реализация класса MetaFuncunc может быть найдена здесь Отказ Ниже приведен пример код, который демонстрирует использование функции PyTesteSt_Generate_tests для параметризации в Pтойте.

`импортировать pteest.

def pytest_generate_tests (metafunc): если “fix1” в metafunc.fixtureNames: metafunc.parametrize («Fix1», [«1», «2»]) Если «Fix2» в Metafunc.fixtureNames: Metafunc.paraMetrize («Fix2», [“КОМПАКТ ДИСК”])

def test_foobar (fix1, fix2): # Сравните тип данных светильников # Assert не повышен, если все параметры прибора имеют тип строкового типа Assert (Fix1) (Fix2) “

Как видно в реализации, параметризация выполняется дважды (то есть для fix1 и fix2). Ниже показано выходной скриншот, в котором код выполняется для 4 комбинаций (1-C, 1-D, 2-C, 2-D). Если типы данных FIX1 и FIX2 не совпадают, выдается асстановление.

Мы портируем предыдущий пример тестирования по перекрестным браузерам путем размещения изменений, необходимых для pytest_generate_tests.

`

Импорт Pteest Import Pytest_HTML из Webdriver Seelenium Import Webdriver от Selenium.webdriver.Chrome.Options Параметры импорта от Selenium.WebDriver.comMon.keys Импортные клавиши от времени Импорт Сон

def pytest_generate_tests (metafunc): Если «input_browser» в metafunc.fixtureNames: metafunca.parametrize («input_browser», [«Chrome», «Firefox»]) Если «input_url» в metafunca.fixtureNames: metafunc.parametrize («input_url», [” https://www.lambdatest.com “, ” https://www.duckduckgo.com”] )

def test_url_on_browsers (input_browser, input_url): если input_browser: .chrome () Если input_browser: .firefox () Web_Driver.maximize_window () web_driver.get (input_url) print (web_driver.title) (5) web_driver.close () `

Единственное изменение, которое мы сделали, это добавление pytest_generate_tests с параметризацией для браузера и тестового URL.

def pytest_generate_tests (metafunc): Если «input_browser» в metafunc.fixtureNames: metafunc.parametrize («input_browser», [“Chrome”, “Firefox”])) Если «input_url» в Metafunca.fixtureNames: metafunc.parametrize («input_url», [“https://www.lambdatest.com”, “https://www.duckduckgo.com”])))

Параметризация для тестирования автоматизации перекрестных браузеров

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

Это то, где тестирование перекрестного браузера на облаке может быть более эффективным, поскольку вам не нужно беспокоиться о настройке инфраструктуры, необходимой для Тестирование автоматизации селена Отказ Используя лямбдатест, вы можете проверить свой код на реальных браузерах 2000+ и операционные системы онлайн. Портирование кода Python на платформу LAMBDATEST требует минимальных усилий.

Начать с Тестовая автоматизация с Webdriver Pтойной и селеной Вам нужно создать аккаунт на лямбдатесте. Как только учетная запись создана, сделайте записку имя пользователя и токен доступа из Страница профиля на лямбдатесте Отказ Возможности браузера для теста в браузере могут быть установлены с помощью генератора Lambdatest возможностей. Вы можете отслеживать все тесты автоматизации, посетив https://automation.lambdatest.com/ Отказ Каждый тест будет иметь идентификатор теста и идентификатор сборки, связанный с ним, формат – https://automation.lambdatest.com/logs/?teStid= & build =

Чтобы продемонстрировать использование параметризации и платформы Lambdatest, мы придумали простое заявление о проблеме – открыть поисковую систему Duckduckgo на браузерах (Microsoft Edge, Chrome и Firefox) и выполнить поиск “лямбдатест”. Для модульности мы используем пользовательские аргументы командной строки, чтобы тестирование можно было выполнить, поставляя необходимые аргументы (браузер, версию браузера и операционную систему) на терминале.

conftest.py

Чтобы начать, мы создаем CORFEST.PY, который содержит реализацию функций прибора, которые необходимо поделиться между различными файлами. Функция Parser.Addoption используется с различными вариантами командной строки.

Варианты командной строки для нашего теста ниже:

Если аргумент командной строки для -Browser является «все», выполняется предварительно определенный набор тестов по перекрестным браузерам, а в том, что аргументы командной строки анализируются, сохраняются и передаются в соответствующие переменные через Parser.Addoption ().

def pytest_generate_tests (metafunc): «Функция генератора тестирования для проведения тестов по разным параметрам» Если «браузер» в METAFUNC.FIXTURENAMES: Если metafunc.config.getoption (“- B”): # Параметры передаются в соответствии с тем, что генерируется # https://www.lambdatest.com/capabilities-generator/ metafunc.parametrize («Платформа, браузер, браузер_версия», cross_browser_configuration. Lt_cross_browser_config)

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

def pytest_addoption (парсер): parser.addoption (“- P”, “- платформа”, , , , ) ……………………..

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

@ pytest.fixture Def Platform (запрос): «Приспособление для платформы – может быть Windows 10.0, OSX Sierra и т. Д.» «Эквивалентная запись для« платформы »: название платформы» rettion request.config.getoption (“- p”)

Conftest.py [Полная реализация]

`Python Import Cross_Browser_Configuration Import Petest Import OS

@ pytest.fixture def платформа (запрос): “Приспособление для платформы – может быть Windows 10.0, osx sierra и т. Д.” «Эквивалентная запись для« платформы »: Название платформы «Возврат Request.config.getoption (« – P »)

@ pytest.fixture def Браузер (запрос): “Приспособление для Brownermerame – может быть Chrome, Firefox, Safari и т. Д. «Эквивалентная запись для« Brownername »: name Browser-name” Repeate.config.getoption (“- b”)

@ pytest.fixture def browser_version (запрос): “Приспособление для версии браузера – может быть номером версии для соответствующего выбранного браузера” “Equivalent Entry для ‘версия’: номер версии” Вернуть request.config.getoption (“- x”)

def pytest_generate_tests (metafunc): «Функция тестирования генератора для запуска тестов по разным параметрам» Если «браузер» в METAFUNC.FIXTURENAMES: Если metafunc.config.getoption (“- B”): # Параметры передаются в соответствии с тем, что сгенерировано # https://www.lambdatest.com/capabilities-generator/ Metafunc.parametrize («Платформа, браузер, браузер_version», Cross_Browser_Configuration. Lt_cross_browser_config)

def pytest_addoption (парсер): parser.addoption (“- p”, “- платформа” ,,,) parser.addoption (“- B”, “- браузер” ,,,) parser.addoption (“- Х “”, “- верь” ,,, “”

cross_browser_configuration.py

Если аргументы командной строки, которые передаются во время тестирования, являются -b «все» или -Browser «все», предварительно определенная конфигурация (состоящая из браузера, версий браузера и операционные системы [платформ]). Используемые аргументы в соответствии с возможностями, генерируемыми генератором любезностей Lambdatest. Ниже показано, что возможности, созданные для Microsoft Edge Browser (версии 18.0) для платформы Windows 10.

возможности = { …………………….. «Платформа»: «Windows 10», «Британское изображение»: «Microsoftege», “Версия”: “18.0” }

Встроенный с требованиями к тестированию кросс-браузера и синтаксисом, используемые генератором возможностей Lambdatest, массивы для каждого из них определены в коде

Platform_List = [«Windows 10»] Браузеры = [«MicrosoftEdge», «Chrome»] chrome_test_versions = [“71.0”] …………………….. ……………………..

В функции Generate_LT_Configuration () мы переиграем через список браузеров, E.GMicrosoft Edge, Chrome и т. Д., и генерировать различные тестовые комбинации на основе версий и операционной системы браузера, на которых необходимо проводить тесты. Некоторые из генерируемых тестовых комбинаций ниже:

Microsoft Edge 18.0 Windows 10.
Хром 71.0 Windows 10.
Fire Fox 67.0 Windows 10.

Важно отметить, что Generate_LT_Configuration () будет вызван только в том случае, если параметр командной строки –b «все» или -Browser «все»

cross_browser_configuration.py [Полная реализация]

`python platform_list = [«Windows 10»] браузеры = [«MicrostedEdge», «Chrome»] Chrome_test_versions = [«71.0»] Firefox_test_versions = [«67,0»] Edge_test_versions = [“18.0”]

Def): «Версии Firefox» в местных жителях ():

if 'chrome_versions' in locals():
    ch_ver = chrome_test_versions

if 'edge_versions' in locals():
    edge_ver = edge_test_versions

LT_config = []

for browser in browsers:
    if browser == "Chrome":
        for ch_ver in chrome_test_versions:
            for platform_name in platform_list:
                # if platform_name == "Windows 10":
                config = [platform_name,browser,ch_ver]
                LT_config.append(tuple(config))

    if browser == "MicrosoftEdge":
        for edge_ver in edge_test_versions:
            for platform_name in platform_list:
                # if platform_name == "Windows 10":
                config = [platform_name,browser,edge_ver]
                LT_config.append(tuple(config))

    if browser == "Firefox":
        for ff_ver in firefox_test_versions:
            for platform_name in platform_list:
                # if platform_name == "Windows 10":
                config = [platform_name,browser,ff_ver]
                LT_config.append(tuple(config))

return LT_config

Lt_cross_browser_config () `

test_exec.py

Установка удаленного селена Webdriver для соответствующих веб-браузеров выполняется в Configure_WebDriver_Interface (). Удаленный URL-адрес, который назначен Command_Executor [в WebDriver. Remote ()] использует комбинацию имени пользователя и токена доступа для аутентификации пользователя. Вы можете найти эти детали на Страница профиля на лямбдатесте.

+ user_name + “:” + app_key + “@ hub.lambdatest.com/wd/hub”

Браузер, версия браузера и платформа назначаются соответствующим полям для формирования требуемых_Capabilities [в WebDriver. Дистанционный пульт()].

`

def webdriver_interface_conf (платформа, браузер, браузер_версия):

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
user_name = "user-name"
app_key = "app-key"

.............................................
if browser == 'chrome' or browser == 'Chrome':
    desired_capabilities = DesiredCapabilities.CHROME

desired_capabilities['browserName'] = browser
desired_capabilities['platform'] = platform
desired_capabilities['version'] = browser_version

.............................................

remote_url = "http://" + user_name + ":" + app_key + "@hub.lambdatest.com/wd/hub"

return webdriver.Remote(command_executor=remote_url, desired_capabilities=desired_capabilities) 

`

Поскольку мы используем Pytest Framework для тестирования, имя теста должно начинаться с test_. Здесь мы выполняем только один тест – test_send_keys_browser_combs (), которые демонстрируют использование событий.

test_exec.py [полная реализация]

`Python из Webdriver Selenium Import от Selenium.webdriver.comMon.desired_capabilities Импорт желаемыхCapabilities от Selenium.webdriver.comMon.Action_chains Import TageChains Import Sys, Импорт времени Urllib3 От времени Импорт Спать от Selenium.webdriver.comMon.keys .Usupport.ui Импортировать WebDriverwait.

def test_send_keys_browser_combs (платформа, браузер, browser_version): (платформа, браузер, браузер_версия) Driver.get (« https://duckduckgo.com/» )

# Send search keyboard to the Text Box element on DuckDuckGo
driver.find_element_by_id("search_form_input_homepage")
ActionChains(driver) \
    .send_keys("Lambdatest") \
    .perform()

time.sleep(5)
driver.quit()

def webdriver_interface_conf (платформа, браузер, браузер_версия):

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
user_name = "user_name"
app_key = "access_key"

if browser == 'firefox' or browser == 'Firefox':
    desired_capabilities = DesiredCapabilities.FIREFOX

if browser == 'chrome' or browser == 'Chrome':
    desired_capabilities = DesiredCapabilities.CHROME

if browser == 'safari' or browser == 'Safari':
    desired_capabilities = DesiredCapabilities.SAFARI

if browser == 'microsoftedge' or browser == 'MicrosoftEdge':
    desired_capabilities = DesiredCapabilities.EDGE   

desired_capabilities['browserName'] = browser
desired_capabilities['platform'] = platform      
desired_capabilities['version'] = browser_version

remote_url = "http://" + user_name + ":" + app_key + "@hub.lambdatest.com/wd/hub"

return webdriver.Remote(command_executor=remote_url, desired_capabilities=desired_capabilities)

`

Исполнение

Теперь, когда реализация завершена, мы запускаем тесты перекрестных браузеров на лямбдатесте с использованием предопределенных комбинаций (браузер, версия браузера и платформа), а также комбинации, указанные через аргументы командной строки.

Предварительно определенные комбинации

Это срабатывает с использованием следующей команды

py.test –browser “все”

Вы можете найти статус теста на вкладке Automation на веб-сайте лямбдатеста. Вы должны переключиться на «Test View», поскольку мы не указали детали сборки в возможностях. Просмотр теста доступно в https://automation.lambdatest.com/timeline/?viewtype=test&page=1 Ниже показано выходной снимок и исполнительный снимок на лямбдатесте.

Пользовательские комбинации

Это срабатывает с использованием следующей команды

`py.test -v –platform –browser –вер

py.test -v –platform “Windows 10” –browser “Chrome” –ver “72.0” `

Браузер, на котором выполняется тестирование, является Chrome (версия 72.0), а платформа представляет собой Windows 10. Ниже показано выходной снимок и исполнительный снимок на лямбдатесте.

Вывод

В этом селене Учебное пособие на Python Мы видели, как параметризация в Pytest может быть полезна для проверки нескольких сценариев, изменив только входные значения. Вместо того, чтобы поставлять тестовые данные вручную; pytest.fixture, @ pytest.mark.paraMetrize Decorator и Pytest_Generate_Tests () Может использоваться для параметризации в Pтойте. Крест-браузерное тестирование на облаке, например, лямбдатест, может использоваться с Pтоицевым и селеном, чтобы ускорить тестирование и построить масштабируемые тестовые случаи.

Оригинал: “https://dev.to/himanshusheth004/how-to-do-parameterization-in-pytest-with-selenium-3p3f”