Category: Тестирование

22
Июл
2021

Написание теста на nigthwatch api

Тест должен вытаскивать из кода страницы теги iframe.object и embed и проверять вложены ли они в див с определённым классом. Код приложил, в ходе теста он не может даже вытащить тег со страницы, кто может подсказать где моя ошибка? В тести…

20
Июл
2021

Flutter Global Summit’21

Спикеры из крупных мировых компаний поговорят о применении Flutter и Dart в разработке приложений, сайтов и игр. Рассмотрят кейсы, проведут панельные дискуссии, воркшопы и Q&A-сессии.
— Читать дальше «Flutter Global Summit’21»

19
Июл
2021

Какую Ci систему выбрать, чтобы развернуть автотесты на предприятии? [закрыт]

Основная цель задачи такова. Есть автотесты на моём рабочем пк есть написанные автотесты.
Необходима какая-то система или среда, помещённая на сервер в которой эти тесты смогут запускать другие тестировщики. Соответственно необходим послед…

05
Июл
2021

Вебинар «Selenium Tools на Python»

Расскажут про ограничения Selenium для тестирования веб-интерфейсов, на практике рассмотрят функционал Selenium Tools на Python и его использование.
— Читать дальше «Вебинар «Selenium Tools на Python»»

23
Июн
2021

Митап «Дальнейшее развитие рынка Web UI-автоматизации»

Инженеры и менторы Solvery расскажут о перспективах Java, JavaScript и Python, проведут анализ рынка вакансий и поделятся гайдами и лайфхаками.
— Читать дальше «Митап «Дальнейшее развитие рынка Web UI-автоматизации»»

17
Июн
2021

Project Hiring Week

EPAM набирает команду разработчиков, инженеров, тестировщиков и аналитиков для работы в проектах Выделенного Центра Разработки. Оффер через 48 часов и welcome-бонус в размере одного оклада.
— Читать дальше «Project Hiring Week»

15
Июн
2021

Курс «Python и инструменты машинного обучения»

Обучение работе с аналитическими инструментами в Python от Московского физико-технического института. 2 месяца практических онлайн-вебинаров и сертификат о повышении квалификации в финале.
— Читать дальше «Курс «Python и инструменты машинного обучения»…

15
Июн
2021

🐍 Python для автоматизации тестирования: создаем несложный REST-тест за 4 шага

Python для инженера по Quality Assurance – универсальный «швейцарский нож», которым легко воспользоваться. Рассказываем, как создать автотест за 4 простых шага.

Python в тестирование, сферы его применения
Автоматизированное тестирование давно стало обязательным в сфере IT. Предъявляемые к инструментам инженера по Quality Assurance (QA) требования все выше, а выбор средств все больше: сейчас для улучшения качества продукта можно использовать даже машинное обучение. Python можно назвать швейцарским ножом в сфере тестирования. Нужно написать UI-тесты? Используйте Python. Требуется сгенерировать большое количество данных? Снова Python. Хотите создать бота для тестирования WoT? Тоже Python. Удобнее всего писать на Python тесты REST API.

План REST-теста

Чтобы написать хороший REST-тест нужно сделать следующее:

  • сгенерировать данные;
  • положить их в базу данных;
  • отправить REST-запросы;
  • сверить результаты с ожидаемыми;
  • сгенерировать отчет по результатам.
Для каждого действия есть идеально подходящая библиотека Python.

1. Создание тестовых данных

Можно сгенерить рандомные данные или взять их из файла csv. Например, для создания нового пользователя нужно заполнить поле ФИО, дату рождения или возраст, почту и пароль (почта будет служить логином):

        import random
import string
import datetime
# генерация случайного числа
age1 = random.randrange(15))
# генерация числа случайного в промежутке от 1 до 100 с шагом 3
age2 = random.randrange(0, 101, 3))
# генерация числа с плавающей точкой в промежутке от 5.2 до 7.9
print(random.uniform(5.2, 7.9))
# генерация строки из 10 случайных символов
letters = string.ascii_letters
password = ''.join(random.choice(letters) for i in range(10))
# выбор случайного значения из list
name = random.choice(['Oliver', 'William', 'James'])
mail = name+'@'+random.choice(['mail.ru', 'gmail.com', 'ya.ru'])
# генерация случайной даты между двумя датами
start_date = datetime.date(1920, 1, 1)
end_date = datetime.date(2011, 2, 1)
time_between_dates = end_date - start_date
days_between_dates = time_between_dates.days
random_number_of_days = random.randrange(days_between_dates)
birthday = start_date + datetime.timedelta(days=random_number_of_days)
    

Те же самые данные можно получить из заранее подготовленного файла в формате csv:

        import csv
with open('user.csv') as csv_file:
   csv_reader = csv.reader(csv_file, delimiter=',')
   for row in csv_reader:
        age = row['age']
        # и так далее...
        name = row['name’]
    

2. Добавление тестовых данных в базу

Информацию можно добавить в базу данных, что будет быстрее использования REST-запросов: Python умеет работать как реляционными, так и нереляционными СУБД. Рассмотрим отрывок кода, в котором происходит подключение к БД и добавление нового пользователя. В примере используется PostgreSQL, потому что это один из наиболее распространенных вариантов.

        import psycopg2
import logging

# аргументы для подключения к БД
DB_ARGS = "dbname=test user=postgres password=test host=localhost port=5432"

# функция подключение к БД
def conDB(): 
    try: 
        conn = psycopg2.connect(DB_ARGS) 
    except: 
        logging.error("Unable to connect to the database.") 
        return None 
    cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 
    return cur

# функция добавления пользователя
def insertUser(cur, name, age, mail, password):
    cur.execute("INSERT INTO person(name, age, mail, password) VALUES(%s, %s, %s, %s)", (name, age, mail, password))
    

*Примечание: код будет работать, если локально поднята БД test, и в ней есть таблица user с колонками name, age, mail, pass.

Более подробная информация доступна на сайте.

3. Первые REST-запросы

Библиотек для работы с с REST-запросами существует великое множество. Мне больше всего нравятся aiohttp и requests. Для написания тестов удобнее requests. С помощью POST-запроса создадим нового пользователя и после этого GET-запросом проверим, что он действительно был добавлен.

        import requests
    
# тело запроса для создания нового пользователя
user = {"name": "Fred”, "age": 25,"mail":"[email protected]", "password": "134513"}
r = requests.post("http://localhost/users/", data=user)
# напечатать код запроса
print(r.status_code)
# GET запрос на получение пользователя по id
url = "http://localhost/users/” + str(r.json()['id'])
r = requests.get("http://localhost/users/”, data=user)
print(r.text)
    

*Примечание: код будет работать, если локально поднят сервис, принимающий запросы POST и GET на создание пользователя и получение информации о нем.

4. Использование библиотеки PyTest

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

PyTest – это удобный инструмент, который автоматически находит написанные тесты, запускает тесты и пишет отчеты с результатом. Библиотека активно развивается и поддерживается. Как использовать все ее функции можно почитать в книге “Python Testing with pytest” Брайана Оккена.

Разделим предыдущий код на 2 полноценных теста: создание пользователя и получение информации о нем по id.

        import pytest
import requests
import json

# тест на создание пользователя и проверку успешного создания 
def test create_user():
    user = {"name": "Fred”, "age": 25, "mail":"[email protected]", "password": "134513"}
    url = "http://localhost/users/”
    r = requests.post(url, data=user)
    try:
        r.raise_for_status()
    except requests.exceptions.HTTPError as e:
        print('ERROR: %s' % e)
    assert r.text == "Ok"

# тест на получение пользователя по id
def test_get_user_by_id():
    example_user = json.dumps({"name": "Ron”, "age": 39, "mail": "[email protected]", "password": "123"})
    url = "http://localhost/users/1”
    r = requests.get(url)
    try:
        r.raise_for_status()
    except requests.exceptions.HTTPError as e:
        print('ERROR: %s' % e)
    user = json.loads(r.data)
    assert example_user == user
    

*Примечание: код будет работать, если локально поднят сервис, принимающий запросы POST и GET на создание пользователя и получение информации о нем.

В втором тесте на получение пользователя был использован стандартный модуль json. Он значительно упрощает работу с JSON-объектами, позволяя не задумываться над сериализацией и десериализацией, обращением по ключу и поиске значения. Подробнее почитать об этом можно, например, здесь.

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

Плюсы Python
Тесты готовы. Отчеты получены. На каждое действия для Python есть удобная в использовании и легкая в освоении библиотека. На этом плюсы популярного языка программирования не заканчиваются. Python быстро развивается, постоянно появляются новые библиотеки для инженеров по QA, комьюнити растет, и всегда найдутся люди, готовые ответить вам на вопрос и помочь решить проблему. Также Python отличается одним из самых низких порогов вхождения, поэтому вам будет удобно начинать путь от ручного тестирования к автоматизации и покрытию продукта REST-тестами.

Минусы Python в автотестах
Конечно у любого инструмента есть и минусы. При разрастание проекта количество тестов обычно увеличивается в геометрической прогрессии. Тестирование будет идти слишком долго, что начнет замедлять процесс работы всей команды. Python – не самый быстрый язык. В какой-то момент придется запускать тесты параллельно, что достаточно сложно. Работать с многопоточностью в Python сложно, но когда такая проблема возникает перед тестировщиком, он уже имеет достаточно навыков и опыта для ее решения.

Выводы

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

***

Если вы только задумались о карьере в Quality Assurance или ручные тесты вам уже не в диковинку, стоит обратить внимание на курс автоматизации тестирования на Python от образовательной онлайн-платформы GeekBrains. Практикующие специалисты помогут вам освоить основы профессии и техники тест-дизайна, а также научат писать автотесты на Python. Успешно завершившие курс студенты получат диплом о профессиональной переподготовке и добавят в портфолио 4 проекта, а площадка поможет им с трудоустройством.

10
Июн
2021

Конференция SECON 2021

В программе конференции доклады от экспертов, общение с коллегами, новые знакомства, выставка и развлечения в атмосфере летнего фестиваля.
— Читать дальше «Конференция SECON 2021»

09
Июн
2021

Курс для начинающих разработчиков «JavaScript»

188 практических онлайн-уроков по программированию на JavaScript с нуля до уровня Junior под руководством преподавателя — опытного веб-разработчика.
— Читать дальше «Курс для начинающих разработчиков «JavaScript»»

09
Июн
2021

Хакатон INNOHACK 2.0

Команды из разработчиков, аналитиков, тестировщиков, DevOps-инженеров и UI/UX-дизайнеров должны решить одну из 5 бизнес-задач. Призовой фонд — 1,2 млн рублей. Заявки принимаются до 15 июня.
— Читать дальше «Хакатон INNOHACK 2.0»

07
Июн
2021

👨‍🔧️ Где изучать тестирование в 2021 году: 17 ресурсов для начинающих инженеров по QA

Предлагаем вниманию читателей актуальный обзор комьюнити и курсов по тестированию ПО. Рассказываем, где и чему стоит учиться новичку в Quality Assurance, а также как получить поддержку профессионалов и ответы на вопросы.

04
Июн
2021

Курс «Python-разработчик»

За 12 месяцев научат писать программы, разрабатывать веб-приложения и подготовят к трудоустройству на позицию Python-разработчик.
— Читать дальше «Курс «Python-разработчик»»

31
Май
2021

Курс «Backend-разработка на Node.js»

За 4 месяца станете fullstack-разработчиком, будете создавать бэкенд веб-приложений на Node.js и расширите возможности ваших проектов на JavaScript с помощью языка TypeScript.
— Читать дальше «Курс «Backend-разработка на Node.js»»

28
Май
2021

При Юнит Тестах есть ошибка Call to a member function getDb() on null

Сразу скажу, ошибка я знаю о чём, но проблема глубже, т.к. она проявляется исключительно на Юнит Тестировании.
Если делать перебор данных из модели в методе тестирования, то всё работает.
Рабочий вариант:
<?php

namespace tests\unit\ser…

28
Май
2021

Demo Day курса «Java QA Engineer. Basic»

На Demo Day представят программу базового онлайн-курса «QA Java Engineer Basic» и расскажут, какие задачи у начинающего автотестировщика, какие навыки и инструменты нужны на старте.
— Читать дальше «Demo Day курса «Java QA Engineer. Basic»»

07
Май
2021

При тестировании метода с @RequestParam MultipartFile проходит 400 код ошибки, вместо 200

Тестирую метод, который имеет один из параметров @RequestParam MultipartFile. В тесте все загрузил, файл превратил в массив байтов, и вроде бы все должно успешно проходить, но вместо 200 кода ошибки мне выдает 400, то есть BadRequest.
Отла…

06
Май
2021

Конференция Highload++ 2021

Большая конференция для разработчиков высоконагруженных систем. Доклады, митапы, нетворкинг, уникальный опыт и ноу-хау от экспертов, задающих тренды.
— Читать дальше «Конференция Highload++ 2021»

10
Апр
2021

Почему dataProvider в TestNG возвращает двумерный массив?

Почему методы, помеченные аннотацией @DataProvider в TestNG возвращает двумерный массив Object[][]? Что там находится помимо значения параметра тестируемого метода?
В частности, почему в примере нужно передавать значение параметра в отдель…

25
Мар
2021

Конференция JPoint 2021

Международная конференция для Java-разработчиков. Более 1000 участников, хардкорные доклады от Java Champions со всего мира, воркшопы, виртуальная площадка, активности и дискуссии.
— Читать дальше «Конференция JPoint 2021»

18
Мар
2021

Конференция EPAM Insider Казань

Эксперты EPAM познакомят IT-специалистов Казани с компанией, планами развития и карьерными возможностями.
— Читать дальше «Конференция EPAM Insider Казань»

16
Мар
2021

👨‍🔧️ «Диплом ради диплома или галочки никому не нужен»

Считается, будто профессию тестировщика освоить относительно несложно. На самом деле стать высококлассным инженером по Quality Assurance нелегко: Любовь Попова рассказала нашему корреспонденту, почему из программирования она решила уйти в Q…

10
Мар
2021

Факультет игровой аналитики

Научитесь создавать игры, используя знания маркетинга, гейм-дизайна и статистики. Курс подойдёт начинающим аналитикам, гейм-дизайнерам и даже простым геймерам, которые хотят превратить хобби в работу мечты.
— Читать дальше «Факультет игровой аналитики»…

09
Мар
2021

Интенсив «Как выбрать язык программирования и найти работу»

Познакомитесь с различными языками и направлениями в программировании, узнаете о профессии и карьере разработчика. Поймёте, что вам интереснее, и подберёте подходящую специализацию.
— Читать дальше «Интенсив «Как выбрать язык программирования и найти р…

06
Мар
2021

Куда идти начинающему Java dev?

Подскажите, стоит ли идти на стажировку по автоматизированному тестированию на Java и обучаться дальше Java разработке (фреймворки и т.д.) с последующим переходом с тестирования на разработку? Или не стоит даже начинать? Может легче войти,…

17
Фев
2021

Как извлечь результат из поля калькулятора с помощью Selenium WebDriver

Практикуюсь с Selenium WebDriver, в качестве элементарной задачи взял проверку онлайн калькулятора.
По запросу "калькулятор онлайн" в яндексе появляется интерактивный калькулятор, однако поле в которое можно вводить с клавиатуры …

15
Фев
2021

Можно ли сгенерировать контракты из дто с помощью spring cloud contract?

Метод контроллера принимает на вход объект с большим количеством полей.
Хочется сделать контрактные тесты на констрейнты в дто (например на @Nullable)
Поизучав spring cloud contract я не нашел есть ли возможность сгенерировать контракты, а…