• Python Testing с pytest. Начало работы с pytest, Глава 1

    • Translation
    • Tutorial

    Вернуться Дальше


    Я обнаружил, что Python Testing с pytest является чрезвычайно полезным вводным руководством к среде тестирования pytest. Это уже приносит мне дивиденды в моей компании.

    Chris Shaver
    VP of Product, Uprising Technology


    Читать дальше →
  • Selenium для Python. Глава 5. Ожидания

    Продолжение перевода неофициальной документации Selenium для Python.
    Оригинал можно найти здесь.

    Содержание:


    1. Установка
    2. Первые шаги
    3. Навигация
    4. Поиск элементов
    5. Ожидания
    6. Объекты Страницы
    7. WebDriver API
    8. Приложение: Часто Задаваемые Вопросы

    5. Ожидания


    В наши дни большинство веб-приложений используют AJAX технологии. Когда страница загружена в браузере, элементы на этой странице могут подгружаться с различными временными интервалами. Это затрудняет поиск элементов, если элемент не присутствует в DOM, возникает исключение ElementNotVisibleException. Используя ожидания, мы можем решить эту проблему. Ожидание дает некий временной интервал между произведенными действиями — поиске элемента или любой другой операции с элементом.
    Читать дальше →
    • +13
    • 84.9k
    • 8
  • Тестирование. Начало


      Привет. В этой серии постов я попробую рассказать про тестирование кода на питоне, в частности проектов django. Мы рассмотрим модульное тестирование (юнит-тесты), статический анализ кода и некоторые подводные камни тестирования веб-сайтов.

      Вводную часть о пользе тестирования опустим — код, покрытый тестами, становится мягким и шелковистым, про это только ленивый еще не читал / писал.
      Читать дальше →
    • PyTest

      Предисловие


      По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: как это используют в Yandex да и все по-хорошему. При этом описанное в этой статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.

      Юнит-тестирование Python


      Что это и для чего рассказывать смысла не вижу — Википедия все равно знает больше. По поводу существующих модулей для Python хорошо описано на Хабре.

      Вводная по необходимым знаниям


      На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами тут и тут и конструкцией yield.

      Преимущества и недостатки PyTest


      1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:

      Код
      import unittest
      
      class TestUtilDate(unittest.TestCase):
          def setUp(self):
              #init_something()
              pass
              
          def tearDown(self):
              #teardown_something()
              pass
              
          def test_upper(self):
              self.assertEqual('foo'.upper(), 'FOO')
              
          def test_isupper(self):
              self.assertTrue('FOO'.isupper())
              
          def test_failed_upper(self):
              self.assertEqual('foo'.upper(), 'FOo')
              
      if __name__ == '__main__':
          suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
          unittest.TextTestRunner(verbosity=2).run(suite)
      


      То же самое в PyTest:

      Код
      import pytest
      
      def setup_module(module):
          #init_something()
          pass
      
      def teardown_module(module):
          #teardown_something()
          pass
      
      def test_upper():
          assert 'foo'.upper() == 'FOO'
          
      def test_isupper():
          assert 'FOO'.isupper()
          
      def test_failed_upper():
          assert 'foo'.upper() == 'FOo'
      


      2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу.

      image

      3) Удобный assert (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов.

      4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов.

      5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры)

      6) Параметризация тестов, то есть запуск одного и того же теста с разными наборами параметров. Вообще это относится к пункту 5 «Дополнительные возможности фикстур», но возможность настолько хороша, что достойна отдельного пункта.

      7) Метки (marks), позволяющие пропустить любой тест, пометить тест, как падающий (и это его ожидаемое поведение, что полезно при разработке) или просто именовать набор тестов, чтобы можно было запускать только его по имени.

      8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно.

      9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними.

      Про недостатки, пусть их и не много, могу сказать следующее:

      1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства».

      2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений.

      3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»).

      Подробное описание модуля и его возможностей под катом.
      Читать дальше →
    • Selenium для Python. Глава 3. Навигация

      • Tutorial
      Продолжение перевода неофициальной документации Selenium для Python.
      Перевод сделан с разрешения автора Baiju Muthukadan.
      Оригинал можно найти здесь.

      Содержание:


      1. Установка
      2. Первые Шаги
      3. Навигация
      4. Поиск Элементов
      5. Ожидания
      6. Объекты Страницы
      7. WebDriver API
      8. Приложение: Часто Задаваемые Вопросы
      Читать дальше →
      • +11
      • 103k
      • 4
    • Селекторы CSS и их применение в автоматизации тестирования Программного Обеспечения

        Всем добра!

        Данную тему мы уже раскрывали на вебинаре, который проводил наш преподаватель, но решили дополнить чуть текстом (да и многим, как оказалось, так удобнее). В общем представляем статью на тему «Селекторы CSS», которую Павел Попов прорабатывал в рамках нашего курса «Автоматизация в тестировании».

        Поехали.

        Каждый курс или статья для начинающих автоматизаторов рассказывает об удобном и универсальном средстве поиска элементов Web-страницы, как XPath. Данный вид локаторов на элемент был создан в 1999 году для указания на элементы в XML файлах. С помощью встроенных функций XPath стал очень популярным инструментом поиска элементов на Web-странице. Если HTML код вашего приложения выглядит как-то так:

        …
        <form class=“form_upload>
            <div>
                <div class=“row_element_3 row tile_fixed”>
                    <div class=“button_cell wrapper_tile”>
                        <button type=“submit” class=“button_submit wrapper_button”>Нажми меня</button>
                    </div>
                </div>
            </div>
        </form>
        …

        и вы не можете найти достойный XPath для кнопки “Нажми меня”, не стоит сразу бежать в сторону разработчика с просьбой о помощи. Есть отличная возможность воспользоваться CSS селектором, он будет выглядеть так:

        .button_submit

        Добро пожаловать в мир CSS.

        Читать дальше →
      • Selenium для Python. Глава 4. Поиск элементов

        • Tutorial
        Продолжение перевода неофициальной документации Selenium для Python.
        Перевод сделан с разрешения автора Baiju Muthukadan.
        Оригинал можно найти здесь.

        Содержание:


        1. Установка
        2. Первые Шаги
        3. Навигация
        4. Поиск Элементов
        5. Ожидания
        6. Объекты Страницы
        7. WebDriver API
        8. Приложение: Часто Задаваемые Вопросы
        Читать дальше →
        • +12
        • 159k
        • 6
      • Введение в Postman

        • Tutorial

        image


        “Разработка API сложна, Postman делает её лёгкой” © Postdot Technologies, Inc

        Когда видишь описание инструментов Postman — захватывает дух, просыпается чувство всевластия над своим будущим детищем. Кажется, что и взрощенные в прошлом "монстры" наконец-то падут перед тобой!


        В этой статье мы расскажем о Postman и попробуем написать свой первый скрипт.

        Читать дальше →
      • Рекомендации по REST API — примеры проектирования веб-сервисов на Java и Spring

        • Translation
        • Tutorial
        Это последняя статья из серии статей про REST API:


        В этой статье вы познакомитесь с рекомендациями по REST API и с примерами разработки из Java и Spring Web Services.

        При разработке хорошего REST API важно иметь хорошие микросервисы.
        Как вы разрабатываете свой REST API? Каковы лучшие практики?


        Читать дальше →
        • +10
        • 31.8k
        • 1
      • Вебинар: Основы использования паттерна Page Object вместе с Selenium WebDriver

          Это пятый вебинар из цикла бесплатных вебинаров по автоматизации тестирования.
          Видеозапись (продолжительность 1 час 5 мин.):

          Темы и детали видеозаписи под катом
          Читать дальше →
          • +12
          • 12.2k
          • 2
        • Реализация паттерна Page Object на Python + pytest

          • Tutorial

          Когда я начинал изучать автоматизацию тестирования, не мог понять — “что такое Page Object и как его реализовать на Python + pytest?”. Штудируя интернет, нашел реализацию на других языках и фреймворках: обучающие статьи, которые были непонятны для меня. Поэтому решил написать этот разбор. Идея — показать реализацию на Python + pytest и объяснить ее доступным языком.


          Что такое Page Object


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


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

          Читать дальше →
        • 10 шагов к YAML-дзену

            Мы все любим Ansible, но Ansible – это YAML. Для конфигурационных файлов существует масса форматов: списки значений, пары «параметр-значение», INI-файлы, YAML, JSON, XML и множество других. Однако по нескольким причинам из всех них YAML часто считается особенно трудным. В частности, несмотря на его освежающий минимализм и впечатляющие возможности для работы с иерархическими значениями, синтаксис YAML может раздражать своим Python-образными подходом к отступам.



            Если вас бесит YAML, вы можете – и должны! – предпринять 10 следующих шагов, чтобы снизить свое раздражение до приемлемого уровня и полюбить YAML. Как и положено настоящему списку, наша десятка советов будет нумероваться с нуля, медитацию и духовные практики добавляем по желанию ;-)
            Читать дальше: 10 шагов к YAML-дзену
          • Численные методы решения систем нелинейных уравнений

              Введение


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

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

              Для численного решения применяются итерационные методы последовательных приближений (простой итерации) и метод Ньютона в различных модификациях. Итерационные процессы естественным образом обобщаются на случай системы нелинейных уравнений вида:

              (1)

              Обозначим через вектор неизвестных и определим вектор-функцию Тогда система (1) записывается в виде уравнения:

              (2)

              Теперь вернёмся к всеми любимому Python и отметим его первенство среди языков программирования, которые хотят изучать [1].



              Этот факт является дополнительным стимулом рассмотрения числительных методов именно на Python. Однако, среди любителей Python бытует мнение, что специальные библиотечные функции, такие как scipy.optimize.root, spsolve_trianular, newton_krylov, являются самым лучшим выбором для решения задач численными методами.

              С этим трудно не согласится хотя бы потому, что в том числе и разнообразие модулей подняло Python на вершину популярности. Однако, существуют случаи, когда даже при поверхностном рассмотрении использование прямых известных методов без применения специальных функций библиотеки SciPy тоже дают неплохие результаты. Иными словами, новое- это хорошо забытое старое.
              Читать дальше →
            • Bash-скрипты: начало

              • Translation
              Bash-скрипты: начало
              Bash-скрипты, часть 2: циклы
              Bash-скрипты, часть 3: параметры и ключи командной строки
              Bash-скрипты, часть 4: ввод и вывод
              Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
              Bash-скрипты, часть 6: функции и разработка библиотек
              Bash-скрипты, часть 7: sed и обработка текстов
              Bash-скрипты, часть 8: язык обработки данных awk
              Bash-скрипты, часть 9: регулярные выражения
              Bash-скрипты, часть 10: практические примеры
              Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит

              Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.


              Читать дальше →
            • Образ современного тестировщика. Что нужно знать и уметь



                Бытует мнение, что простейший путь к IT лежит через тестирование. Мол, знать ничего не нужно, уметь и подавно, достаточно желания и готовности не сильно щуриться от боли и слёз, когда тебе прилетает очередной набор тест-кейсов для регрессионного тестирования.

                Отчасти это даже правда, но, скорее, для ситуации, которая была на рынке лет 10 назад. Сейчас же всё обстоит несколько иначе. Причин для этого масса, и они самые разные. Если отметить ключевые, то, пожалуй, это:

                Возросшие требования к тестировщикам, их знаниям и квалификации, так как всё чаще решаются задачи чуть сложнее, чем «клик-клик — и в продакшен». Работа тестировщиков становится всё более «инженерной», требует технической подкованности, специфических знаний, навыков и компетенций. Тестировщики всё чаще становится QA-инженерами (кто в теме, тот понимает разницу).

                Возросшее предложение на рынке, когда толпы вчерашних «гражданских» ринулись в пучину IT, подогреваемые обилием информации: от конференций и книг до статей и курсов по тестированию ПО. Ваш покорный слуга в своё время также приложил руку к созданию пары общедоступных курсов по причине желания тиражировать базовые вещи из своей профессиональной области (посмотреть можно здесь и здесь).

                Поэтому сегодня всё реже можно полагаться исключительно на морально-волевые качества для входа в IT в свете возросших аппетитов рынка и обилия конференций, курсов, тренингов, литературы, статей и прочих информационных источников, которые находятся на расстоянии вытянутой руки начинающих специалистов.
                Читать дальше →
              • Автоматизация тестирования веб-приложения с использованием Selenium WebDriver, Python, и Behave

                • Tutorial
                Всем привет!
                Сегодня я хочу поделится нашим опытом автоматизации тестирования веб-приложения с использованием Selenium WebDriver и фреймворка Behave.
                Если интересно добро пожаловать под кат.
                Читать дальше →
              • Что такое Selenium WebDriver?

                  Эта статья является продолжением более общей статьи «Что такое Selenium?», в которой объясняется, какое положение занимает Selenium WebDriver среди других инструментов автоматизации веб-приложений.

                  Здесь я постараюсь рассказать более подробно о том, что такое Selenium WebDriver, и почему его бессмысленно сравнивать с TestComplete, QuickTest Pro и другими инструментами автоматизации тестирования. И дело не только в том, что Selenium WebDriver бесплатный и открытый – его столь же бессмысленно сравнивать с другими бесплатными инструментами, такими как Sahi или Robot Framework.

                  Почему?

                  Потому что Selenium WebDriver – это не инструмент для автоматизации тестирования.

                  А что же это такое?

                  На этот вопрос можно дать несколько разных ответов, сначала я дам короткие ответы, а потом – более подробные.

                  Кроме того, я объясню, почему Selenium WebDriver имеет такой убогий и неудобный в использовании интерфейс (набор команд), почему он не генерирует красивые отчёты и почему несмотря на всё это он настолько популярен :)

                  На всякий случай оговорюсь, что хотя в этой статье речь идёт про WebDriver, многие аргументы справедливы и в отношении Selenium RC, но я не буду ничего говорить специально про эту устаревшую версию, потому что её место – на свалке истории.
                  Читать дальше →
                  • +19
                  • 264k
                  • 9
                • Что почитать по веб-разработке

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

                    Поэтому предлагаю здесь собрать и структурировать такие книги с небольшим описанием, вашим рейтингом и просто пообсуждать их.

                    update: Теперь есть электронные версии книг!

                    Начнём…
                    Читать дальше →
                  • Многомировая интерпретация квантовой механики

                      Наверняка большинство из вас нет-нет да и встречало в научно-популярной литературе упоминания о «многомировой интерпретации» квантовой механики (ММИ). Ее любят помянуть и в комментариях на Хабре, однако зачастую в неверном ключе или с серьезными неточностями.

                      image

                      Попробуем разобраться, что же к чему в ММИ.
                      Читать дальше →