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

Начало работы с носом в Python [Учебное пособие]

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

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

Выбор правильной системы автоматизации тестирования может значительно упростить работу разработчика, работающего над тестовым кодом. Функции Framework могут быть использованы для записи тестов, которые выполняют работу с минимальной реализацией. Что касается тестирования Selenium Python, есть несколько структур автоматизации тестирования, такие как Pyunit, Pteest, робот, огурец и т. Д. Для выбора.

Стандартный модуль Python в Python теряет землю к другому Python Test Automation Frameworks , поскольку требуется много кода кода и тесты, должны быть включены в крупные классы испытаний. Нос – популярная альтернатива, если вы все еще хотите использовать структуру тестирования Python по умолчанию. Он имеет мощный набор функций, которые простирается в совершенстве, чтобы сделать тестирование проще Отказ В этом учебном пособие в носу Python мы глубоко погрузимся в носу, и как нос может быть использован для автоматизации тестирования Selenium (используя Unittest) более эффективно.

Введение в нос

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

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

Последняя версия носа – Нос2 Однако мы наблюдали, что значительный процент в разработчике и тестированной экосистеме все еще использует более старую версию носа I.E. Версия 1.3.7.

Следовательно, серия учебника по носу Python для автоматизации тестирования Selenium разделена на два набора, с этим набором фокусировки на использование носа 1.3.7 для тестирования Selenium Python.

Как установить носовую структуру

Структура носа может быть установлена путем выполнения следующей команды на терминале:

Пип устанавливает нос

Как видно на установочный скриншот ниже, установлена версия, составляет 1.3.7. Как нос и нос2 – два отдельных проекта, команда для установки не то же самое.

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

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

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

Опция 1

nosetests 

Вариант 2.

python -m nose 

Испытание открытия с помощью носа

Вот некоторые из простых правил для обнаружения тестов:

  • Как и другие рамки автоматизации Python, нос также автоматически выполняет все тесты, которые присутствуют в родительской папке (и его подпапках)
  • Модули (или файлы), которые забираются рамками, должны начать с «TEST_»
  • Методы испытаний должны начинаться с «TEST_»
  • Классы испытаний, охватывающие методы испытаний, должны начать с «теста»

Это некоторые из конвенций именования, которые мы будем использовать для тестирования Selenium Python с носом. Эти набор правил достаточно цели Тестирование автоматизации селена Однако вы могли бы посмотреть на полный набор правил в Раздел поиска тестов на сайте носа .

Пример использования носа

Номенклатура, сопровождаемая в Unittest Framework, также применяется к основам носа.

Чтобы продемонстрировать использование базы носа в этом учебном пособие в нос Python, мы используем простой пример автоматизации тестирования Selenium Test, в котором выполняется поиск Google для «LAMBDATEST», и на первом результате выполняется действие Click.

from selenium import webdriver
import time
from time import sleep
from selenium.webdriver.common.by import By

def test_google_search():
    driver = webdriver.Chrome()
    driver.get('https://www.google.com')
    driver.maximize_window()
    title = "Google"
    assert title == driver.title

    search_text = "LambdaTest"
    # search_box = driver.find_element_by_xpath("//input[@name='q']")
    search_box = driver.find_element(By.XPATH, "//input[@name='q']")
    search_box.send_keys(search_text)

    # Using Sleep is not a good programming practice
    # Only used here for demonstration purpose
    time.sleep(5)
    search_box.submit()

    time.sleep(5)

    # Click on the LambdaTest HomePage Link
    # This test will fail as the titles will not match
    title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest"
    # lt_link = driver.find_element_by_xpath("//h3[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']")
    lt_link = driver.find_element(By.XPATH, "//h3[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']")
    lt_link.click()

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

    # Release the resources in the teardown function
    print("TearDown initiated")
    driver.quit()

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

Основное преимущество использования носа (по сравнению с стандартным неотъемлемым модулем) заключается в том, что он автоматически собирает тесты. Существует гибкость для записи простых тестовых функций и/или тестовых классов, которые не являются подклассом Unittest. Прецедент.

Светильники в носу

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

Как и PY.Test или Unittest Methetures, метод настройки всегда работает до любого теста (или набора тестов), а метод Shardown работает, если метод установки успешно выполнен. Это независимо от состояния тестового прогона. Нос расширяет неtiettest Model Model of Setup (и разрыв).

Светильники могут быть достигнуты на следующих уровнях:

1. Тестовые пакеты

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

Для создания установки и разрыва для выполнения уровня пакета соответствующие методы должны быть определены в __init__.py тестового пакета. Номенклатура так, как показано ниже:

Setup - setup, setup_package, setUp, or setUpPackage
TearDown -  teardown, teardown_package, tearDown or tearDownPackage

2. Тестовые модули

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

Setup - setup, setup_module, setUp or setUpModule
TearDown -  teardown, teardown_module, or tearDownModule

3. Тестовые функции

Это позволяет определить настройку и разрыв на уровне функций. Как указывает имя, setup_function & trackdown_function выполняется до и после вызова тестового функции.

Нет конкретных конвенций именования, за исключением того, что вы должны применить метод установки с декоратором @With_Setup, который импортируется из носа. Это широко используемый декоратор, и мы продемонстрировали его использование в предстоящих примерах.

4. Тестовые классы

Класс теста – это класс, определенный в тестовом модуле, который соответствует test_match или представляет собой подкласс Unittest. Прецедент. Функции соответствующей установки и разрыва выполняются в начале и в конце класса методов испытаний. Вот номенклатура для приспособлений установки на уровне класса:

Setup - setup_class, setupClass, setUpClass, setupAll (or setUpAll)
TearDown -  teardown_class, teardownClass, tearDownClass, teardownAll (or tearDownAll)

Помимо правильного соглашения о именовании, метод установки должен применяться с помощью @Classmethod Decorator.

Чтобы продемонстрировать использование светильников, мы используем приспособления носа в разных уровнях – класс, модуль и метод.

import nose
from nose.tools import with_setup

# Can also be setup, setup_module, setUp or setUpModule
def setUpModule(module):
    print ("")
    print ("%s" % (setUpModule.__name__,))

# Can also be teardown, teardown_module, or tearDownModule
def tearDownModule(module):
    print ("%s" % (tearDownModule.__name__,))

def setup_func():
    print ("%s" % (setup_func.__name__,))

def teardown_func():
    print ("%s" % (teardown_func.__name__,))

@with_setup(setup_func, teardown_func)
def test_case_1():
    print ("%s" % (test_case_1.__name__,))

class test_class_1:

    def setup(self):
        print ("%s called before each test method" % (test_class_1.setup.__name__,))

    def teardown(self):
        print ("%s called after each test method" % (test_class_1.teardown.__name__,))

    @classmethod
    def setup_class(cls):
        print ("%s called before any method in this class is executed" % (test_class_1.setup_class.__name__,))

    @classmethod
    def teardown_class(cls):
        print ("%s called after methods in this class is executed" % (test_class_1.teardown_class.__name__,))

    def test_case_2(self):
        print ("%s" % (test_class_1.test_case_2.__name__,))

Опция -s (или -noCapture) в NoSetests.exe используется так, чтобы любой вывод STDOUT сразу выполняется. Следующая команда используется для запуска выполнения:

nosetests --verbose --nocapture Nose_Fixture_Example.py

Вот выходной скриншот:

Как видно в скриншоте выполнения, метод установки на уровне модуля выполняется в начале выполнения, а метод разрыва уровня модуля выполняется в конце выполнения. Для метода теста Test_Case_2 (который является частью test_class_1), метод setup_class () вызывается до того, как метод испытания срабатывает.

Опубликуйте это, выполняется метод установки на уровне метода (то есть часть test_class_1). Соответствующие методы разрыва вызываются в аналогичном порядке (I.e. Первый метод разрыва уровня метода выполнен, то выполняется метод разрыва уровня класса.

Демонстрация светильников в носу

Для демонстрации использования светильников в этом уроке для носа Python мы используем пример тестирования по перекрестным браузером, который содержит два тестовых случая:

Тестовый случай – 1

  1. Перейдите к URL https://www.google.com.
  2. Поиск «лямбдатест»
  3. Нажмите на результат поиска с заголовком – Lambdatest: самый мощный инструмент тестирования креста в браузере онлайн
  4. Assert, если название вновь открытого окна не совпадает с ожидаемым заголовком

Тестовый случай – 2

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

Выполнение

from nose.tools import with_setup
from selenium import webdriver
import time
from time import sleep
from selenium.webdriver.common.by import By

def setup_func():
    global driver
    print("setup_func: setUp Method called")
    driver = webdriver.Chrome()
    driver.maximize_window()

def teardown_func():
    global driver
    print("teardown_func: Teardown Method called")
    driver.quit()

@with_setup(setup_func, teardown_func)
def test_1():
    global driver
    print("test_1: Initiated")
    driver.get('https://www.google.com')
    title = "Google"
    assert title == driver.title

    search_text = "LambdaTest"
    search_box = driver.find_element(By.XPATH,"//input[@name='q']")
    search_box.send_keys(search_text)

    # Using Sleep is not a good programming practice
    # Only used here for demonstration purpose
    time.sleep(5)
    search_box.submit()

    time.sleep(5)

    # Click on the LambdaTest HomePage Link
    # This test will fail as the titles will not match
    title = "Most Powerful Cross Browser Testing Tool Online | LambdaTest"
    lt_link = driver.find_element(By.XPATH,"//h3[.='LambdaTest: Most Powerful Cross Browser Testing Tool Online']")
    lt_link.click()

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

@with_setup(setup_func, teardown_func)
def test_2():
    global driver
    print("test_2: Initiated")
    driver.get('https://lambdatest.github.io/sample-todo-app/')

    driver.find_element(By.NAME,"li1").click()
    driver.find_element(By.NAME,"li2").click()

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

    sample_text = "Happy Testing at LambdaTest"
    email_text_field =  driver.find_element(By.ID, "sampletodotext")
    email_text_field.send_keys(sample_text)
    time.sleep(5)

    driver.find_element(By.ID, "addbutton").click()
    time.sleep(5)

    assert driver.find_element(By.XPATH, "//span[.='Happy Testing at LambdaTest']").text == sample_text

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

Для начала работы метод SESETUP Imported из модуля NOSE.tools. Методы setup_func () и trackdown_func () используются в качестве функций прибора, которые реализованы на уровне функций.

from nose.tools import with_setup
.................................

def setup_func():
    global driver
    print("setup_func: setUp Method called")
    driver = webdriver.Chrome()
    driver.maximize_window()

def teardown_func():
    global driver
    print("teardown_func: Teardown Method called")
    driver.quit()

Экземпл Chrome Webdriver инициируется в методе setup_func (), и его ресурсы освобождаются в методе teardown_func (). Декоратор @with_setup используется для добавления методов Setup (I.e. Setup_func) и Sharddown (teardown_func) к соответствующим тестовым функциям.

@with_setup(setup_func, teardown_func)
def test_1():
    ..........................
    ..........................
    ..........................

@with_setup(setup_func, teardown_func)
def test_2():
    ..........................
    ..........................
    ..........................

Инструмент проверки в Chrome используется для поиска деталей необходимых веб-элементов.

Селена Webdriver API, таких как Find_Element С send_keys и т. Д. Используются для поиска необходимых веб-элементов и выполняют необходимые действия на этих элементах. В руководстве Python нос, мы не будем глубже в реализации, поскольку это не зависит от тестовой структуры, используемой для тестирования Selenium Python.

Исполнение

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

nosetests --verbose --nocapture 

Ниже показано, что скриншот исполнения:

Перед выполнением тестовых случаев соответствующий метод для настройки (i.e. setup_func) вызывается. Как только выполнение функции тестирования завершено, вызывается соответствующий способ разрыва (I.e. threedown_func).

Параметризованное тестирование с помощью носа

Носовая структура (версия 1.3.7) не имеет прямой поддержки для параметризованного тестирования. Параметризованный (ранее известный как носовой параметризованный) пакет используется для выполнения параметризованного тестирования носом. Помимо носа, пакет также поддерживает все популярные структуры автоматизации тестирования в Python.

Параметризованный пакет устанавливается путем выдачи следующего на терминале:

nosetests --verbose --nocapture 

Последняя версия Параметризованный пакет 0,7,4.

Параметризованное тестирование в носу на локальной селене

Я проверю приложение Todo на лямбдатесте для этого учебника для носа Python, который будет протестирован на трех разных браузерах: Firefox, Microsoft Edge и Chrome. Вот обзор тестового сценария:

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

Выполнение

# test_math.py
from nose.tools import assert_equal
from parameterized import parameterized, parameterized_class
import unittest
from nose.tools import with_setup
from selenium import webdriver
import time
from time import sleep
from selenium.webdriver.common.by import By

def teardown_func():
    global driver
    print("teardown_func: Teardown Method called")
    driver.quit()

@parameterized([
    ("Firefox"),
    ("Chrome"),
    ("MicrosoftEdge"),
])

@with_setup(None, teardown_func)
def test_to_do_app(browserName):
   global driver

   if (browserName == "Chrome"):
        print("Test on Chrome Browser initiated")
        driver = webdriver.Chrome()
   elif (browserName == "MicrosoftEdge"):
        print("Test on Edge Browser initiated")
        # Set the Path accordingly
        driver = webdriver.Edge("C:\\EdgeDriver\\MicrosoftWebDriver.exe")
   elif (browserName == "Firefox"):
        print("Test on Firefox initiated")
        driver = webdriver.Firefox()
   driver.get('https://lambdatest.github.io/sample-todo-app/')
   driver.maximize_window()

   driver.find_element(By.NAME, "li1").click()
   driver.find_element(By.NAME, "li2").click()

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

   sample_text = "Happy Testing at LambdaTest"
   email_text_field =  driver.find_element(By.ID, "sampletodotext")
   email_text_field.send_keys(sample_text)
   time.sleep(5)

   driver.find_element(By.ID, "addbutton").click()
   time.sleep(5)

   assert driver.find_element(By.XPATH, "//span[.='Happy Testing at LambdaTest']").text == sample_text

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

Параметризованные и параметризованные модули_Class импортируются из параметризованного пакета.

from parameterized import parameterized, parameterized_class

Используется приспособление на уровне функции, основное отличие состоит в том, что декоратор @With_Setup будет иметь только метод Shadowndown, так как в функцию тестирования передаются различные тестовые браузеры, используя функцию тестирования, используя @parameteried Decorator.

def teardown_func():
    global driver
    print("teardown_func: Teardown Method called")
    driver.quit()

@parameterized([
    ("Firefox"),
    ("Chrome"),
    ("MicrosoftEdge"),
])

Название тестового браузера передается аргументом к функции тестирования (I.E. test_to_do_app). Функция тестирования выполняется один раз в отношении каждой комбинации браузера, и ресурсы, используемые во время настройки, освобождены в методе Shopdown (I.e. TuneDown_Func).

В зависимости от браузера, на котором начинается автоматизация тестирования Selenium, инициируется соответствующая экземпляр Webdriver.

@with_setup(None, teardown_func)
def test_to_do_app(browserName):
   global driver

   if (browserName == "Chrome"):
        print("Test on Chrome Browser initiated")
        driver = webdriver.Chrome()
   elif (browserName == "MicrosoftEdge"):
        print("Test on Edge Browser initiated")
        # Set the Path accordingly
        driver = webdriver.Edge("C:\\EdgeDriver\\MicrosoftWebDriver.exe")
   elif (browserName == "Firefox"):
        print("Test on Firefox initiated")
        driver = webdriver.Firefox()

Оставшаяся реализация такая же, как оно связано только с тестированием автоматизации селена. Вот выходной снимок:

Параметризованное тестирование в носу на облачную селену селена

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

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

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

В этом учебное пособие в носу Python я продемонстрирую параметризованные тестирование на лямбдатест. Чтобы начать, мы выполняем тестовые случаи, используемые в более раннем разделе на этих комбинациях браузера + ОС:

@parameterized([
    ("Chrome", "83.0", "Windows 10"),
    ("MicrosoftEdge", "81.0", "macOS High Sierra"),
    ("Safari", "12.0", "macOS Mojave"),
    ("Firefox", "76.0", "Windows 10"),
])

Выполнение

# test_math.py
from nose.tools import assert_equal
from parameterized import parameterized, parameterized_class
from nose.tools import with_setup
from selenium import webdriver
import time
from time import sleep
import urllib3
import warnings
from selenium.webdriver.common.by import By

def setup_func():
    global driver
    global remote_url
    print("setup_func: SetUp Method called")
    # Details can be sourced from https://automation.lambdatest.com/
    user_name = "user-name"
    app_key = "pass-key"
    remote_url = "https://" + user_name + ":" + app_key + "@hub.lambdatest.com/wd/hub"
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def teardown_func():
    global driver
    print("teardown_func: Teardown Method called")
    driver.quit()

@parameterized([
    ("Firefox", "76.0", "Windows 10"),
    ("Chrome", "83.0", "Windows 10"),
    ("MicrosoftEdge", "81.0", "macOS High Sierra"),
    ("Safari", "12.0", "macOS Mojave"),
])

@with_setup(setup_func, teardown_func)
def test_to_do_app(browserName, version, platform):
   global driver
   global remote_url

   capabilities = {}
   # Set the desired capabilities from the supplied parameters
   capabilities["browserName"] = browserName
   capabilities["version"] = version
   capabilities["platform"] = platform

   driver = webdriver.Remote(command_executor = remote_url, desired_capabilities = capabilities)
   driver.get('https://lambdatest.github.io/sample-todo-app/')
   driver.maximize_window()

   driver.find_element(By.NAME, "li1").click()
   driver.find_element(By.NAME, "li2").click()

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

   sample_text = "Happy Testing at LambdaTest"
   email_text_field =  driver.find_element(By.ID, "sampletodotext")
   email_text_field.send_keys(sample_text)
   time.sleep(5)

   driver.find_element(By.ID, "addbutton").click()
   time.sleep(5)

   assert driver.find_element(By.XPATH, "//span[.='Happy Testing at LambdaTest']").text == sample_text

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

Поскольку тесты выполняются на облачную селену селена, учетные данные, состоящие из комбинации имени пользователя и проходного ключа, используются для доступа к AbsdateSt Grid URL – @ hub.lambdatest.com/wd/hub

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

Удаленный Webdriver Ausesk из удаленного URL и возможностей браузера, создаваемых с использованием генератора возможностей.

driver = webdriver.Remote(command_executor = remote_url, desired_capabilities = capabilities)

Тестовый корпус принимает три входных аргумента – имя браузера, версия браузера и название платформы. Эти записи составляют желаемые возможности, которые передаются как аргументы в API WebDriver.

@with_setup(setup_func, teardown_func)
def test_to_do_app(browserName, version, platform):
   .........................
   .........................
   capabilities = {}
   # Set the desired capabilities from the supplied parameters
   capabilities["browserName"] = browserName
   capabilities["version"] = version
   capabilities["platform"] = platform

   driver = webdriver.Remote(command_executor = remote_url, desired_capabilities = capabilities)
   driver.get('https://lambdatest.github.io/sample-todo-app/')
   .........................
   .........................

Остальная часть реализации является самоуверенностью, поскольку она использует соответствующие API в сети Selenium, чтобы найти необходимые веб-элементы и выполнять соответствующие действия на одном.

Скриншот исполнения ниже:

Параллельное тестирование на облачной селеневой сети

Как и другие популярные тестовые рамки, такие как Python, нос также поддерживает параллельное тестирование. NOCE.PLUGINS.MultiProcess плагин может быть использован для параллелизма теста, проводимого через настраиваемое количество рабочих процессов.

Хотя параллелизация в исполнении Expedites Expedites, связанным с ЦП-тестовыми прогонами, он значительно приносит преимущества, связанные с IO-тестами, где большую часть времени тратится на ожидание прибытия данных. Официальная документация на носу имеет Небольшая информация, связанная с параллельным тестированием Отказ

В этом конкретном учебном пособии для носа Python мы бы сосредоточились на параллельном тестировании на облачной селеневой сетке. Для использования случаи, связанные с Селенская сетка для тестирования кросс-браузера , опция командной строки (-Processes) в NoSetests может использоваться для распространения тестового выполнения по нескольким ядрам.

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

nosetests --process-timeout= --processes= file-name.py

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

Хотя параллельное тестирование может пожинать значительные преимущества при использовании на локальной сетке селена, он будет умножен при использовании на A Облачная селена селена Отказ Следовательно, мы решили продемонстрировать параллельное тестирование в носу на облачной селеневой сетке для этого учебного пособия по носу Python, поскольку изменения кода являются самоуверенностью.

Пользователи на популярном веб-сайте Stackoverflow стремились использовать параллельные тестирования в носу ( здесь и здесь И этот раздел учебника по носу Python поможет вам начать с параллельного тестирования в носу.

Вот три тесты, которые должны быть выполнены параллельно на селениуме лямбдатестра.

Тестовый случай – 1 (браузер – Chrome, версия – 71.0, платформа – Windows 10)

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

Тестовый случай – 2 (браузер – Firefox, версия – 64.0, платформа – Windows 10)

  1. Перейдите к URL https://www.lambdatest.com/blog/
  2. Ожидаемый титул – лямбдатест | Блог для тестирования кросс-браузера
  3. Assert, если название открытого окна не совпадает с ожидаемым заголовком

Тестовый случай – 3 (браузер – Safari, версия – 12.0, платформа – Macos Mojave)

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

Для начала начать, желаемые возможности браузера и платформы генерируются с использованием генератора возможностей LambdaTest. Например, показано ниже, являются желаемыми возможностями для тестового случая 1

ch_caps = {
    "build" : "Nose Testing using Chrome on Windows Environment",
    "name" : "Nose Testing on Chrome using Selenium Grid Environment",
    "platform" : "Windows 10",
    "browserName" : "Chrome",
    "version" : "71.0",
    "selenium_version" : "3.13.0",
    "chrome.driver" : 2.42
}

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

Выполнение

# test_math.py
import nose
from nose.tools import 

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

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

# _multiprocess_can_split_ = True
def teardown_func():
    global driver
    print("Inside TearDown")
    driver.quit()

Декоратор @with_setup используется для добавления метода разрыва (TuneDown_func) в соответствующие тестовые функции.

@with_setup(None, teardown_func)
def test_verify_todo_app():
    ............
    ............
    ............
@with_setup(None, teardown_func)
def test_lt_blog():
    ............
    ............
    ............
@with_setup(None, teardown_func)
def test_verify_google():
    ............
    ............
    ............

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

Исполнение

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

nosetests --process-timeout=60 --processes=3 Nose_Parallel_Test.py

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

Вот скриншот выполнения, который указывает на то, что три теста работают параллельно на облачной селеневой решетке:

Испытания были успешно выполнены на селениуме:

Упаковывать его вверх

В этом учебном пособии по носу Python я дал вам краткий взгляд на нос (версию 1.3.7), тестовую структуру для тестирования Selenium Python. Рамки – это расширение, чтобы быть проще, что облегчает тестирование. Основным преимуществом выбора носа на UNTITEST является то, что он устраняет требование кода котельной.

Он также имеет обширный набор плагинов, которые добавляют поддержку для декораторов, приспособлений, параметризованных тестирование и многое другое. Эти особенности повышают удобство использования структуры. Последняя версия носа – это нос2, и у нас был бы глубокий взгляд в нашем следующем блоге на уроке «Питона».

Я надеюсь, что этот учебник помог вам понять и выполнить Тестирование Selenium Python с носом. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь добраться до нас и хотелось бы иметь ваши отзывы.

Оригинал: “https://dev.to/himanshusheth004/getting-started-with-nose-in-python-tutorial-2en2”