GithubHelp home page GithubHelp logo

qa-portfolio's Introduction

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

Проектирование тестов
        Тест-анализ | Ассоциативные карты | Блок-схемы
        Тест-дизайн | Классы эквивалентности | Граничные значения
        Тестовая документация | Чек-листы | Тест-кейсы

Тестирование веб-приложений
        Пользовательский интерфейс | Формы | DevTools | Charles
        Таблицы принятия решений | Парное тестирование | Баг-репорты

Тестирование мобильных приложений
        Матрица устройств | Эмуляторы | Android Studio

Тестирование API
        REST API | JSON | Postman

Тестирование баз данных
        Консоль | SQL | PostgreSQL

Основы автоматизации тестирования
        JavaScript | NodeJS | Puppeteer

Задание 1

1. Визуализируй требования

Проанализируй требования к сервису Яндекс.Маршруты и нарисуй mindmap.

2. Выдели классы эквивалентности и граничные значения

Проверь: «Время начала поездки», «Откуда», «Куда».

  • Выдели объекты тестирования.
  • Определи классы эквивалентности. Укажи тип ограничений: диапазон или набор значений.
  • Определи граничные значения каждого класса, если применимо.
  • Выбери тестовые значения, которые проверят каждый класс; и границы, если они есть.

Не забудь проверить негативные сценарии.

Требования к сервису Яндекс.Маршруты

Яндекс.Маршруты — сервис, который строит маршруты для транспорта разных видов. Рассчитывает время и стоимость поездки.

Интерфейс

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

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

Описание работы интерфейса

В стартовом состоянии поля «Время начала поездки», «Откуда» и «Куда» пустые. Режимы маршрутов «Оптимальный», «Быстрый и «Свой» не выбраны; панель переключения видов транспорта неактивна.

Логика работы полей «Откуда» и «Куда»

Если поля адреса заполнены корректно, на карте отображаются точки А и В. Если поле «Откуда» заполнено некорректно, точка А не отображается. Если поле «Куда» заполнено некорректно, точка В не отображается. При некорректном значении поле подсвечивается красным; появляется сообщение об ошибке.

Примеры тестовых адресов есть в таблице.

Режим «Оптимальный» и «Быстрый»

Если выбрать режим «Оптимальный» или «Быстрый», система автоматически назначит вид транспорта; построится маршрут; отобразится время и стоимость поездки. Выбрать транспорт в этих режимах нельзя — панель видов транспорта неактивна.

Режим «Свой»

Если выбрать режим «Свой», панель видов транспорта активна — можно переключать. Под каждый вид транспорта строится маршрут; рассчитывается время и стоимость поездки.

Если сменить вид транспорта или поменять значение в любом поле, маршрут перестроится; время и стоимость поездки пересчитается.

Ограничения

Элементы системы Требования
Поле ввода часов Формат 24 часа. Нули перед однозначным числом обязательны. Корректны только целые числа от 0 до 23 включительно. При некорректном вводе подсвечивается красным, ошибка «Вы ввели некорректное время».
Поле ввода минут Только целые числа. Нули перед однозначным числом обязательны. При некорректном вводе подсвечивается красным, ошибка «Вы ввели некорректное время».
Поле ввода адреса Только русские буквы, цифры, пробел, тире, точка, запятая. Длина не более 50 символов. Пробелы до и после адреса удаляются при снятии фокуса. При некорректном вводе подсвечивается красным, ошибка «Вы ввели некорректный адрес».
Переключатели режима Оптимальный, Быстрый и Свой. Состояние каждого переключателя — активен, выбран.
Переключатели видов транспорта Пешком, самокат, велосипед, каршеринг, такси, собственный автомобиль. Состояние каждого переключателя — активен, неактивен, выбран.

Макеты

Интерфейс

Сообщения об ошибках

Логика расчёта

Система получает данные о начале поездки, точке А и точке В. После этого рассчитывает продолжительность и стоимость поездки по определённому алгоритму.

Логика расчёта

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

Вид транспорта Как расчитать время Стоимость на км
Пешком Средняя скорость 4 км/ч 0 р / км
Шеринг самокатов Средняя скорость 10 км/ч
Шеринг велосипедов Средняя скорость 12 км/ч
Каршеринг см. Таблицу «Средняя скорость автомобиля» 9 р / мин
Такси см. Таблицу «Средняя скорость такси» 11 р / мин
Собственное авто см. Таблицу «Средняя скорость автомобиля» 20 р / км

Средняя скорость автомобиля

Время суток Средняя скорость автомобиля
00:01-08:00 45 км/ч
08:01-12:00 30 км/ч
12:01-18:00 40 км/ч
18:01-22:00 25 км/ч
22:01-00:00 45 км/ч

Средняя скорость такси с учётом движения по выделенным полосам

Время суток Средняя скорость такси
00:01-08:00 50 км/ч
08:01-12:00 35 км/ч
12:01-18:00 42 км/ч
18:01-22:00 30 км/ч
22:01-00:00 50 км/ч

Матрица расстояний между адресами для автомобильных дорог, в километрах

Адрес Усачева, 3 Комсомольский проспект, 18 Зубовский бульвар, 37 М. Пироговская, 25 Хамовнический Вал, 34 Фрунзенская набережная, 46 3-я Фрунзенская улица, 12
Усачева, 3 0 1,4 1,5 0,89 2,6 2,6 2,6
Комсомольский проспект, 18 1,4 0 2,9 2,3 2,3 2,3 2,3
Зубовский бульвар, 37 1,4 1,5 0 1,9 3,8 3 3,3
М. Пироговская, 25 1,5 3 2,4 0 1,2 3,4 2,3
Хамовнический Вал, 34 1,5 3,7 3,7 1,2 0 1,7 1,7
Фрунзенская набережная, 46 3,2 3,9 4,7 2,7 1,7 0 2,2
3-я Фрунзенская улица, 12 1,4 2,4 3,5 2,3 1,4 1,3 0

Матрица расстояний между адресами для пешеходов, в километрах

Адрес Усачёва, 3 Комсомольский проспект, 18 Зубовский бульвар, 37 М. Пироговская, 25 Хамовнический Вал, 34 Фрунзенская набережная, 46 3-я Фрунзенская улица, 12
Усачёва, 3 0 0,96 1,4 0,91 1,4 1,7 1,1
Комсомольский проспект, 18 1 0 1,3 1,9 2 1,7 1,2
Зубовский бульвар, 37 1,4 1,3 0 1,9 2,7 2,7 2,3
М. Пироговская, 25 0,91 1,9 1,9 0 0,75 1,5 1,2
Хамовнический Вал, 34 1,4 2 2,7 0,75 0 1,4 1,2
Фрунзенская набережная, 46 1,7 1,7 2,7 1,5 1,4 0 0,57
3-я Фрунзенская улица, 12 1,1 1,2 2,3 1,2 1,2 0,57 0

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

Временные интервалы


Решение

1. Ассоциативная карта

Mindmap

Ассоциативная карта в большом разрешении

2. Классы эквивалентности и граничные значения

Поле ввода часов

Длина поля

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах
2 цифры диапазон 2 2 цифры: 12
от 0 до 1 цифры диапазон 0, 1 0 цифр: пустое поле 1 цифра: 0
от 3 цифр до +∞ диапазон 3 50 цифр:
1234567890123456789012345
6789012345678901234567890
3 цифры: 222

Обязательность заполнения

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах
Поле заполнено диапазон 12
Поле пустое диапазон Пустое поле

Вводимые значения

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах
Цифры от 00 до 23 диапазон 00, 23 12 00, 01, 22, 23
от -∞ до -01 диапазон
от 24 до +∞ диапазон 24 99 24, 25

Курсивом выделены повторяющиеся проверки, зачёркнутые значения - оптимизация проверок


Поле ввода минут

Длина поля

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах
2 цифры диапазон 2 2 цифры: 30
от 0 до 1 цифры диапазон 0, 1 0 цифр: пустое поле 1 цифра: 0
от 3 цифр до +∞ диапазон 3 50 цифр:
1234567890123456789012345
6789012345678901234567890
3 цифры: 123, 4 цифры: 1234

Обязательность заполнения

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах
Поле заполнено диапазон 30
Поле пустое диапазон Пустое поле

Вводимые значения

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах
Цифры от 00 до 59 диапазон 00, 59 30 00, 01, 58, 59
от -∞ до -01 диапазон
от 24 до +∞ диапазон 60 99 60, 61

Курсивом выделены повторяющиеся проверки, зачёркнутые значения - оптимизация проверок


Поля ввода адреса (Откуда, Куда)

Длина поля

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах
от 1 до 50 символов диапазон 1, 50 25 символов: "3-я Фрунзенская улица, 12" 1 символ: "У"
1 символ: "У"
2 символа: "Ус"
49 символов: "3-я Фрунзенская улица, 123-я Фрунзенская улица, 1"
50 символов: "3-я Фрунзенская улица, 123-я Фрунзенская улица, 12"
от -∞ до 0 диапазон 0 0 символов: пустая строка
от 51 до +∞ диапазон 51 100 символов: "3-я Фрунзенская улица, 123-я Фрунзенская улица, 123-я Фрунзенская улица, 123-я Фрунзенская улица, 12" 51 символ: "3-я Фрунзенская улица, 123-я Фрунзенская улица, 123"
52 символа: "3-я Фрунзенская улица, 123-я Фрунзенская улица, 1234"

Обязательность заполнения

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах
Поле заполнено набор "3-я Фрунзенская улица, 12"
Поле пустое набор Пустая строка

Вводимые значения

Название класса Тип класса Границы Тестовые данные внутри класса
Строка, содержащая русские буквы набор Корректный "Усачёва"
Строка, содержащая цифры набор Корректный "Усачёва3"
Строка, содержащая пробел в середине текста набор Корректный "Фрунзенская набережная 46"
Строка, содержащая пробел в начале текста набор Корректный " Усачёва 3"
Строка, содержащая пробел в конце текста набор Корректный "Усачёва 3 "
Строка, содержащая запятую набор Корректный "Комсомольский проспект, 18"
Строка, содержащая тире набор Корректный "3-я Фрунзенская улица, 12"
Строка, содержащая точку набор Корректный "М. Пироговская, 25"
Строка, содержащая латинские буквы набор Некорректный "Usacheva"
Строка, содержащая символы других языков набор Некорректный "通り"
Строка, содержащая спецсимволы набор Некорректный "%;$#?&*!"

Курсивом выделены повторяющиеся проверки, зачёркнутые значения - оптимизация проверок


Наверх

Задание 2

1. Спроектируй тесты расчёта времени и стоимости

Выбери один вид транспорта для тестирования: собственный автомобиль, каршеринг или такси.

  • Определи, какие требования описывают логику расчёта времени и стоимости выбранного транспорта.
  • Напиши формулу, по которой рассчитывается время и стоимость поездки.
  • Нарисуй блок-схему, которая визуализирует алгоритм выбора скорости транспорта в зависимости от времени начала поездки.
  • Определи классы эквивалентности. И граничные значения каждого класса, к которому это применимо.
  • Выбери тестовые значения, которые проверят каждый класс; и границы, если они есть.
  • Напиши тест-кейсы на основе тестовых значений. Тест-кейсы должны проверять корректность логики расчёта.

2. Напиши выводы

Поразмышляй о результатах первого спринта:

  • Как ты думаешь, какую часть функциональности удалось покрыть тестами?
  • Как ты думаешь, какие новые навыки позволили тебе выполнить проект?

Решение

Выбери один вид транспорта для тестирования: собственный автомобиль, каршеринг или такси.

Свой автомобиль.

Определи, какие требования описывают логику расчёта времени и стоимости выбранного транспорта.

Поля "Начало поездки", "Откуда", "Куда"
Переключатель режима ("Свой")
Переключатель вида транспорта ("Свой автомобиль")
Средняя скорость автомобиля в зависимости от времени суток
Стоимость на км
Расстояние между адресами для автомобильных дорог

Напиши формулу, по которой рассчитывается время и стоимость поездки.

Время поездки = расстояние / скорость * 60
Стоимость поездки = расстояние * стоимость 1 км

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

Блок-схема

Блок-схема в большом разрешении

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

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

Время начала поездки

Название класса Тип класса Границы Тестовые данные внутри класса Тестовые данные на границах Пояснение
00:01-08:00 диапазон 00:01, 08:00 04:00 00:01, 00:02, 07:59, 08:00 Скорость автомобиля 45 км/ч
08:01-12:00 диапазон 08:01, 12:00 10:00 08:01, 08:02, 11:59, 12:00 Скорость автомобиля 30 км/ч
12:01-18:00 диапазон 12:01, 18:00 15:00 12:01, 12:02, 17:59, 18:00 Скорость автомобиля 40 км/ч
18:01-22:00 диапазон 18:01, 22:00 20:00 18:01, 18:02, 21:59, 22:00 Скорость автомобиля 25 км/ч
22:01-00:00 диапазон 22:01, 00:00 23:00 22:01, 22:02, 23:59, 00:00 Скорость автомобиля 45 км/ч

Напиши тест-кейсы на основе тестовых значений. Тест-кейсы должны проверять корректность логики расчёта.

Расчёт времени и стоимости поездки на своём автомобиле:

Входные данные:
   Время начала поездки (25 тестовых значений)
   Точка А (Откуда): ул. Усачёва, 3
   Точка Б (Куда): Зубовский бульвар, 37

Расчёт:
   Время поездки, формула: расстояние (1,5 км) / средняя скорость автомобиля * 60
   Стоимость поездки, формула: расстояние (1,5 км) * стоимость 1 км (20 руб.)

Выходные данные:
   Время в пути
   Стоимость поездки

Тест-кейсы

ID-001: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 04:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 04:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-002: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 00:01)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 00:01.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-003: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 00:02)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 00:02.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-004: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 07:59)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 07:59.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-005: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 08:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 08:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-006: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 10:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 10:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-007: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 08:01)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 08:01.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-008: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 08:02)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 08:02.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-009: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 11:59)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 11:59.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-010: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 12:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-011: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 15:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 15:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин 15 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-012: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 12:01)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 12:01.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин 15 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-013: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 12:02)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 12:02.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин 15 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-014: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 17:59)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 17:59.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин 15 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-015: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 18:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 18:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин 15 с.
  • Стоимость поездки: 30 руб. -Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-016: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 20:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 20:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин 36 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-017: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 18:01)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 18:01.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин 36 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-018: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 18:02)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 18:02.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин 36 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-019: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 21:59)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 21:59.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин 36 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-020: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 22:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 22:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 3 мин 36 с.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-021: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 23:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 23:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-022: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 22:01)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 22:01.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-023: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 22:02)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 22:02.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-024: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 23:59)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 23:59.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


ID-025: Расчёт времени и стоимости поездки на своём автомобиле (начало поездки в 00:00)

Предусловие:

  1. Открыть страницу сервиса Яндекс Маршруты.

Шаги:

  1. Ввести время начала поездки: 00:00.
  2. Ввести адрес в поле "Откуда": ул. Усачёва, 3.
  3. Ввести адрес в поле "Куда": Зубовский бульвар, 37.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата отображаются следующие данные:

  • Время в пути: 2 мин.
  • Стоимость поездки: 30 руб.
  • Кнопка действия

Окружение: Google Chrome не ниже версии 72, Yandex.Browser не ниже 18.1.0


Как ты думаешь, какую часть функциональности удалось покрыть тестами?

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

Осталось подготовить данные и написать тест-кейсы для тестирования логики расчёта времени/стоимости других видов транспорта и способов передвижения: каршеринг, такси, велосипед, самокат, пешком; переключателей режимов и видов транспорта; отображения данных на карте; масштабирования карты; остальных элементов интерфейса: шапки, подвала.

Как ты думаешь, какие навыки позволили тебе выполнить проект?

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

Навыки тест-дизайна: выделение объектов и элементов тестирования, классов эквивалентности, подбор тестовых и граничных значений, оптимизация проверок.

Навыки написания тестовой документации: составление чек-листов и тест-кейсов.

Наверх

Задание

1. Анализ требований

Изучи обновлённые требования к сервису Яндекс.Маршруты. Команда успела сделать первую версию продукта.

2. Выбор конфигураций для кроссбраузерного тестирования

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

3. Тестовая документация для вёрстки

  • Проанализируй требования к вёрстке и определи объекты тестирования: это все визуальные элементы на макете, у которых нужно проверить внешний вид и корректное расположение.
  • Напиши чек-лист, чтобы протестировать вёрстку. Не забудь проверить: соответствие макетам (визуально — не «пиксель в пиксель»); как отображается результат расчёта стоимости и времени маршрута при длинных значениях; орфографию.

Напиши чек-лист в таблице «Чек-лист и результаты выполнения тестов: тестирование вёрстки и логики интерфейса».

4. Тестовая документация для логики интерфейса

Проанализируй требования к логике интерфейса и составь тестовую документацию.

  • Напиши тест-кейсы на отображение результата расчёта стоимости и времени по всем видам транспорта. Чтобы составить тесты на отображение результатов, применяй технику «Таблица принятия решений». В тестировании используй только адреса из таблицы в уроке «Требования».

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

  • Составь чек-листы, которые помогут протестировать: отрисовку и скрытие точек на карте; отрисовку и скрытие маршрута на карте; масштабирование карты; перемещение карты. В требованиях есть ограниченный список адресов — тестировать можно только по ним.

Дополни чек-лист из задания 3. Оформи тест-кейсы в таблице «Тест-кейсы: логика интерфейса».

5. Тестирование и заведение баг-репортов

Протестируй сервис Яндекс.Маршруты.

У тебя уже есть набор конфигураций, в которых нужно проверить сервис. Но на тестирование осталось не так много времени, поэтому протестируй сервис на ограниченном наборе: в твоей текущей операционной системе в Яндекс.Браузере при разрешении экрана 800x600, а в Firefox — при 1280х720.

Чтобы проверить длинные строки в интерфейсе, примени DevTools — в нём можно заменить HTML; или Fiddler/Charles — в них можно изменить ответ от сервера.

В процессе тестирования отмечай результаты выполнения теста: PASSED или FAILED. Если тест со статусом FAILED, заведи баг-репорт в Яндекс.Трекере в очереди BUG и вписывай ID в соответствующую таблицу результатов.

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

6. Подведение итогов

Представь, что тебе нужно рассказать команде о статусе протестированной части продукта:

  • Какое впечатление оставил у тебя сервис как у пользователя?
  • Расскажи, что именно тебе удалось протестировать в нескольких предложениях.
  • Подведи итоги тестирования: например, тебе удалось провести все тесты и найти несколько багов. Приложи ссылки на них, чтобы коллеги могли их быстро открыть и посмотреть.
  • Сделай вывод: как ты думаешь, можно ли отдать такой продукт пользователям, или его нужно доработать. Помни, тестировщик даёт рекомендации, а итоговое решение принимает команда менеджеров.
Требования 2.0

Яндекс.Маршруты — сервис, который строит маршруты для транспорта разных видов. Рассчитывает время и стоимость поездки.

Где поддерживается сервис

Поддерживаемые операционные системы: Win 7/8/10, macOS 10.14/10.15.

Поддерживаемые браузеры: Chrome, Yandex, Firefox, браузеры операционной системы (Edge / IE, Safari) последних и предпоследних версий.

Разрешения экрана: 800x600, 1280х720, 1920х1080.

Интерфейс

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

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

Описание работы интерфейса

В стартовом состоянии поля «Время начала поездки», «Откуда» и «Куда» пустые. Режимы маршрутов «Оптимальный», «Быстрый» и «Свой» не выбраны; панель переключения видов транспорта неактивна.

Логика работы полей «Откуда» и «Куда»

Если поля адреса заполнены корректно, на карте отображаются точки A и B. Если поле «Откуда» заполнено некорректно, точка A не отображается. Если поле «Куда» заполнено некорректно, точка B не отображается. При некорректном значении поле подсвечивается красным; появляется сообщение об ошибке.

Примеры тестовых адресов есть в таблице.

Режим «Оптимальный» и «Быстрый»

Если выбрать режим «Оптимальный» или «Быстрый», система автоматически назначит вид транспорта; построится маршрут; отобразится время и стоимость поездки. Выбрать транспорт в этих режимах нельзя — панель видов транспорта неактивна.

Режим «Свой»

Если выбрать режим «Свой», панель видов транспорта активна — можно переключать. Под каждый вид транспорта строится маршрут; рассчитывается время и стоимость поездки.

Если сменить вид транспорта или поменять значение в любом поле, маршрут перестроится; время и стоимость поездки пересчитается.

Ограничения

Элементы системы Требования
Поле ввода часов Формат 24 часа. Нули перед однозначным числом обязательны. Корректны только целые числа от 0 до 23 включительно. При некорректном вводе подсвечивается красным, ошибка «Вы ввели некорректное время».
Поле ввода минут Только целые числа. Нули перед однозначным числом обязательны. При некорректном вводе подсвечивается красным, ошибка «Вы ввели некорректное время».
Поле ввода адреса Только русские буквы, цифры, пробел, тире, точка, запятая. Длина не более 50 символов. Пробелы до и после адреса удаляются при снятии фокуса. При некорректном вводе подсвечивается красным, ошибка «Вы ввели некорректный адрес».
Переключатели режима Оптимальный, Быстрый и Свой. Состояние каждого переключателя — активен, выбран.
Переключатели видов транспорта Пешком, самокат, велосипед, каршеринг, такси, собственный автомобиль. Состояние каждого переключателя — активен, неактивен, выбран.

Карта

Карту можно перемещать, удерживая кнопку мыши, или тачпадом. Масштабировать карту можно кнопками «+» и «-», а также ползунком на карте, скроллом мыши или тачпадом.

Маршрут на карте

Маршрут можно построить только через форму слева. Маршруты работают только «в режиме чтения» — на карте передвигать или устанавливать маршрутные точки нельзя.

Макеты

Интерфейс

Сообщения об ошибках

Логика расчёта

Система получает данные о начале поездки, точке А и точке В. После этого рассчитывает продолжительность и стоимость поездки по определённому алгоритму.

Логика расчёта

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

Вид транспорта Как расчитать время Стоимость на км
Пешком Средняя скорость 4 км/ч 0 р / км
Шеринг самокатов Средняя скорость 10 км/ч
Шеринг велосипедов Средняя скорость 12 км/ч
Каршеринг см. Таблицу «Средняя скорость автомобиля» 9 р / мин
Такси см. Таблицу «Средняя скорость такси» 11 р / мин
Собственное авто см. Таблицу «Средняя скорость автомобиля» 20 р / км

Средняя скорость автомобиля

Время суток Средняя скорость автомобиля
00:01-08:00 45 км/ч
08:01-12:00 30 км/ч
12:01-18:00 40 км/ч
18:01-22:00 25 км/ч
22:01-00:00 45 км/ч

Средняя скорость такси с учётом движения по выделенным полосам

Время суток Средняя скорость такси
00:01-08:00 50 км/ч
08:01-12:00 35 км/ч
12:01-18:00 42 км/ч
18:01-22:00 30 км/ч
22:01-00:00 50 км/ч

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

Адрес Усачева, 3 Комсомольский проспект, 18 Зубовский бульвар, 37 М. Пироговская, 25 Хамовнический Вал, 34 Фрунзенская набережная, 46 3-я Фрунзенская улица, 12
Усачева, 3 0 1,4 1,5 0,89 2,6 2,6 2,6
Комсомольский проспект, 18 1,4 0 2,9 2,3 2,3 2,3 2,3
Зубовский бульвар, 37 1,4 1,5 0 1,9 3,8 3 3,3
М. Пироговская, 25 1,5 3 2,4 0 1,2 3,4 2,3
Хамовнический Вал, 34 1,5 3,7 3,7 1,2 0 1,7 1,7
Фрунзенская набережная, 46 3,2 3,9 4,7 2,7 1,7 0 2,2
3-я Фрунзенская улица, 12 1,4 2,4 3,5 2,3 1,4 1,3 0

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

Адрес Усачёва, 3 Комсомольский проспект, 18 Зубовский бульвар, 37 М. Пироговская, 25 Хамовнический Вал, 34 Фрунзенская набережная, 46 3-я Фрунзенская улица, 12
Усачёва, 3 0 0,96 1,4 0,91 1,4 1,7 1,1
Комсомольский проспект, 18 1 0 1,3 1,9 2 1,7 1,2
Зубовский бульвар, 37 1,4 1,3 0 1,9 2,7 2,7 2,3
М. Пироговская, 25 0,91 1,9 1,9 0 0,75 1,5 1,2
Хамовнический Вал, 34 1,4 2 2,7 0,75 0 1,4 1,2
Фрунзенская набережная, 46 1,7 1,7 2,7 1,5 1,4 0 0,57
3-я Фрунзенская улица, 12 1,1 1,2 2,3 1,2 1,2 0,57 0

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

Временные интервалы


Решение

1. Анализ требований

Что изменилось в требованиях?

Добавлена следующая информация:

  • поддерживаемые ОС, браузеры и разрешения экрана;
  • способы перемещения и масштабирования;
  • построение маршрута на карте: его можно построить только через форму слева, на карте передвигать или устанавливать маршрутные точки нельзя.

Кто пользователь?

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

Какие задачи и проблемы он решает?

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

Какое типичное поведение пользователя?

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

Чем он пользуется?

Компьютером/ноутбуком под управлением Windows 7/8/10 или macOs 10.14/10.15, браузером Chrome, Yandex, Firefox, Edge/IE или Safari последних и предпоследних версий. Разрешения экрана компьютера: 800x600, 1280х720 или 1920х1080.

2. Выбор конфигураций для кроссбраузерного тестирования

Сервис поддерживает:

  • операционные системы: Win 7/8/10, macOS 10.14/10.15;
  • браузеры: Chrome, Yandex, Firefox, браузеры операционной системы (Edge / IE, Safari) последних и предпоследних версий;
  • разрешения экрана: 800x600, 1280х720, 1920х1080.

В интернете ищем информацию об особенностях работы поддерживаемых браузеров в ОС; смотрим статистику использования браузеров по визитам за последний месяц (1-31 марта 2020 года) на Яндекс.Радаре:

Windows
Google Chrome 42,43%
Яндекс.Браузер 32,82%
Firefox 7,24%
Edge 3,43%
Internet Explorer 2,36%
Safari <1%
*разработка Safari для Windows прекращена, последняя версия: 5.1.7 от 9 мая 2012

macOS
Safari 53,86%
Google Chrome 34,27%
Яндекс.Браузер 5,78%
Firefox 3,18%
Edge 0,02%
*IE для macOS не поддерживается с 2005 года

По заданию нужно протестировать все комбинации ОС, браузеров и разрешений экрана. Уменьшаем количество окружений, применяя парное тестирование с помощью сервиса https://pairwise.yuuniworks.com.

Входные данные:

os: Windows7, Windows8, Windows10, macOs1014, macOs1015
browser: Chrome81, Chrome80, Yandex20, Yandex19, Firefox75, Firefox74, Edge80, Edge79, IE11, IE10, Safari13, Safari12
size: 800600, 1280720, 19201080

if [os] = "macOs1014" OR [os] = "macOs1015"
then [browser] <> "IE11" AND [browser] <> "IE10";

if [os] = "Windows7" OR [os] = "Windows8" OR [os] = "Windows10"
then [browser] <> "Safari13" AND [browser] <> "Safari12";

Количество окружений для тестирования сократилось до 52 (см. таблицу «Конфигурации браузеров, ОС и разрешений»).

Конфигурации браузеров, ОС и разрешений
ОС Браузер Разрешение
1 Windows 7 Chrome 80 800x600
2 Windows 7 Edge 80 1280x720
3 Windows 7 IE 10 1920x1080
4 Windows 7 Yandex 20 800x600
5 Windows 7 Yandex 19 1920x1080
6 Windows 7 Firefox 75 1920x1080
7 Windows 7 IE 11 1920x1080
8 Windows 7 Edge 79 800x600
9 Windows 7 Chrome 81 1280x720
10 Windows 7 Firefox 74 1920x1080
11 Windows 8 Yandex 20 1920x1080
12 Windows 8 IE 10 800x600
13 Windows 8 Chrome 80 1280x720
14 Windows 8 Firefox 74 800x600
15 Windows 8 Yandex 19 1280x720
16 Windows 8 Firefox 75 1280x720
17 Windows 8 Edge 80 1920x1080
18 Windows 8 Chrome 81 1280x720
19 Windows 8 Edge 79 800x600
20 Windows 8 IE 11 800x600
21 Windows 10 Yandex 19 800x600
22 Windows 10 Firefox 74 1920x1080
23 Windows 10 Edge 79 1920x1080
24 Windows 10 Edge 80 1280x720
25 Windows 10 IE 11 1280x720
26 Windows 10 Chrome 81 800x600
27 Windows 10 Yandex 20 1280x720
28 Windows 10 Chrome 80 800x600
29 Windows 10 IE 10 1280x720
30 Windows 10 Firefox 75 800x600
31 macOs 10.14 Edge 80 1920x1080
32 macOs 10.14 Edge 79 1280x720
33 macOs 10.14 Chrome 80 800x600
34 macOs 10.14 Chrome 81 1920x1080
35 macOs 10.14 Yandex 19 800x600
36 macOs 10.14 Safari 13 1920x1080
37 macOs 10.14 Firefox 74 800x600
38 macOs 10.14 Safari 12 1920x1080
39 macOs 10.14 Firefox 75 1280x720
40 macOs 10.14 Safari 12 1280x720
41 macOs 10.14 Yandex 20 1920x1080
42 macOs 10.14 Safari 13 800x600
43 macOs 10.15 Chrome 80 1920x1080
44 macOs 10.15 Edge 80 800x600
45 macOs 10.15 Firefox 74 1280x720
46 macOs 10.15 Safari 12 800x600
47 macOs 10.15 Firefox 75 800x600
48 macOs 10.15 Chrome 81 1280x720
49 macOs 10.15 Safari 13 1280x720
50 macOs 10.15 Yandex 19 1920x1080
51 macOs 10.15 Yandex 20 1920x1080
52 macOs 10.15 Edge 79 1920x1080

3. Тестовая документация для вёрстки

Чек-лист и результаты выполнения тестов: тестирование вёрстки и логики интерфейса

Описание проверки macOs 10.15.2, Yandex 20.3.0, 800x600 macOs 10.15.2, Firefox 75.0, 1280x720 ID баг-репорта
1 После загрузки страницы в консоли отсутствуют ошибки и предупреждения FAILED FAILED BUG-8316, BUG-8317
2 Фавикон сайта отображается на вкладке браузера FAILED FAILED BUG-8245
3 Заголовок страницы корректно отображается на вкладке и в адресной строке браузера FAILED FAILED BUG-8243
4 Шапка сайта размещена согласно макету и полностью отображается; слова "Яндекс" и "Маршруты" в шапке являются ссылками, при нажатии на них открываются страницы соответствующих сервисов FAILED FAILED BUG-8251
5 Поля ввода времени размещены согласно макету и полностью отображаются PASSED PASSED -
6 Поля ввода адреса размещены согласно макету и полностью отображаются PASSED PASSED -
7 Значки слева от полей адреса размещены согласно макету, полностью отображаются и совпадают по цвету с соответствующими точками маршрута на карте FAILED FAILED BUG-8331
8 Панель режимов маршрутов размещена согласно макету и полностью отображается PASSED PASSED -
9 Панель видов транспорта размещена согласно макету и полностью отображается FAILED FAILED BUG-8299
10 Панель результата расчёта времени и стоимости поездки размещена согласно макету и полностью отображается FAILED FAILED BUG-8351, BUG-8368
11 В стартовом состоянии все поля ввода пустые, режимы маршрутов не выбраны, панель видов транспорта неактивна PASSED PASSED -
12 Шрифты формы соответствуют макету FAILED FAILED BUG-8373
13 Все тексты не содержат орфографических ошибок FAILED FAILED BUG-8285
14 Карта размещена согласно макету и полностью отображается PASSED PASSED -
15 Ссылка "Открыть в Яндекс.Картах" размещена согласно макету, полностью отображается; при нажатии открывается страница Яндекс.Карт в новой вкладке PASSED PASSED -
16 Копирайт Яндекса и ссылка "Условия использования" размещены согласно макету, полностью отображаются; при нажатии на ссылку в новой вкладке открывается страница условий использования сервиса Яндекс.Карты PASSED PASSED -
17 Вёрстка не ломается при вводе длинных значений в полях времени и адреса и в панели результата PASSED PASSED -
18 Сообщения об ошибках размещены согласно макету и полностью отображаются PASSED FAILED BUG-8371
19 При вводе некорректных значений в полях времени и перемещении фокуса отображается ошибка-подсказка: "Вы ввели некорректное время" PASSED PASSED -
20 При вводе корректных значений в поля адресов на карте отображаются точки А и В; при некорректных значениях точки не отображаются PASSED PASSED -
21 При вводе некорректного значения в поле Откуда и перемещении фокуса отображается ошибка-подсказка: "Вы ввели некорректный адрес" FAILED FAILED BUG-8370
22 При вводе некорректного значения в поле Куда и перемещении фокуса отображается ошибка-подсказка: "Вы ввели некорректный адрес" PASSED PASSED -
23 При выборе режимов "Оптимальный" или "Быстрый" панель видов транспорта неактивна PASSED PASSED -
24 При выборе режима "Свой" панель видов транспорта становится активной PASSED PASSED -
25 При переключении видов транспорта в режиме "Свой" для каждого транспорта корректно строится маршрут, рассчитывается время и стоимость поездки FAILED FAILED BUG-8355
26 В режиме "Свой" при смене вида транспорта или значений в любом поле маршрут перестраивается, время и стоимость поездки пересчитывается FAILED FAILED BUG-8367
27 Всплывающие подсказки: для каждого элемента всплывает корректная надпись; она не должна перекрывать свой элемент FAILED FAILED BUG-8314
28 Контекстное меню: подсвечивается при наведении курсора; выполняется переход в указанное место или выполнение действия при выборе пункта меню PASSED FAILED BUG-8384
29 Поля ввода: обязательность заполнения полей формы; возможность редактировать введённые данные; название полей соответствует их логике; формат данных полей ввода соответствует требованиям FAILED FAILED BUG-8369, BUG-8372
30 Полосы прокрутки: их нет, если контент помещается на странице; можно двигаться по полосе прокрутки мышью, кнопками "Page up" и "Page down", "Home" и "End"; все полосы прокрутки формы должны быть одного размера и цвета PASSED FAILED BUG-8393
31 Кнопки (Оптимальный, Быстрый, Свой, иконки видов транспорта, кнопка действия в панели результата): название кнопки соответствует её логическому замыслу, при нажатии вид кнопки должен меняться; нажатие на кнопку вызывает одно действие; повторное нажатие не вызывает повторное действие; кнопки, которые не доступны для нажатия, не скрыты, а «засушены»; курсор мыши не меняется при наведении на неактивные кнопки; пространство между кнопками не вызывает никакого действия FAILED FAILED BUG-8351, BUG-8397
32 Ссылки: клик по ссылке вызывает действие, которое описано в требованиях; при наведении курсора на ссылку её вид меняется, так же как и вид курсора; ссылки одинаковые по дизайну PASSED PASSED -
33 Плейсхолдеры: все поля ввода содержат плейсхолдеры; плейсхолдер исчезает, если вывести фокус в поле или начать вводить данные; плейсхолдер появляется, если очистить поле или убрать из него фокус; плейсхолдер в поле отличается внешним видом от данных, которые вводит пользователь; все плейсхолдеры формы выглядят одинаково FAILED FAILED BUG-8374, BUG-8395
34 На странице сервиса нет лишних элементов FAILED FAILED BUG-8254
35 Карта масштабируется кнопками «+» и «-», ползунком на карте, скроллом мыши и тачпадом PASSED N/A -
36 Карта перемещается с помощью мыши и тачпада PASSED N/A -
37 Точки адресов и маршрут отображаются на карте при вводе корректных значений в поля Откуда и Куда; при удалении значений или некорректном вводе точки и маршрут скрываются FAILED N/A BUG-8334, BUG-8382

4. Тест-кейсы: логика интерфейса

ID-1: Отображение панели результата расчёта стоимости и времени поездки в режиме "Оптимальный"

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. В поле "Откуда" ввести адрес: Усачева, 3.
  3. В поле "Куда" ввести адрес: Фрунзенская набережная, 46.
  4. Выбрать режим "Оптимальный".

ОР: В панели результата расчёта отображается информация о поездке.

В левой части панели:

  • <Название вида транспорта> ~ <стоимость> руб.
  • В пути <время> мин.
  • Кнопка действия синего цвета с надписью, соответствующей виду транспорта; например, для такси: "Вызвать такси"

В правой части панели:

  • Картинка вида транспорта

Окружение: Yandex.Browser не ниже 20.0, разрешение 800х600; Firefox не ниже 75.0, разрешение 1280х720

Результат: FAILED

ID баг-репорта: BUG-8351


ID-2: Отображение панели результата расчёта стоимости и времени поездки в режиме "Быстрый"

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. В поле "Откуда" ввести адрес: Усачева, 3.
  3. В поле "Куда" ввести адрес: Фрунзенская набережная, 46.
  4. Выбрать режим "Быстрый".

ОР: В панели результата расчёта отображается информация о поездке.

В левой части панели:

  • <Название вида транспорта> ~ <стоимость> руб.
  • В пути <время> мин.
  • Кнопка действия синего цвета с надписью, соответствующей виду транспорта; например, для такси: "Вызвать такси"

В правой части панели:

  • Картинка вида транспорта

Окружение: Yandex.Browser не ниже 20.0, разрешение 800х600; Firefox не ниже 75.0, разрешение 1280х720

Результат: FAILED

ID баг-репорта: BUG-8351


ID-3: Отображение панели результата расчёта стоимости и времени поездки в режиме "Свой" для каршеринга

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. В поле "Откуда" ввести адрес: Усачева, 3.
  3. В поле "Куда" ввести адрес: Фрунзенская набережная, 46.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Каршеринг".

ОР: В панели результата расчёта отображается информация о поездке.

В левой части панели:

  • Каршеринг ~ <стоимость> руб.
  • В пути <время> мин.
  • Кнопка действия синего цвета с надписью, соответствующей виду транспорта.

В правой части панели:

  • Картинка каршеринга

Окружение: Yandex.Browser не ниже 20.0, разрешение 800х600; Firefox не ниже 75.0, разрешение 1280х720

Результат: FAILED

ID баг-репорта: BUG-8351, BUG-8368


ID-4: Отображение панели результата расчёта стоимости и времени поездки в режиме "Свой" для пешехода

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. В поле "Откуда" ввести адрес: Усачева, 3.
  3. В поле "Куда" ввести адрес: Фрунзенская набережная, 46.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Пешком".

ОР: В панели результата расчёта отображается информация о поездке.

В левой части панели:

  • Пешеход Бесплатно.
  • В пути <время> мин.
  • Кнопка действия синего цвета с надписью, соответствующей виду транспорта.

В правой части панели:

  • Картинка пешехода

Окружение: Yandex.Browser не ниже 20.0, разрешение 800х600; Firefox не ниже 75.0, разрешение 1280х720

Результат: FAILED

ID баг-репорта: BUG-8351


ID-5: Отображение панели результата расчёта стоимости и времени поездки в режиме "Свой" для такси

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. В поле "Откуда" ввести адрес: Усачева, 3.
  3. В поле "Куда" ввести адрес: Фрунзенская набережная, 46.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Такси".

ОР: В панели результата расчёта отображается информация о поездке.

В левой части панели:

  • Такси ~ <стоимость> руб.
  • В пути <время> мин.
  • Кнопка действия синего цвета с надписью "Вызвать такси".

В правой части панели:

  • Картинка такси

Окружение: Yandex.Browser не ниже 20.0, разрешение 800х600; Firefox не ниже 75.0, разрешение 1280х720

Результат: FAILED

ID баг-репорта: BUG-8351


ID-6: Отображение панели результата расчёта стоимости и времени поездки в режиме "Свой" для велосипеда

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. В поле "Откуда" ввести адрес: Усачева, 3.
  3. В поле "Куда" ввести адрес: Фрунзенская набережная, 46.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Велосипед".

ОР: В панели результата расчёта отображается информация о поездке.

В левой части панели:

  • Велосипед ~ <стоимость> руб.
  • В пути <время> мин.
  • Кнопка действия синего цвета с надписью "Вызвать такси".

В правой части панели:

  • Картинка велосипеда

Окружение: Yandex.Browser не ниже 20.0, разрешение 800х600; Firefox не ниже 75.0, разрешение 1280х720

Результат: FAILED

ID баг-репорта: BUG-8351


ID-7: Отображение панели результата расчёта стоимости и времени поездки в режиме "Свой" для самоката

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. В поле "Откуда" ввести адрес: Усачева, 3.
  3. В поле "Куда" ввести адрес: Фрунзенская набережная, 46.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Самокат".

ОР: В панели результата расчёта отображается информация о поездке.

В левой части панели:

  • Самокат ~ <стоимость> руб.
  • В пути <время> мин.
  • Кнопка действия синего цвета с надписью "Вызвать такси".

В правой части панели:

  • Картинка самоката

Окружение: Yandex.Browser не ниже 20.0, разрешение 800х600; Firefox не ниже 75.0, разрешение 1280х720

Результат: FAILED

ID баг-репорта: BUG-8351


ID-8: Отображение панели результата расчёта стоимости и времени поездки в режиме "Свой" для своего автомобиля

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги:

  1. Ввести время начала поездки: 12:00.
  2. В поле "Откуда" ввести адрес: Усачева, 3.
  3. В поле "Куда" ввести адрес: Фрунзенская набережная, 46.
  4. Выбрать режим "Свой".
  5. Выбрать вид транспорта "Свой автомобиль".

ОР: В панели результата расчёта отображается информация о поездке.

В левой части панели:

  • Авто ~ <стоимость> руб.
  • В пути <время> мин.
  • Кнопка действия синего цвета с надписью "Вызвать такси".

В правой части панели:

  • Картинка автомобиля

Окружение: Yandex.Browser не ниже 20.0, разрешение 800х600; Firefox не ниже 75.0, разрешение 1280х720

Результат: FAILED

ID баг-репорта: BUG-8351


5-6. Тестирование и заведение баг-репортов. Подведение итогов

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

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

Всего мы нашли 23 бага и дали одну рекомендацию по улучшению сервиса. Вот список баг-репортов:

BUG-8245: Не отображается фавикон Яндекс.Маршрутов во вкладке браузера

Шаги воспроизведения:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

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

Фактический результат: фавикон не отображается.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/CyFZgF25EuAA6g]

Приоритет: незначительный


BUG-8243: Некорректный заголовок страницы "Яндекс.Маршруты" на всплывающей подсказке во вкладке браузера

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Навести курсор мыши на вкладку браузера.

Ожидаемый результат: появляется всплывающая подсказка с заголовком страницы: "Яндекс.Практикум - Яндекс.Маршруты"

Фактический результат: появляется всплывающая подсказка с некорректным заголовком страницы: "Яндекс.Практикум - Яндекс.Маршрутыundefined"

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/d/l7mbS4BL6OPS3A]

Приоритет: незначительный


BUG-8251: Слова "Яндекс" и "Маршруты" в шапке не являются ссылками

Шаги воспроизведения:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Ожидаемый результат: название сервиса в шапке должно состоять из двух ссылок: ссылка "Яндекс" ведёт на главную страницу Яндекса, ссылка "Маршруты" - на страницу сервиса Яндекс.Маршруты.

Фактический результат: слова "Яндекс" и "Маршруты" в шапке не являются ссылками.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/7LEp6uxb9xar8Q]

Приоритет: низкий


BUG-8254: В шапке страницы Яндекс.Маршрутов присутствует лишний элемент

Шаги воспроизведения:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Ожидаемый результат: в шапке отображается только название сервиса - "Яндекс Маршруты".

Фактический результат: в шапке справа от названия сервиса отображаются слова "Учебный тренажёр".

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/8dZ-azY9_FG0zw]

Приоритет: незначительный


BUG-8285: Орфографическая ошибка в названии полей времени

Шаги воспроизведения:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Ожидаемый результат: все тексты не содержат орфографических ошибок.

Фактический результат: орфографическая ошибка в названии полей времени.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/eLGKnSkcSZXmRQ]

Приоритет: незначительный


BUG-8299: Одинаковые иконки для каршеринга и своего авто в панели транспорта

Описание: Для удобства использования сервиса в панели переключения видов транспорта должны отображаться уникальные иконки для каждого вида транспорта. На макете иконка для своего авто отображается некорректно; в вёрстке отображаются одинаковые иконки для каршеринга и своего авто.

Шаги воспроизведения:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

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

Фактический результат: отображаются одинаковые иконки для каршеринга и своего авто.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/W-hhJYw7x98uQw]

Приоритет: низкий


BUG-8314: У элементов формы нет всплывающих подсказок

Предусловие:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

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

Ожидаемый результат: у элементов есть всплывающие подсказки.

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

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скринкаст: [https://yadi.sk/i/CGF0Hgf3MMmz-Q]

Приоритет: низкий


BUG-8316: После загрузки страницы в консоли появляются предупреждения о некорректно настроенных куках

Шаги воспроизведения:

  1. Очистить кэш и куки браузера.
  2. Открыть Яндекс.Маршруты:[хhttps://qa-routes.praktikum-services.ru].
  3. Открыть DevTools и перейти на вкладку Console.

Ожидаемый результат: в консоли нет сообщений об ошибках и предупреждений.

Фактический результат: в консоли есть предупреждения о некорректно настроенных куках.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Скриншот: [https://yadi.sk/i/2eg7_QcaS9Qpsw]

Приоритет: незначительный


BUG-8317: После загрузки страницы в консоли появляется предупреждение об использовании нестандартного свойства

Шаги воспроизведения:

  1. Очистить кэш и куки браузера.
  2. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].
  3. Открыть DevTools и перейти на вкладку Console.

Ожидаемый результат: в консоли нет сообщений об ошибках и предупреждений.

Фактический результат: в консоли есть предупреждение об использовании нестандартного свойства.

Окружение:

macOs 10.15.2

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/RSP4xCZi0zKBvw]

Приоритет: незначительный


BUG-8331: Цвета значков полей адреса отличаются от цветов соответствующих точек маршрута на карте

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Ввести время начала поездки.
  2. Ввести адрес в поле Откуда: Усачева, 3.
  3. Ввести адрес в поле Куда: Фрунзенская набережная, 46.
  4. Выбрать один из режимов: Оптимальный, Быстрый, Свой.
  5. Если выбран режим Свой, выбрать вид транспорта.

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

Фактический результат: цвета отличаются (перепутаны).

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/6M7Iwkg5hskIRA]

Приоритет: низкий


BUG-8334: Точки адресов и маршрут на карте отображаются только после заполнения всей формы

Описание:

По требованиям, если поля адреса заполнены корректно, на карте отображаются точки A и B. Однако для того, чтобы точки отобразились на карте и простроился маршрут, приходится заполнять не только поля адреса, но и все остальные элементы формы.

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Ввести адрес в поле Откуда: Усачева, 3.
  2. Ввести адрес в поле Куда: Фрунзенская набережная, 46.

Ожидаемый результат: точки адресов и маршрут отображаются на карте.

Фактический результат: точки адресов и маршрут не отображаются.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Скриншот: [https://yadi.sk/i/ia9ewomAdJoOWQ]

Приоритет: незначительный


BUG-8351: В панели результата расчёта поездки не отображаются иконка вида транспорта и кнопка действия

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Ввести время начала поездки.
  2. Ввести адрес в поле Откуда: Усачева, 3.
  3. Ввести адрес в поле Куда: Фрунзенская набережная, 46.
  4. Выбрать один из режимов: Оптимальный, Быстрый, Свой.
  5. Если выбран режим Свой, выбрать вид транспорта.

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

Фактический результат: картинка вида транспорта и кнопка действия не отображаются.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/J4YykF5PZqgJQQ]

Приоритет: критичный


BUG-8355: В режимах Свой-Велосипед и Свой-Самокат на карте отображается иконка с пешеходом и некорректным расстоянием между адресами

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Ввести время начала поездки.
  2. Ввести адрес в поле Откуда: Усачева, 3.
  3. Ввести адрес в поле Куда: Фрунзенская набережная, 46.
  4. Выбрать режим Свой.
  5. Выбрать вид транспорта Велосипед.

Ожидаемый результат: на карте отображается иконка с изображением выбранного вида транспорта и корректным расстоянием между адресами (для указанных в шагах адресов - 2,6 км).

Фактический результат: на карте отображается иконка с пешеходом и некорректным расстоянием между адресами (1,8 км).

  1. Выбрать вид транспорта Самокат.

Ожидаемый результат: на карте отображается иконка с изображением выбранного вида транспорта и корректным расстоянием между адресами (для указанных в шагах адресов - 2,6 км).

Фактический результат: на карте отображается иконка с пешеходом и некорректным расстоянием между адресами (1,8 км).

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/qKS4rcmDhDOVAQ]

Приоритет: средний


BUG-8367: В режиме Свой-Пешком на карте не отображаются точки и линии маршрута и не появляется кнопка "Открыть маршрут"

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Ввести время начала поездки.
  2. Ввести адрес в поле Откуда: Усачева, 3.
  3. Ввести адрес в поле Куда: Фрунзенская набережная, 46.
  4. Выбрать режим Свой.
  5. Выбрать вид транспорта Пешком.

Ожидаемый результат: на карте построится маршрут, кнопка "Открыть в Яндекс.Картах" изменится на "Открыть маршрут".

Фактический результат: маршрут не отображается, кнопка не меняется.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/8JrGL5dJ4JN6hw]

Приоритет: критичный


BUG-8368: Одинаковое название вида транспорта для каршеринга и своего авто в панели результата

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Ввести время начала поездки.
  2. Ввести адрес в поле Откуда: Усачева, 3.
  3. Ввести адрес в поле Куда: Фрунзенская набережная, 46.
  4. Выбрать режим Свой.
  5. Выбрать вид транспорта Каршеринг.
  6. Выбрать вид транспорта Свой автомобиль.

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

Фактический результат: для разных видов транспорта - Каршеринг и Свой автомобиль - отображается одинаковое название вида транспорта - Авто.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншоты: [https://yadi.sk/i/8fTKVNtNCmXwSA], [https://yadi.sk/i/g-l0KVPBffZFEA]

Приоритет: низкий


BUG-8369: В поле часов можно ввести некорректное значение "24"

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. В поле часов ввести значение "24" и переместить фокус.

Ожидаемый результат: поле выделится красным, отобразится сообщение об ошибке.

Фактический результат: поле не выделяется, сообщение об ошибке не появляется.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/C322eo13h1hSdw]

Приоритет: средний


BUG-8370: Некорректное сообщение об ошибке для поля адреса "Откуда"

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. В поле адреса Откуда ввести некорректное значение: например, "Фаренгауэт, 451".

Ожидаемый результат: поле выделяется красным, появляется сообщение об ошибке "Вы ввели некорректный адрес".

Фактический результат: поле выделяется красным, появляется сообщение об ошибке "Вы ввели некорректное время".

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/uogNqswWgzX4sg]

Приоритет: средний


BUG-8371: Сообщения об ошибке наезжают на поля ввода

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. В поля времени ввести некорректные значения.
  2. В поля адреса Откуда и Куда ввести некорректные значения: например, "Фаренгауэт, 451".

Ожидаемый результат: поле выделяется красным, сообщение об ошибке отображается в соответствии с макетом.

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

Окружение:

macOs 10.15.2

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншот: [https://yadi.sk/i/PnPeVE5kuE1EKQ]

Приоритет: незначительный


BUG-8372: Нет подсказок об обязательности заполнения полей ввода и выбора значений

Описание:

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

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Заполнить форму данными/выбрать значения, оставив одно из них пустым/не выбранным:
  • Поле часов: 07.
  • Поле минут: 45.
  • Поле Откуда: Усачева, 3.
  • Поле Куда: Фрунзенская набережная, 46.
  • Выбрать один из режимов: Оптимальный, Быстрый, Свой.
  • Если выбран режим Свой, выбрать вид транспорта.

Ожидаемый результат: при незаполненном поле или не выбранном значении появляется подсказка об обязательности заполнения/выбора.

Фактический результат: подсказка об обязательности заполнения/выбора не появляется.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Приоритет: низкий


BUG-8373: Шрифты формы не соответствуют макету

Шаги воспроизведения:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].
  2. Сравнить шрифты с макетом (project-interface-fast.png).

Ожидаемый результат: шрифты соответствуют макету.

Фактический результат: шрифты немного отличаются.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скриншоты: [https://yadi.sk/i/R6GNjYSTzYgIlQ] (макет), [https://yadi.sk/i/80qU8pwNMeluGw]

Приоритет: незначительный


BUG-8374: Текст плейсхолдеров полей ввода похож на заполненное значение

Текст плейсхолдеров полей адреса похож на заполненное значение (см. макет project-interface-fast.png). Для удобства пользователя можно указать, что это пример заполнения:

Пример: Усачева, 3

Скриншот: [https://yadi.sk/i/R6GNjYSTzYgIlQ] (макет)

Тип: задача

Приоритет: незначительный


BUG-8382: При пустом/некорректном значении одного поля адреса на карте скрываются точки обоих адресов

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Построить маршрут:
  • Ввести время начала поездки.
  • Ввести адрес в поле Откуда: Усачева, 3.
  • Ввести адрес в поле Куда: Фрунзенская набережная, 46.
  • Выбрать один из режимов: Оптимальный, Быстрый, Свой.
  • Если выбран режим Свой, выбрать вид транспорта.
  1. Удалить значение из поля Откуда.

Ожидаемый результат: на карте скрывается точка А.

Фактический результат: на карте скрываются точки А и В.

3.. Ввести в поле Откуда корректное значение, построить маршрут, а затем ввести некорректное значение: Фаренгауэт, 451.

Ожидаемый результат: на карте скрывается точка А.

Фактический результат: на карте скрываются точки А и В.

  1. Ввести корректный адрес в поле Откуда: Усачева, 3.
  2. Удалить значение из поля Куда.

Ожидаемый результат: на карте скрывается точка В.

Фактический результат: на карте скрываются точки А и В.

  1. Ввести в поле Куда корректное значение, построить маршрут, а затем ввести некорректное значение: Фаренгауэт, 451.

Ожидаемый результат: на карте скрывается точка В.

Фактический результат: на карте скрываются точки А и В.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Скринкаст: [https://yadi.sk/i/Jc658TkoZqJgag]

Приоритет: средний


BUG-8384: Не выполняются действия Копировать и Вставить при выборе соответствующих пунктов контекстного меню

Предусловия:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].

Шаги воспроизведения:

  1. Выделить любой текст на форме.
  2. Вызвать контекстное меню.
  3. Выбрать пункт меню Копировать.
  4. Поместить курсор в любое поле ввода формы.
  5. Вызвать контекстное меню.
  6. Выбрать пункт меню Вставить.
  7. Вставить скопированный текст в любое другое место, кроме полей ввода (например, в адресную строку браузера).

Ожидаемый результат: текст копируется и вставляется.

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

Окружение:

macOs 10.15.2

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скринкаст: [https://yadi.sk/i/sJ1e3iF8ktmWMg]

Приоритет: средний


BUG-8397: На неактивной панели видов транспорта курсор мыши меняется при наведении на кнопки-иконки транспорта

Описание:

В стартовом состоянии, а также в режимах Оптимальный и Быстрый панель видов транспорта неактивна, но если навести курсор мыши на кнопки-иконки транспорта, он меняется, некорректно сигнализируя о возможности совершить действие.

Шаги воспроизведения:

  1. Открыть Яндекс.Маршруты: [https://qa-routes.praktikum-services.ru].
  2. Навести курсор мыши на иконки транспорта в неактивной панели видов транспорта.

Ожидаемый результат: курсор мыши не меняется.

Фактический результат: курсор мыши меняется.

  1. Построить маршрут:
  • Ввести время начала поездки.
  • Ввести адрес в поле Откуда: Усачева, 3.
  • Ввести адрес в поле Куда: Фрунзенская набережная, 46.
  • Выбрать режим Оптимальный.
  1. Навести курсор мыши на иконки транспорта в неактивной панели видов транспорта.

Ожидаемый результат: курсор мыши не меняется.

Фактический результат: курсор мыши меняется.

  1. Выбрать режим Быстрый.

  2. Навести курсор мыши на иконки транспорта в неактивной панели видов транспорта.

Ожидаемый результат: курсор мыши не меняется.

Фактический результат: курсор мыши меняется.

Окружение:

macOs 10.15.2

Яндекс.Браузер 20.3.0.2220 (64-bit)
Разрешение экрана: 800x600

Firefox 75.0 (64-bit)
Разрешение экрана: 1280x720

Скринкаст: [https://yadi.sk/i/yrZck0Ll3xmxKg]

Приоритет: низкий


Наверх

Задание

  1. Проанализируй требования к мобильному приложению Яндекс.Метро.

  2. Напиши чек-лист для тестирования мобильного приложения на часть требований, выделенных жирным шрифтом.

  3. Протестируй мобильное приложение в эмуляторе с помощью Android Studio или на своём Android-устройстве и заведи баг-репорты. Скачай готовящуюся к релизу версию приложения тут.

Чтобы проверить, что обновление происходит корректно, скачай предыдущую версию тут.

  1. Напиши отчет о тестировании. Что можешь рассказать команде о статусе протестированной части продукта?
Требования к мобильному приложению Метро

Яндекс.Метро — сервис, который позволяет ориентироваться в метро с помощью мобильного устройства. В приложении есть схема метро, которая помогает построить маршрут и оценить время в пути; в приложении появляются актуальные уведомления о работе станций метро и изменениях графика работы.

1. Список маршрутов

1.1. В карточке маршрута отображается:

  • Информация маршрута - логотипы метро и номера линий метро, также сохраняется последовательность пересадок (если есть).
  • Количество пересадок (если есть).
  • Временной интервал маршрута - время в пути, время отправления и прибытия.
  • Кнопка Закрыть.
  • Кнопка Детали маршрута.
  • Поля Откуда (начальный пункт) и Куда (пункт назначения) (поля должны валидироваться).

Карточка маршрута

1.2. Сброс маршрута.

  • Закрыть маршрут можно только тапом на крестик в карточке маршрута. При закрытии маршрута в поле ввода Откуда сохраняется начальная станция из последнего маршрута Поле ввода Куда и маршрут на схеме сбрасывается, выделение станций пропадает (кроме начальной станции).
  • Если текущее время превышает время окончания маршрута, то временной интервал маршрута обновляется.

2. Выбор станции

2.1. Станцию можно выбрать несколькими способами:

  • Тапом на схеме.
  • По иконке i из разных карточек. Если из поиска выбрать станцию тапом на i и закрыть карточку, должен происходить возврат на экран поиска.

Карточка станции

  • Найти в поиске и нажать на станцию.

2.2. Если станция выбрана, всегда выполняются следующие действия:

  • Точка станции на схеме уменьшается.
  • На точке станции появляется пин цвета линии или специальный пин для закрытой станции.
  • Выбранная станция сохраняется в истории: при нажатии на поле Откуда или Куда раскрывается список, содержащий станции, которые пользователь выбирал ранее. Список должен сохраниться и в новой версии приложения.
  • Шрифт названия станции становится bold.

3. Детали маршрута

3.1. Переход к карточке

Детали маршрута открываются двумя способами:

  • По тапу на кнопку Деталей маршрута в карточке маршрута.
  • По свайпу списка маршрутов вверх (только для смартфонов в портретной ориентации).

3.2. Отображение

В карточке отображается:

  • Временной интервал маршрута:
    • время в пути;
    • время отправления;
    • время прибытия;
    • отрезки пересадок между участками маршрута.
  • Кнопка Закрыть.
  • Участки маршрута, разделенные сообщениями о пересадке.
  • Сообщение об удобных вагонах для посадки.
  • Картинка с указанием удобных вагонов.
  • Станции прибытия и отправления.
  • Пересадочные станции.
  • Промежуточные станции (если на участке больше одной промежуточной станции отображаются свернутым списком).
  • Рядом с каждой станцией, кроме промежуточных отображается кнопка «i» для перехода в карточку станции.
  • Станция, расположенная в начале каждого участка содержит название, номер линии и иконку сервиса.
  • Для каждой станции может отображаться событие.
  • При смене ориентации с портретной на ландшафтную детали маршрута отображаются в левой части экрана.

3.3. Закрытие карточки

Закрыть карточку можно также двумя способами:

  • По тапу на кнопку Закрыть.
  • Свайпом вниз.

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

4. Уведомление об ошибке

  • При отсутствии интернет-соединения появляется уведомление об ошибке.

5. Логика для альбомной ориентации

  • Все карточки и поля поиска отображаются в левой части экрана.
  • Карточки открываются на всю высоту экрана.
  • Карточки станции закрываются при взаимодействии со схемой.
  • Маршруты отображаются в списке в левой части экрана.
  • Баннер на маршруте отображается сверху списка маршрута, если доступно достаточно места
  • При смене ориентации экрана масштаб построенного маршрута не должен увеличиться или уменьшиться.
  • Список маршрутов не сворачивается при тапе на ячейку маршрута. Выбранный маршрут выделяется.
  • При построении маршрута маршрут вписывается в свободную область справа.
  • При тапе на станцию на схеме (с и без маршрута) происходит минимальный подскролл схемы, чтобы вместить пин.
  • При выборе станции по иконке i происходит минимальный подскролл схемы, чтобы вместить пин.
  • Карточки сохраняют своё положение при переходе из портретной ориентации в ландшафтную (и обратно): свёрнутые остаются свёрнутыми, открытые — открытыми, среднее положение переходит в среднее.
  • Карточка Настроек открывается по центру экрана на некоторых девайсах (iPad и некоторые iPhone)

6. Лонгтап по станции

  • При нажатии на станцию при помощи лонгтапа открывается карточка станции с кнопками «Отсюда»/«Сюда».

Лонгтап

  • Схема не должна смещаться вверх/вниз/влево/вправо при лонгтапе по станции.

7. Скролл схемы при помощи лонгтапа

Чтобы воспроизвести скролл схемы при помощи лонгтапа — сделай лонгтап по станции и удерживая палец, переводи фокус на другие станции.

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

Решение

1-2. Чек-лист мобильного приложения

Описание Статус ID баг-репорта Требование
1 Обновление с предыдущей версии приложения происходит корректно PASSED
2 В карточке маршрута отображается кнопка Детали маршрута в соответствии с макетом PASSED 1.1
3 Если текущее время превышает время окончания маршрута, то временной интервал маршрута обновляется FAILED BUG-10736 1.2
Способы выбора станции: 2.1
4 Тапом на схеме PASSED
5 По иконке i из разных карточек PASSED
6 Если из поиска выбрать станцию тапом на i и закрыть карточку, должен происходить возврат на экран поиска FAILED BUG-10738
7 Найти в поиске и нажать на станцию PASSED
Если станция выбрана, всегда выполняются следующие действия: 2.2
8 Точка станции на схеме уменьшается PASSED
9 На точке станции появляется пин цвета линии или специальный пин для закрытой станции PASSED
10 Выбранная станция сохраняется в истории: при нажатии на поле Откуда или Куда раскрывается список, содержащий станции, которые пользователь выбирал ранее FAILED BUG-10740
11 Список станций в истории должен сохраняться в новой версии приложения PASSED
12 Шрифт названия станции становится bold PASSED
Переход к карточке маршрута. Детали маршрута открываются двумя способами: 3.1
13 По тапу на кнопку Деталей маршрута в карточке маршрута PASSED
14 По свайпу списка маршрутов вверх (только для смартфонов в портретной ориентации) PASSED
15 При смене ориентации с портретной на ландшафтную детали маршрута в карточке отображаются в левой части экрана FAILED BUG-10929 3.2
Уведомление об ошибке: 4
16 При отсутствии интернет-соединения появляется уведомление об ошибке FAILED BUG-10741
Альбомная ориентация: 5
17 Все карточки и поля поиска отображаются в левой части экрана PASSED
18 При смене ориентации экрана масштаб построенного маршрута не должен увеличиться или уменьшиться FAILED BUG-10743
Лонг-тап по станции: 6
19 При нажатии на станцию при помощи лонг-тапа открывается карточка станции с кнопками «Отсюда»/«Сюда» FAILED BUG-10744
20 Схема не должна смещаться вверх/вниз/влево/вправо при лонгтапе по станции FAILED BUG-10746
Скролл схемы при помощи лонг-тапа: 7
21 При скролле лонгтапом можно выбрать нужную станцию, при этом схема остаётся неподвижной PASSED
22 При попадании на область клика точки станции или её названия на точку ставится пин, точка станции уменьшается, название станции выделяется жирным шрифтом, появляется карточка станции PASSED
23 Пин на станции и выделение станции пропадает, когда она не попадает в зону клика FAILED BUG-10747
24 Если движение заканчивается на пустой области, карточка станции закрывается PASSED

3-4. Отчёт о тестировании

Команда протестировала часть требований к мобильному приложению Яндекс.Метро.

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

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

BUG-10736: Временной интервал маршрута в карточке маршрута не обновляется, если текущее время превышает время окончания маршрута

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение, при запросе выдать все разрешения.
  3. Выбрать любой город, например: Санкт-Петербург.

Шаги воспроизведения:

  1. Тапом выбрать любую станцию, например: Парк Победы.
  2. В появившейся карточке станции нажать кнопку Отсюда.
  3. Тапом выбрать другую станцию, например: Горьковская.
  4. В появившейся карточке станции нажать кнопку Сюда.

Ожидаемый результат: появится карточка маршрута с указанием времени начала и окончания маршрута.

Фактический результат: появилась карточка маршрута с указанием времени начала и окончания маршрута.

  1. Дождаться, когда текущее время превысит время окончания маршрута.

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

Фактический результат: если текущее время превышает время окончания маршрута, временной интервал маршрута не обновляется.

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скриншот: [https://yadi.sk/i/Bj41vqKK-lpvgw]

Приоритет: средний


BUG-10738: При выборе станции в поиске тапом на i и закрытии карточки происходит возврат на главный экран

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение, при запросе выдать все разрешения.
  3. Выбрать любой город (например, Санкт-Петербург).

Шаги воспроизведения:

  1. Нажать в поле Откуда.
  2. В появившемся окне поиска набрать название станции, например: Невский проспект.
  3. Открыть карточку станции тапом на i.
  4. Закрыть карточку станции тапом на крестик.

Ожидаемый результат: если из поиска выбрать станцию тапом на i и закрыть карточку, должен происходить возврат на экран поиска.

Фактический результат: происходит возврат на главный экран.

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скринкаст: [https://yadi.sk/i/YQNOsAuS4mRW0A]

Приоритет: низкий


BUG-10740: Выбранная станция сохраняется в истории только после того, как с ней был построен маршрут

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение, при запросе выдать все разрешения.
  3. Выбрать любой город (например, Санкт-Петербург).

Шаги воспроизведения:

  1. Тапнуть на любую станцию, например: Горьковская.
  2. В появившейся карточке станции нажать кнопку Отсюда.

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

Фактический результат: в поле Откуда отображается название выбранной станции.

  1. Удалить станцию из поля Откуда тапом на крестик.
  2. Нажать в поле Откуда.

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

Фактический результат: станция в истории не сохраняется.

  1. Повторить шаги 1-4 для поля Куда.

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

Фактический результат: станция в истории не сохраняется.

  1. Построить маршрут:
  • Тапнуть на любую станцию, например: Горьковская.
  • В появившейся карточке станции нажать кнопку Отсюда.
  • Тапнуть на любую станцию, например: Парк Победы.
  • В появившейся карточке станции нажать кнопку Сюда.
  1. Закрыть появившуюся карточку маршрута.
  2. Очистить поля Отсюда и Сюда.
  3. Нажать в поле Откуда.

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

Фактический результат: станция сохраняется в истории.

  1. Закрыть окно поиска.
  2. Нажать в поле Куда.

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

Фактический результат: станция сохраняется в истории.

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скринкаст: [https://yadi.sk/i/6af9il09c7npQg]

Приоритет: средний


BUG-10741: При отсутствии интернет-соединения не появляется уведомление об ошибке

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение.
  3. Выбрать любой город (например, Санкт-Петербург).

Шаги воспроизведения:

  1. Отключить Wi-Fi и мобильный интернет.

Ожидаемый результат: при отсутствии интернет-соединения появляется уведомление об ошибке.

Фактический результат: уведомление об ошибке не появляется.

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скринкаст: [https://yadi.sk/i/WUTZOzOATAKZjA]

Приоритет: средний


BUG-10743: При смене ориентации экрана меняется масштаб построенного маршрута

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение.
  3. Выбрать любой город (например, Санкт-Петербург).

Шаги воспроизведения:

  1. В портретной ориентации экрана построить маршрут:
  • Тапнуть на любую станцию, например: Горьковская.
  • В появившейся карточке станции нажать кнопку Отсюда.
  • Тапнуть на любую станцию, например: Парк Победы.
  • В появившейся карточке станции нажать кнопку Сюда.
  1. Сменить ориентацию экрана на альбомную.
  2. Сменить ориентацию экрана на портретную.

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

Фактический результат: при смене ориентации экрана с портретной на альбомную масштаб построенного маршрута немного уменьшается, а с альбомной на портретную - немного увеличивается.

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скринкаст: [https://yadi.sk/i/lsnfIF5-T2h3yA]

Приоритет: низкий


BUG-10744: При лонгтапе на станцию карточка станции иногда открывается некорректно

Описание: при нажатии на станцию лонгтапом открытие карточки станции происходит по-разному: она может открыться корректно; может открыться частично (видно только название станции, номер и название линии); может открыться частично, оставаться открытой при удержании пальца на станции и закрыться, если палец отпустить. Иногда фокус с выбранной станции перескакивает на соседнюю/несколько соседних и открывается карточка соседней станции.

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение.
  3. Выбрать любой город (например, Санкт-Петербург).

Шаги воспроизведения:

  1. Лонгтапом выбирать разные станции на схеме.

Ожидаемый результат: при нажатии на станцию при помощи лонгтапа открывается карточка станции с кнопками «Отсюда»/«Сюда»

Фактический результат: при лонгтапе на станцию карточка станции иногда открывается некорректно

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скринкаст: [https://yadi.sk/i/5oA-6pbNXQx2ZQ]

Приоритет: критичный


BUG-10746: При лонгтапе по станции схема иногда смещается

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение.
  3. Выбрать любой город (например, Санкт-Петербург).

Шаги воспроизведения:

  1. Лонгтапом выбирать разные станции на схеме.

Ожидаемый результат: схема не должна смещаться вверх/вниз/влево/вправо при лонгтапе по станции.

Фактический результат: иногда схема смещается.

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скринкаст: [https://yadi.sk/i/ymC79S_BpaLkdQ]

Приоритет: низкий


BUG-10747: При скролле схемы лонгтапом пин на станции и выделение станции не пропадает, когда она не попадает в зону клика

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

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение.
  3. Выбрать любой город (например, Санкт-Петербург).

Шаги воспроизведения:

  1. Выполнить скролл схемы лонгтапом.

Ожидаемый результат: пин на станции и выделение станции пропадает, когда она не попадает в зону клика

Фактический результат: пин на станции и выделение станции не пропадает, когда она не попадает в зону клика

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скринкаст: [https://yadi.sk/i/hqgm5pfb27mdRg]

Приоритет: низкий


BUG-10929: При смене ориентации с портретной на ландшафтную карточка деталей маршрута закрывается

Предусловия:

  1. Скачать версию Яндекс.Метро по ссылке [https://code.s3.yandex.net/qa/files/yandexmetro-android-v3.6.apk].
  2. Установить и запустить приложение.
  3. Выбрать любой город (например, Санкт-Петербург).

Шаги воспроизведения:

  1. В портретной ориентации экрана построить маршрут:
  • Тапнуть на любую станцию, например: Горьковская.
  • В появившейся карточке станции нажать кнопку Отсюда.
  • Тапнуть на любую станцию, например: Парк Победы.
  • В появившейся карточке станции нажать кнопку Сюда.
  1. Открыть карточку деталей маршрута.
  2. Сменить ориентацию экрана на ландшафтную.

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

Фактический результат: при смене ориентации с портретной на ландшафтную карточка деталей маршрута закрывается.

Окружение:

Xiaomi Redmi 4X
Android 7.1.2
Яндекс.Метро 3.6

Скринкаст: [https://yadi.sk/i/_IELHx4FzryPEA]

Приоритет: средний


Наверх

Задание

  1. Проанализируй требования к API бэкенда Яндекс.Метро.

  2. Протестируй API бэкенда Яндекс.Метро:

    2.1. по чек-листу из шаблона;

    2.2. по инструкции.

Инструкция для тестирования API
  • Зайди в postman.
  • Получи список схем из запроса «/list».
  • Составь таблицу в третьей вкладке шаблона, сопоставив каждому городу его id.
  • Дополни чек-лист для запроса «/events». Убедись, что для каждого id возвращается ответ согласно требованиям.
  • Проверь корректность работы запроса «/events».

В процессе тестирования отмечай результаты выполнения теста: PASSED или FAILED. Если тест со статусом FAILED, заведи баг-репорт в Яндекс.Трекере в очереди BUG и вписывай ID в соответствующую таблицу результатов.

  1. Напиши отчет о тестировании. Что можешь рассказать команде о статусе протестированной части продукта?
Требования к API Метро

Метро использует API "metrokit-service". Это API для библиотеки MetroKit.

Функциональность metrokit-service включает:

  • Доступ к полному списку схем — GET /v1/list/
  • Доступ к cписку актуальных событий для выбранной схемы — GET /v1/events/

GET /v1/list/

GET на URI: [https://metrokit-service.maps.yandex.net/v1/list]

Ответ — полный список схем по всем городам. Ответ всегда в формате JSON.

Пример структуры ответа Москвы.

        {
            "id": "sc34974011",
            "name": {
                "en": "Moscow",
                "ru": "Москва",
                "tr": "Moskova",
                "uk": "Москва"
            },
            "size": {
                "packed": 369292,
                "unpacked": 3001856
            },
            "tags": [
                "published"
            ],
            "aliases": [
                "moscow"
            ],
            "logoUrl": "https://avatars.mds.yandex.net/get-bunker/128809/6f088274a46aee3df308423d222eb36906825cb7/orig",
            "version": "2e5e649",
            "geoRegion": {
                "delta": {
                    "lat": 0.32158,
                    "lon": 0.439453
                },
                "center": {
                    "lat": 55.743347,
                    "lon": 37.617188
                }
            },
            "countryCode": "RU",
            "defaultAlias": "moscow"
        }

GET /v1/events/

GET на URI: [https://metrokit-service.maps.yandex.net/v1/events]

Параметр: [scheme_id=<id>]

Пример: [https://metrokit-service.maps.yandex.net/v1/events?scheme_id=sc34974011]

Ответ — список событий для выбранной схемы. Ответ всегда в формате JSON.

Если событие присутствует, ответ имеет такую структуру. Например, для Москвы с id = sc34974011:

    "events": {
        "type": "IndexedCollection",
        "items": [
            {
                "id": "ev-76c50f2d-9c3d-4835-ac73-a0544b1b308e",
                "schedule": {
                    "to": "2019-10-25T23:10:00+03:00",
                    "from": "2019-03-30T01:00:00+03:00",
                    "type": "Interval"
                },
                "title": {
                    "en": "No trains to Kakhovskaya station",
                    "ru": "Поезда не ходят до «Каховской»"
                },
                "description": {
                    "en": "Station closure",
                    "ru": "Закрытие станции"
                },
                "changeIds": [
                    "ch-feed3c7d-d35e-4481-87a4-7c141e1c96c0"
                ]
            }
  }

Если события отсутствуют, список может быть пустым, но должен возвращаться в формате JSON. Например, для Хельсинки с id = sc38955480:

{
    "events": {
        "type": "IndexedCollection",
        "items": []
    },
    "changes": {
        "type": "IndexedCollection",
        "items": []
    }
}

Решение

1. Данные схем
Город ID схемы
Новосибирск sc02877545
Москва sc34974011
Киев sc21078879
Сан-Франциско sc99912
Алматы sc37730841
Хельсинки sc38955480
Лиссабон sc39559734
Днепр sc47063979
Дубай sc19930717
Бухарест sc66937172
Афины sc92836217
София sc29665623
Казань sc63288776
Минск sc31709615
Вена sc52507030
Харьков sc12039691
Милан sc999
Будапешт sc04704892
Ташкент sc19351236
Тбилиси sc46903964
Варшава sc12943371
Волгоград sc03517743
Санкт-Петербург sc60983525
Ереван sc95957238
Прага sc20559874
Екатеринбург sc58473698
Баку sc54283234
Самара sc33333931
Стамбул sc97451070
Нижний Новгород sc77792237
Рим sc68078330

2. Чек-лист API

Описание Статус ID баг-репорта
для запроса "/list"
1 ответ на запрос возвращает 200 ОК PASSED
2 ответ на запрос в формате JSON PASSED
3 структура ответа для Минска совпадает со структурой в требованиях PASSED
4 структура ответа для Афин совпадает со структурой в требованиях PASSED
5 структура ответа для Киева совпадает со структурой в требованиях PASSED
6 структура ответа для Казани совпадает со структурой в требованиях PASSED
7 структура ответа для Рима совпадает со структурой в требованиях PASSED
для запроса "/events"
8 структура ответа для id=sc02877545 совпадает со структурой в требованиях PASSED
9 структура ответа для id=sc34974011 совпадает со структурой в требованиях PASSED
10 структура ответа для id=sc21078879 совпадает со структурой в требованиях PASSED
11 структура ответа для id=sc99912 совпадает со структурой в требованиях FAILED BUG-10766
12 структура ответа для id=sc37730841 совпадает со структурой в требованиях PASSED
13 структура ответа для id=sc38955480 совпадает со структурой в требованиях PASSED
14 структура ответа для id=sc39559734 совпадает со структурой в требованиях PASSED
15 структура ответа для id=sc47063979 совпадает со структурой в требованиях PASSED
16 структура ответа для id=sc19930717 совпадает со структурой в требованиях PASSED
17 структура ответа для id=sc66937172 совпадает со структурой в требованиях FAILED BUG-10769
18 структура ответа для id=sc92836217 совпадает со структурой в требованиях FAILED BUG-10770
19 структура ответа для id=sc29665623 совпадает со структурой в требованиях FAILED BUG-10771
20 структура ответа для id=sc63288776 совпадает со структурой в требованиях PASSED
21 структура ответа для id=sc31709615 совпадает со структурой в требованиях PASSED
22 структура ответа для id=sc52507030 совпадает со структурой в требованиях FAILED BUG-10773
23 структура ответа для id=sc12039691 совпадает со структурой в требованиях PASSED
24 структура ответа для id=sc999 совпадает со структурой в требованиях FAILED BUG-10775
25 структура ответа для id=sc04704892 совпадает со структурой в требованиях PASSED
26 структура ответа для id=sc19351236 совпадает со структурой в требованиях PASSED
27 структура ответа для id=sc46903964 совпадает со структурой в требованиях PASSED
28 структура ответа для id=sc12943371 совпадает со структурой в требованиях PASSED
29 структура ответа для id=sc03517743 совпадает со структурой в требованиях PASSED
30 структура ответа для id=sc60983525 совпадает со структурой в требованиях PASSED
31 структура ответа для id=sc95957238 совпадает со структурой в требованиях PASSED
32 структура ответа для id=sc20559874 совпадает со структурой в требованиях FAILED BUG-10776
33 структура ответа для id=sc58473698 совпадает со структурой в требованиях PASSED
34 структура ответа для id=sc54283234 совпадает со структурой в требованиях PASSED
35 структура ответа для id=sc33333931 совпадает со структурой в требованиях PASSED
36 структура ответа для id=sc97451070 совпадает со структурой в требованиях PASSED
37 структура ответа для id=sc77792237 совпадает со структурой в требованиях PASSED
38 структура ответа для id=sc68078330 совпадает со структурой в требованиях PASSED

3. Отчёт о тестировании

Команда протестировала API бэкенда Яндекс.Метро.

Мы проверили структуру ответа на запрос /list для некоторых городов и структуру ответа на запрос /events для всех схем городов.

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

BUG-10766: При запросе списка событий /events для схемы с id=sc99912 структура ответа не совпадает с требованиями

Шаги воспроизведения:

  1. В Postman создать и отправить GET-запрос на URI: [https://metrokit-service.maps.yandex.net/v1/events?scheme_id=sc99912].
  2. Посмотреть ответ - список событий для схемы с id=sc99912 (Сан-Франциско).

Ожидаемый результат:

  1. Статус ответа: 200 OK.
  2. Ответ возвращается в формате JSON, структура ответа для id=sc99912 совпадает со структурой в требованиях. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": [
            {
                "id": "ev-76c50f2d-9c3d-4835-ac73-a0544b1b308e",
                "schedule": {
                    "to": "2019-10-25T23:10:00+03:00",
                    "from": "2019-03-30T01:00:00+03:00",
                    "type": "Interval"
                },
                "title": {
                    "en": "No trains to Kakhovskaya station",
                    "ru": "Поезда не ходят до «Каховской»"
                },
                "description": {
                    "en": "Station closure",
                    "ru": "Закрытие станции"
                },
                "changeIds": [
                    "ch-feed3c7d-d35e-4481-87a4-7c141e1c96c0"
                ]
            }
  } 
  1. Если события отсутствуют, список может быть пустым, но должен возвращаться в формате JSON. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": []
    },
    "changes": {
        "type": "IndexedCollection",
        "items": []
    }
}

Фактический результат:

  1. Статус ответа: 404 Not Found.
  2. Структура ответа не совпадает с требованиями: Body ответа пустое.
  3. Ответ возвращается в формате Text.

Окружение:

macOs 10.15.2
Postman 7.22.1
API metrokit-service

Скриншот: [https://yadi.sk/i/Q39JhIx4tKU-YQ]

Приоритет: средний


BUG-10769: При запросе списка событий /events для схемы с id=sc66937172 структура ответа не совпадает с требованиями

Шаги воспроизведения:

  1. В Postman создать и отправить GET-запрос на URI: [https://metrokit-service.maps.yandex.net/v1/events?scheme_id=sc66937172].
  2. Посмотреть ответ - список событий для схемы с id=sc66937172 (Бухарест).

Ожидаемый результат:

  1. Статус ответа: 200 OK.
  2. Ответ возвращается в формате JSON, структура ответа для id=sc66937172 совпадает со структурой в требованиях. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": [
            {
                "id": "ev-76c50f2d-9c3d-4835-ac73-a0544b1b308e",
                "schedule": {
                    "to": "2019-10-25T23:10:00+03:00",
                    "from": "2019-03-30T01:00:00+03:00",
                    "type": "Interval"
                },
                "title": {
                    "en": "No trains to Kakhovskaya station",
                    "ru": "Поезда не ходят до «Каховской»"
                },
                "description": {
                    "en": "Station closure",
                    "ru": "Закрытие станции"
                },
                "changeIds": [
                    "ch-feed3c7d-d35e-4481-87a4-7c141e1c96c0"
                ]
            }
  } 
  1. Если события отсутствуют, список может быть пустым, но должен возвращаться в формате JSON. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": []
    },
    "changes": {
        "type": "IndexedCollection",
        "items": []
    }
}

Фактический результат:

  1. Статус ответа: 404 Not Found.
  2. Структура ответа не совпадает с требованиями: Body ответа пустое.
  3. Ответ возвращается в формате Text.

Окружение:

macOs 10.15.2
Postman 7.22.1
API metrokit-service

Скриншот: [https://yadi.sk/i/oDdjegyhnIq8Tg]

Приоритет: средний


BUG-10770: При запросе списка событий /events для схемы с id=sc92836217 структура ответа не совпадает с требованиями

Шаги воспроизведения:

  1. В Postman создать и отправить GET-запрос на URI: [https://metrokit-service.maps.yandex.net/v1/events?scheme_id=sc92836217].
  2. Посмотреть ответ - список событий для схемы с id=sc92836217 (Афины).

Ожидаемый результат:

  1. Статус ответа: 200 OK.
  2. Ответ возвращается в формате JSON, структура ответа для id=sc92836217 совпадает со структурой в требованиях. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": [
            {
                "id": "ev-76c50f2d-9c3d-4835-ac73-a0544b1b308e",
                "schedule": {
                    "to": "2019-10-25T23:10:00+03:00",
                    "from": "2019-03-30T01:00:00+03:00",
                    "type": "Interval"
                },
                "title": {
                    "en": "No trains to Kakhovskaya station",
                    "ru": "Поезда не ходят до «Каховской»"
                },
                "description": {
                    "en": "Station closure",
                    "ru": "Закрытие станции"
                },
                "changeIds": [
                    "ch-feed3c7d-d35e-4481-87a4-7c141e1c96c0"
                ]
            }
  } 
  1. Если события отсутствуют, список может быть пустым, но должен возвращаться в формате JSON. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": []
    },
    "changes": {
        "type": "IndexedCollection",
        "items": []
    }
}

Фактический результат:

  1. Статус ответа: 404 Not Found.
  2. Структура ответа не совпадает с требованиями: Body ответа пустое.
  3. Ответ возвращается в формате Text.

Окружение:

macOs 10.15.2
Postman 7.22.1
API metrokit-service

Скриншот: [https://yadi.sk/i/NgCePxnySF7-fg]

Приоритет: средний


BUG-10771: При запросе списка событий /events для схемы с id=sc29665623 структура ответа не совпадает с требованиями

Шаги воспроизведения:

  1. В Postman создать и отправить GET-запрос на URI: [https://metrokit-service.maps.yandex.net/v1/events?scheme_id=sc29665623].
  2. Посмотреть ответ - список событий для схемы с id=sc29665623 (София).

Ожидаемый результат:

  1. Статус ответа: 200 OK.
  2. Ответ возвращается в формате JSON, структура ответа для id=sc29665623 совпадает со структурой в требованиях. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": [
            {
                "id": "ev-76c50f2d-9c3d-4835-ac73-a0544b1b308e",
                "schedule": {
                    "to": "2019-10-25T23:10:00+03:00",
                    "from": "2019-03-30T01:00:00+03:00",
                    "type": "Interval"
                },
                "title": {
                    "en": "No trains to Kakhovskaya station",
                    "ru": "Поезда не ходят до «Каховской»"
                },
                "description": {
                    "en": "Station closure",
                    "ru": "Закрытие станции"
                },
                "changeIds": [
                    "ch-feed3c7d-d35e-4481-87a4-7c141e1c96c0"
                ]
            }
  } 
  1. Если события отсутствуют, список может быть пустым, но должен возвращаться в формате JSON. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": []
    },
    "changes": {
        "type": "IndexedCollection",
        "items": []
    }
}

Фактический результат:

  1. Статус ответа: 404 Not Found.
  2. Структура ответа не совпадает с требованиями: Body ответа пустое.
  3. Ответ возвращается в формате Text.

Окружение:

macOs 10.15.2
Postman 7.22.1
API metrokit-service

Скриншот: [https://yadi.sk/i/8es5sVV7KTEquw]

Приоритет: средний


BUG-10773: При запросе списка событий /events для схемы с id=sc52507030 структура ответа не совпадает с требованиями

Шаги воспроизведения:

  1. В Postman создать и отправить GET-запрос на URI: [https://metrokit-service.maps.yandex.net/v1/events?scheme_id=sc52507030].
  2. Посмотреть ответ - список событий для схемы с id=sc52507030 (Вена).

Ожидаемый результат:

  1. Статус ответа: 200 OK.
  2. Ответ возвращается в формате JSON, структура ответа для id=sc52507030 совпадает со структурой в требованиях. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": [
            {
                "id": "ev-76c50f2d-9c3d-4835-ac73-a0544b1b308e",
                "schedule": {
                    "to": "2019-10-25T23:10:00+03:00",
                    "from": "2019-03-30T01:00:00+03:00",
                    "type": "Interval"
                },
                "title": {
                    "en": "No trains to Kakhovskaya station",
                    "ru": "Поезда не ходят до «Каховской»"
                },
                "description": {
                    "en": "Station closure",
                    "ru": "Закрытие станции"
                },
                "changeIds": [
                    "ch-feed3c7d-d35e-4481-87a4-7c141e1c96c0"
                ]
            }
  } 
  1. Если события отсутствуют, список может быть пустым, но должен возвращаться в формате JSON. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": []
    },
    "changes": {
        "type": "IndexedCollection",
        "items": []
    }
}

Фактический результат:

  1. Статус ответа: 404 Not Found.
  2. Структура ответа не совпадает с требованиями: Body ответа пустое.
  3. Ответ возвращается в формате Text.

Окружение:

macOs 10.15.2
Postman 7.22.1
API metrokit-service

Скриншот: [https://yadi.sk/i/qm7fZ7gRUBH_1A]

Приоритет: средний


BUG-10775: При запросе списка событий /events для схемы с id=sc999 структура ответа не совпадает с требованиями

Шаги воспроизведения:

  1. В Postman создать и отправить GET-запрос на URI: [https://metrokit-service.maps.yandex.net/v1/events?scheme_id=sc999].
  2. Посмотреть ответ - список событий для схемы с id=sc999 (Милан).

Ожидаемый результат:

  1. Статус ответа: 200 OK.
  2. Ответ возвращается в формате JSON, структура ответа для id=sc999 совпадает со структурой в требованиях. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": [
            {
                "id": "ev-76c50f2d-9c3d-4835-ac73-a0544b1b308e",
                "schedule": {
                    "to": "2019-10-25T23:10:00+03:00",
                    "from": "2019-03-30T01:00:00+03:00",
                    "type": "Interval"
                },
                "title": {
                    "en": "No trains to Kakhovskaya station",
                    "ru": "Поезда не ходят до «Каховской»"
                },
                "description": {
                    "en": "Station closure",
                    "ru": "Закрытие станции"
                },
                "changeIds": [
                    "ch-feed3c7d-d35e-4481-87a4-7c141e1c96c0"
                ]
            }
  } 
  1. Если события отсутствуют, список может быть пустым, но должен возвращаться в формате JSON. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": []
    },
    "changes": {
        "type": "IndexedCollection",
        "items": []
    }
}

Фактический результат:

  1. Статус ответа: 404 Not Found.
  2. Структура ответа не совпадает с требованиями: Body ответа пустое.
  3. Ответ возвращается в формате Text.

Окружение:

macOs 10.15.2
Postman 7.22.1
API metrokit-service

Скриншот: [https://yadi.sk/i/CTRfVyRBISXlwA]

Приоритет: средний


BUG-10776: При запросе списка событий /events для схемы с id=sc20559874 структура ответа не совпадает с требованиями

Шаги воспроизведения:

  1. В Postman создать и отправить GET-запрос на URI: [https://metrokit-service.maps.yandex.net/v1/events?scheme_id=sc20559874].
  2. Посмотреть ответ - список событий для схемы с id=sc20559874 (Прага).

Ожидаемый результат:

  1. Статус ответа: 200 OK.
  2. Ответ возвращается в формате JSON, структура ответа для id=sc20559874 совпадает со структурой в требованиях. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": [
            {
                "id": "ev-76c50f2d-9c3d-4835-ac73-a0544b1b308e",
                "schedule": {
                    "to": "2019-10-25T23:10:00+03:00",
                    "from": "2019-03-30T01:00:00+03:00",
                    "type": "Interval"
                },
                "title": {
                    "en": "No trains to Kakhovskaya station",
                    "ru": "Поезда не ходят до «Каховской»"
                },
                "description": {
                    "en": "Station closure",
                    "ru": "Закрытие станции"
                },
                "changeIds": [
                    "ch-feed3c7d-d35e-4481-87a4-7c141e1c96c0"
                ]
            }
  } 
  1. Если события отсутствуют, список может быть пустым, но должен возвращаться в формате JSON. Пример структуры ответа:
{
    "events": {
        "type": "IndexedCollection",
        "items": []
    },
    "changes": {
        "type": "IndexedCollection",
        "items": []
    }
}

Фактический результат:

  1. Статус ответа: 404 Not Found.
  2. Структура ответа не совпадает с требованиями: Body ответа пустое.
  3. Ответ возвращается в формате Text.

Окружение:

macOs 10.15.2
Postman 7.22.1
API metrokit-service

Скриншот: [https://yadi.sk/i/_IBj6x2VK8hDTw]

Приоритет: средний


Наверх

Задание 1

От разработчиков поступила задача: нужно выяснить, какие запросы шли на IP-адреса. IP-адрес состоит из четырёх чисел, они разделены точками. Тебе нужны адреса, которые начинаются с "233.201.".

Логи лежат на удалённом сервере по адресу logs/2019/12. День, когда случилась ошибка, неизвестен.

Твоя задача — узнать, какие запросы были отправлены.

В ответе приложи:

  1. Команду, которой тебе удалось получить нужные логи.
  2. Подходящие строки, например:
184.79.247.161 - - [30/12/2019:21:38:13 +0000] "PUT /alerts HTTP/1.1" 400 3557

Решение

  1. Команда получения логов:
grep ^233.201 /logs/2019/12/*.txt
  1. Логи:
233.201.188.154 - - [18/12/2019:21:46:01 +0000] "DELETE /events HTTP/1.1" 403 3971
233.201.182.9 - - [21/12/2019:21:56:20 +0000] "PATCH /users HTTP/1.1" 400 4118

Наверх

Задание 2

В системе обнаружен баг. Он проявлялся 30.12.2019 и 31.12.2019 с 21:30:00 до 21:39:59. При этом появлялись ошибки с номерами 400 и 500. Твоя задача — сохранить в отдельный файл логи, которые были записаны в этот период. Затем эти логи надо разложить по отдельным файлам: логи с одинаковой ошибкой положи в один файл.

Как это сделать:

  1. В домашней директории на удалённом сервере создай директорию bug1.
  2. Все запросы, которые произошли в указанный период, положи в файл main.txt.
  3. Внутри директории bug1 создай директорию events.
  4. Внутри директории events создай файлы для ошибок с номерами 400 и 500. Назови эти файлы 400.txt и 500.txt соответственно. В них выдели логи с соответствующей ошибкой из файла main.txt.

В ответе приложи:

  1. Команды, которые создают директории bug1 и events.
  2. Команду, которой ты выбираешь запросы за указанный период. Это те запросы, которыми ты отбираешь логи в файл main.txt.
  3. Команды, которыми ты кладёшь логи в файлы 400.txt и 500.txt из main.txt.
  4. Тексты файлов 400.txt и 500.txt.
База данных о поездках такси в Чикаго

Таблица neighborhoods — информация о районах города:

  • neighborhood_id — код района;
  • name — название района. Таблица cabs — информация о такси:
  • cab_id — код автомобиля;
  • vehicle_id — технический идентификатор автомобиля;
  • company_name — компания, которой принадлежит автомобиль. Таблица trips — информация о поездках:
  • trip_id — код поездки;
  • cab_id — код автомобиля, на котором была совершена поездка;
  • start_ts — дата и время начала поездки (время округлено до часа);
  • end_ts — дата и время окончания поездки (время округлено до часа);
  • duration_seconds — длительность поездки в секундах;
  • distance_miles — дальность поездки в милях;
  • pickup_location_id — код района города, в котором была начата поездка;
  • dropoff_location_id — код района города, в котором завершилась поездка. Таблица weather_records — информация о погоде:
  • record_id — код записи погодных наблюдений;
  • ts — дата и время наблюдения (время округлено до часа);
  • temperature — температура на момент наблюдения;
  • description — краткое описание погодных условий. Например, 'light rain' или 'scattered clouds'.

Схема таблиц

Схема таблиц БД


В базе данных нет прямой связи между таблицами trips и weather_records. Связать эти таблицы можно по времени начала поездки (trips.start_ts) и моменту погодных наблюдений (weather_records.ts).

Решение

  1. Команды создания директорий bug1 и events:
mkdir bug1
mkdir events
  1. Команда выбора запросов за указанный период:
grep "21:3" ~/logs/2019/12/apache_2019-12-30.txt > ~/bug1/main.txt
grep "21:3" ~/logs/2019/12/apache_2019-12-31.txt >> ~/bug1/main.txt
  1. Команды сохранения логов в файлы 400.txt и 500.txt из main.txt:
grep -w "400" ~/bug1/main.txt > ~/bug1/events/400.txt
grep -w "500" ~/bug1/main.txt > ~/bug1/events/500.txt
4. 400.txt
80.57.170.51 - - [30/12/2019:21:35:12 +0000] "DELETE /users HTTP/1.1" 400 3623
204.235.176.118 - - [30/12/2019:21:35:13 +0000] "POST /users HTTP/1.1" 400 4704
82.95.203.67 - - [30/12/2019:21:35:19 +0000] "DELETE /lists HTTP/1.1" 400 3737
155.242.215.46 - - [30/12/2019:21:35:38 +0000] "POST /playbooks HTTP/1.1" 400 4450
189.176.85.0 - - [30/12/2019:21:35:39 +0000] "PATCH /alerts HTTP/1.1" 400 2732
13.108.71.71 - - [30/12/2019:21:35:43 +0000] "PATCH /events HTTP/1.1" 400 3410
195.213.133.182 - - [30/12/2019:21:35:46 +0000] "PUT /customers HTTP/1.1" 400 3085
235.243.133.78 - - [30/12/2019:21:35:47 +0000] "PATCH /customers HTTP/1.1" 400 3264
192.57.115.49 - - [30/12/2019:21:35:55 +0000] "POST /parsers HTTP/1.1" 400 2457
71.0.49.244 - - [30/12/2019:21:35:55 +0000] "PUT /collectors HTTP/1.1" 400 2785
224.159.206.126 - - [30/12/2019:21:36:02 +0000] "DELETE /customers HTTP/1.1" 400 4569
131.35.106.246 - - [30/12/2019:21:36:04 +0000] "DELETE /lists HTTP/1.1" 400 2578
216.24.42.208 - - [30/12/2019:21:36:06 +0000] "GET /parsers HTTP/1.1" 400 4597
123.53.150.160 - - [30/12/2019:21:37:19 +0000] "PATCH /events HTTP/1.1" 400 4379
61.129.127.103 - - [30/12/2019:21:37:32 +0000] "GET /lists HTTP/1.1" 400 2575
90.216.4.78 - - [30/12/2019:21:37:34 +0000] "PATCH /lists HTTP/1.1" 400 3899
204.250.214.208 - - [30/12/2019:21:37:36 +0000] "PATCH /parsers HTTP/1.1" 400 4742
79.214.240.98 - - [30/12/2019:21:37:37 +0000] "POST /fieldsets HTTP/1.1" 400 4441
65.47.42.12 - - [30/12/2019:21:37:39 +0000] "PATCH /customers HTTP/1.1" 400 2500
251.118.141.34 - - [30/12/2019:21:37:41 +0000] "POST /customers HTTP/1.1" 400 3519
205.20.166.196 - - [30/12/2019:21:37:51 +0000] "POST /users HTTP/1.1" 400 4032
156.217.3.46 - - [30/12/2019:21:37:52 +0000] "PATCH /parsers HTTP/1.1" 400 2020
48.240.198.167 - - [30/12/2019:21:37:57 +0000] "PATCH /playbooks HTTP/1.1" 400 4100
101.255.159.211 - - [30/12/2019:21:37:59 +0000] "GET /auth HTTP/1.1" 400 2324
80.76.98.203 - - [30/12/2019:21:38:00 +0000] "POST /playbooks HTTP/1.1" 400 3045
85.64.63.255 - - [30/12/2019:21:38:13 +0000] "PATCH /collectors HTTP/1.1" 400 2291
184.79.247.161 - - [30/12/2019:21:38:13 +0000] "PUT /alerts HTTP/1.1" 400 3557
93.2.134.22 - - [30/12/2019:21:39:39 +0000] "DELETE /alerts HTTP/1.1" 400 3701
86.34.86.182 - - [31/12/2019:21:35:10 +0000] "POST /auth HTTP/1.1" 400 3626
167.37.16.117 - - [31/12/2019:21:35:17 +0000] "PATCH /customers HTTP/1.1" 400 3294
199.128.92.19 - - [31/12/2019:21:35:43 +0000] "PUT /users HTTP/1.1" 400 4180
162.152.99.143 - - [31/12/2019:21:35:59 +0000] "PUT /users HTTP/1.1" 400 4606
83.115.59.224 - - [31/12/2019:21:37:26 +0000] "GET /alerts HTTP/1.1" 400 3489
194.10.97.226 - - [31/12/2019:21:37:31 +0000] "DELETE /lists HTTP/1.1" 400 2447
180.99.214.40 - - [31/12/2019:21:37:44 +0000] "DELETE /alerts HTTP/1.1" 400 2077
154.152.205.4 - - [31/12/2019:21:37:50 +0000] "GET /playbooks HTTP/1.1" 400 3324
197.82.125.54 - - [31/12/2019:21:37:52 +0000] "PUT /fieldsets HTTP/1.1" 400 4365
115.89.87.219 - - [31/12/2019:21:38:06 +0000] "PUT /playbooks HTTP/1.1" 400 2589
100.77.15.14 - - [31/12/2019:21:38:07 +0000] "GET /fieldsets HTTP/1.1" 400 4911
22.33.159.242 - - [31/12/2019:21:38:07 +0000] "GET /playbooks HTTP/1.1" 400 3955
149.148.229.11 - - [31/12/2019:21:39:16 +0000] "GET /users HTTP/1.1" 400 2071
236.107.64.192 - - [31/12/2019:21:39:17 +0000] "PATCH /users HTTP/1.1" 400 2791
24.156.105.39 - - [31/12/2019:21:39:23 +0000] "GET /lists HTTP/1.1" 400 2902
193.50.164.254 - - [31/12/2019:21:39:23 +0000] "PUT /playbooks HTTP/1.1" 400 3296
18.123.104.91 - - [31/12/2019:21:39:52 +0000] "GET /collectors HTTP/1.1" 400 4372
234.218.148.4 - - [31/12/2019:21:39:54 +0000] "PUT /users HTTP/1.1" 400 2509

5. 500.txt
64.250.112.189 - - [30/12/2019:21:35:13 +0000] "PUT /parsers HTTP/1.1" 500 4639
193.253.101.180 - - [30/12/2019:21:35:31 +0000] "PATCH /alerts HTTP/1.1" 500 2944
197.106.117.194 - - [30/12/2019:21:35:31 +0000] "PATCH /parsers HTTP/1.1" 500 3519
247.124.71.67 - - [30/12/2019:21:35:45 +0000] "PUT /alerts HTTP/1.1" 500 2746
62.88.204.119 - - [30/12/2019:21:35:51 +0000] "PUT /auth HTTP/1.1" 500 2666
125.156.142.26 - - [30/12/2019:21:36:01 +0000] "PATCH /events HTTP/1.1" 500 3460
144.170.212.70 - - [30/12/2019:21:36:04 +0000] "DELETE /parsers HTTP/1.1" 500 2599
59.39.200.252 - - [30/12/2019:21:36:05 +0000] "GET /alerts HTTP/1.1" 500 2650
150.136.200.100 - - [30/12/2019:21:37:24 +0000] "POST /lists HTTP/1.1" 500 2684
84.81.25.45 - - [30/12/2019:21:37:25 +0000] "POST /auth HTTP/1.1" 500 2052
30.222.160.141 - - [30/12/2019:21:37:30 +0000] "PATCH /parsers HTTP/1.1" 500 2017
117.87.158.36 - - [30/12/2019:21:37:34 +0000] "POST /fieldsets HTTP/1.1" 500 4056
212.153.128.212 - - [30/12/2019:21:37:42 +0000] "PUT /fieldsets HTTP/1.1" 500 3259
58.188.83.217 - - [30/12/2019:21:37:46 +0000] "POST /playbooks HTTP/1.1" 500 3947
193.123.131.146 - - [30/12/2019:21:37:47 +0000] "PUT /lists HTTP/1.1" 500 3902
182.7.179.91 - - [30/12/2019:21:37:48 +0000] "GET /users HTTP/1.1" 500 2950
10.25.168.164 - - [30/12/2019:21:38:05 +0000] "PATCH /playbooks HTTP/1.1" 500 3858
215.201.210.173 - - [30/12/2019:21:38:11 +0000] "PATCH /customers HTTP/1.1" 500 3277
179.241.103.167 - - [30/12/2019:21:39:23 +0000] "POST /lists HTTP/1.1" 500 3669
147.188.170.252 - - [30/12/2019:21:39:33 +0000] "POST /fieldsets HTTP/1.1" 500 3313
1.249.123.189 - - [30/12/2019:21:39:36 +0000] "PATCH /alerts HTTP/1.1" 500 4734
124.114.135.105 - - [30/12/2019:21:39:41 +0000] "PATCH /customers HTTP/1.1" 500 3348
35.215.100.202 - - [30/12/2019:21:39:43 +0000] "PUT /alerts HTTP/1.1" 500 4345
86.222.23.128 - - [30/12/2019:21:39:44 +0000] "PATCH /alerts HTTP/1.1" 500 2230
20.161.75.95 - - [30/12/2019:21:39:48 +0000] "DELETE /users HTTP/1.1" 500 2412
196.18.151.117 - - [30/12/2019:21:39:55 +0000] "PUT /events HTTP/1.1" 500 4439
77.101.138.151 - - [30/12/2019:21:39:57 +0000] "PUT /lists HTTP/1.1" 500 2194
208.205.133.127 - - [31/12/2019:21:35:17 +0000] "DELETE /alerts HTTP/1.1" 500 4561
20.145.255.91 - - [31/12/2019:21:35:30 +0000] "GET /parsers HTTP/1.1" 500 3051
91.66.134.13 - - [31/12/2019:21:35:53 +0000] "POST /lists HTTP/1.1" 500 3319
31.88.211.206 - - [31/12/2019:21:35:57 +0000] "DELETE /events HTTP/1.1" 500 2325
171.37.114.114 - - [31/12/2019:21:37:39 +0000] "DELETE /fieldsets HTTP/1.1" 500 3253
223.157.242.167 - - [31/12/2019:21:37:59 +0000] "POST /users HTTP/1.1" 500 2283
98.181.102.34 - - [31/12/2019:21:38:06 +0000] "PATCH /fieldsets HTTP/1.1" 500 4672
254.74.22.79 - - [31/12/2019:21:38:06 +0000] "PUT /lists HTTP/1.1" 500 2259
103.46.238.3 - - [31/12/2019:21:38:09 +0000] "PUT /lists HTTP/1.1" 500 3992
41.62.205.107 - - [31/12/2019:21:39:20 +0000] "PATCH /alerts HTTP/1.1" 500 3631
22.53.105.197 - - [31/12/2019:21:39:31 +0000] "DELETE /collectors HTTP/1.1" 500 4202
178.22.133.42 - - [31/12/2019:21:39:43 +0000] "PUT /alerts HTTP/1.1" 500 4648
102.247.13.50 - - [31/12/2019:21:39:55 +0000] "PATCH /auth HTTP/1.1" 500 3736
171.37.114.114 - - [31/12/2019:21:37:39 +0000] "DELETE /fieldsets HTTP/1.1" 500 3253
223.157.242.167 - - [31/12/2019:21:37:59 +0000] "POST /users HTTP/1.1" 500 2283
98.181.102.34 - - [31/12/2019:21:38:06 +0000] "PATCH /fieldsets HTTP/1.1" 500 4672
254.74.22.79 - - [31/12/2019:21:38:06 +0000] "PUT /lists HTTP/1.1" 500 2259
103.46.238.3 - - [31/12/2019:21:38:09 +0000] "PUT /lists HTTP/1.1" 500 3992
41.62.205.107 - - [31/12/2019:21:39:20 +0000] "PATCH /alerts HTTP/1.1" 500 3631
22.53.105.197 - - [31/12/2019:21:39:31 +0000] "DELETE /collectors HTTP/1.1" 500 4202
178.22.133.42 - - [31/12/2019:21:39:43 +0000] "PUT /alerts HTTP/1.1" 500 4648
102.247.13.50 - - [31/12/2019:21:39:55 +0000] "PATCH /auth HTTP/1.1" 500 3736

Наверх

Задание 3

У тебя есть база данных с поездками на такси. По плану на линию обслуживания должно было выйти 10550 автомобилей — эта цифра покрывает спрос пользователей. Команде поступило много жалоб — свободных автомобилей оказалось недостаточно. Сколько такси вышло на линии на самом деле? Информация о всех машинах на линии есть в таблице cabs.

  1. Зайди на удалённый сервер.
  2. Подключись к базе данных chicago_taxi.
  3. Посчитай, сколько всего автомобилей в таблице cabs.

В ответе приложи:

  1. Число автомобилей
  2. Запрос, которым тебе удалось решить задачу.

Решение

  1. Число автомобилей: 5529.
  2. Запрос:
SELECT
  COUNT(*) AS cnt
FROM cabs;

Наверх

Задание 4

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

Выведи те компании, в которых меньше 100 автомобилей. Поле с числом автомобилей назови cnt, поле с названием компании — company_name.

Чтобы решить задачу, примени оператор HAVING — аналог WHERE для агрегирующих функций.

В ответе приложи:

  1. Список компаний с числом автомобилей меньше 100.
  2. Запрос, которым тебе удалось решить задачу.

Решение

1. Список компаний с числом автомобилей меньше 100.
                 company_name                 | cnt 
----------------------------------------------+-----
 Nova Taxi Affiliation Llc                    |  97
 Patriot Taxi Dba Peace Taxi Associat         |  89
 Blue Diamond                                 |  85
 Checker Taxi Affiliation                     |  81
 Chicago Medallion Management                 |  80
 Chicago Independents                         |  69
 24 Seven Taxi                                |  67
 Checker Taxi                                 |  60
 American United                              |  55
 Chicago Medallion Leasing INC                |  53
 Top Cab Affiliation                          |  49
 KOAM Taxi Association                        |  48
 Chicago Taxicab                              |  38
 Norshore Cab                                 |  34
 Gold Coast Taxi                              |  20
 Metro Group                                  |  20
 Service Taxi Association                     |  18
 5 Star Taxi                                  |  14
 American United Taxi Affiliation             |   8
 Metro Jet Taxi A                             |   8
 Setare Inc                                   |   7
 Leonard Cab Co                               |   5
 4615 - 83503 Tyrone Henderson                |   1
 5062 - 34841 Sam Mestas                      |   1
 4623 - 27290 Jay Kim                         |   1
 5997 - 65283 AW Services Inc.                |   1
 2092 - 61288 Sbeih company                   |   1
 1469 - 64126 Omar Jada                       |   1
 2733 - 74600 Benny Jona                      |   1
 2192 - 73487 Zeymane Corp                    |   1
 5006 - 39261 Salifu Bawa                     |   1
 3556 - 36214 RC Andrews Cab                  |   1
 3721 - Santamaria Express, Alvaro Santamaria |   1
 2809 - 95474 C & D Cab Co Inc.               |   1
 2241 - 44667 - Felman Corp, Manuel Alonso    |   1
 3620 - 52292 David K. Cab Corp.              |   1
 2823 - 73307 Lee Express Inc                 |   1
 6057 - 24657 Richard Addo                    |   1
 6742 - 83735 Tasha ride inc                  |   1
 1085 - 72312 N and W Cab Co                  |   1
 3591 - 63480 Chuks Cab                       |   1
 0118 - 42111 Godfrey S.Awir                  |   1
 6574 - Babylon Express Inc.                  |   1
 3094 - 24059 G.L.B. Cab Co                   |   1
 5874 - 73628 Sergey Cab Corp.                |   1
 6743 - 78771 Luhak Corp                      |   1
 5074 - 54002 Ahzmi Inc                       |   1
 3623 - 72222 Arrington Enterprises           |   1
 4053 - 40193 Adwar H. Nikola                 |   1
 Chicago Star Taxicab                         |   1
 3011 - 66308 JBL Cab Inc.                    |   1

  1. Запрос:
SELECT
  company_name,
  COUNT(cab_id) AS cnt
FROM
  cabs
GROUP BY
  company_name
HAVING
  COUNT(cab_id) < 100
ORDER BY
  cnt DESC;

Наверх

Задание 5

В приложении такси рассчитывается коэффициент стоимости поездки. Если погода хорошая, значение коэффициента равно 1. Если на улице дождь или шторм, коэффициент повышается до 2. У команды есть гипотеза, что в расчётах коэффициента ошибка. Чтобы проверить расчёт коэффициента, команде нужна выборка данных: разработчик может сверить коэффицент с данными в логах и исправить баг. Твоя задача — получить выборку.

Чтобы это сделать:

  1. Получи описание погодных условий из таблицы weather_records для каждого часа.
  2. Раздели все часы на две группы оператором CASE: 'Bad', если поле description содержит слова rain или storm; 'Good' для всех остальных.
  3. Полученное поле назови weather_conditions.

В результирующей таблице должно быть два поля — дата и час (ts) и weather_conditions.

Сделай выборку за период с 2017-11-05 00:00 по 2017-11-06 00:00.

В ответе приложи:

  1. Полученную таблицу с данными за указанный период.
  2. Запрос, которым удалось решить задачу.

Решение

1. Таблица с данными за указанный период.
         ts          | weather_conditions 
---------------------+--------------------
 2017-11-05 00:00:00 | Good
 2017-11-05 01:00:00 | Bad
 2017-11-05 02:00:00 | Good
 2017-11-05 03:00:00 | Good
 2017-11-05 04:00:00 | Bad
 2017-11-05 05:00:00 | Bad
 2017-11-05 06:00:00 | Good
 2017-11-05 07:00:00 | Good
 2017-11-05 08:00:00 | Good
 2017-11-05 09:00:00 | Good
 2017-11-05 10:00:00 | Good
 2017-11-05 11:00:00 | Good
 2017-11-05 12:00:00 | Good
 2017-11-05 13:00:00 | Good
 2017-11-05 14:00:00 | Bad
 2017-11-05 15:00:00 | Good
 2017-11-05 16:00:00 | Bad
 2017-11-05 17:00:00 | Good
 2017-11-05 18:00:00 | Bad
 2017-11-05 19:00:00 | Bad
 2017-11-05 20:00:00 | Bad
 2017-11-05 21:00:00 | Good
 2017-11-05 22:00:00 | Good
 2017-11-05 23:00:00 | Good
 2017-11-06 00:00:00 | Good

  1. Запрос:
SELECT
  ts,
  CASE
    WHEN description LIKE '%rain%' OR description LIKE '%storm%' THEN 'Bad'
    ELSE 'Good'
  END AS weather_conditions
FROM
  weather_records
WHERE
  ts BETWEEN '2017-11-05 00:00:00' AND '2017-11-06 00:00:00';

Наверх

Задание 6

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

Чтобы определить, есть ли баг, нужно получить выборку с количеством поездок каждого таксопарка за 15 и 16 ноября 2017 года.

  1. Выведи поле company_name. Поле с числом поездок назови trips_amount и выведи его.
  2. Результаты, полученные в поле trips_amount, отсортируй по убыванию.

Подсказка: чтобы решить задачу, соедини таблицы cabs и trips. Примени агрегирующие функции с группировкой. Не забудь написать конструкцию с условием.

В ответе приложи:

  1. Полученную таблицу с данными за указанный период.
  2. Запрос, которым удалось решить задачу.

Решение

1. Таблица с данными за указанный период.
                 company_name                 | trips_amount 
----------------------------------------------+--------------
 Flash Cab                                    |        19558
 Taxi Affiliation Services                    |        11422
 Medallion Leasin                             |        10367
 Yellow Cab                                   |         9888
 Taxi Affiliation Service Yellow              |         9299
 Chicago Carriage Cab Corp                    |         9181
 City Service                                 |         8448
 Sun Taxi                                     |         7701
 Star North Management LLC                    |         7455
 Blue Ribbon Taxi Association Inc.            |         5953
 Choice Taxi Association                      |         5015
 Globe Taxi                                   |         4383
 Dispatch Taxi Affiliation                    |         3355
 Nova Taxi Affiliation Llc                    |         3175
 Patriot Taxi Dba Peace Taxi Associat         |         2235
 Checker Taxi Affiliation                     |         2216
 Blue Diamond                                 |         2070
 Chicago Medallion Management                 |         1955
 24 Seven Taxi                                |         1775
 Chicago Medallion Leasing INC                |         1607
 Checker Taxi                                 |         1486
 American United                              |         1404
 Chicago Independents                         |         1296
 KOAM Taxi Association                        |         1259
 Chicago Taxicab                              |         1014
 Top Cab Affiliation                          |          978
 Gold Coast Taxi                              |          428
 Service Taxi Association                     |          402
 5 Star Taxi                                  |          310
 303 Taxi                                     |          250
 Setare Inc                                   |          230
 American United Taxi Affiliation             |          210
 Leonard Cab Co                               |          147
 Metro Jet Taxi A                             |          146
 Norshore Cab                                 |          127
 6742 - 83735 Tasha ride inc                  |           39
 3591 - 63480 Chuks Cab                       |           37
 1469 - 64126 Omar Jada                       |           36
 6743 - 78771 Luhak Corp                      |           33
 0118 - 42111 Godfrey S.Awir                  |           33
 6574 - Babylon Express Inc.                  |           31
 Chicago Star Taxicab                         |           29
 1085 - 72312 N and W Cab Co                  |           29
 2809 - 95474 C & D Cab Co Inc.               |           29
 2092 - 61288 Sbeih company                   |           27
 3011 - 66308 JBL Cab Inc.                    |           25
 3620 - 52292 David K. Cab Corp.              |           21
 4615 - 83503 Tyrone Henderson                |           21
 3623 - 72222 Arrington Enterprises           |           20
 5074 - 54002 Ahzmi Inc                       |           16
 2823 - 73307 Lee Express Inc                 |           15
 4623 - 27290 Jay Kim                         |           15
 3721 - Santamaria Express, Alvaro Santamaria |           14
 5006 - 39261 Salifu Bawa                     |           14
 2192 - 73487 Zeymane Corp                    |           14
 6057 - 24657 Richard Addo                    |           13
 5997 - 65283 AW Services Inc.                |           12
 Metro Group                                  |           11
 5062 - 34841 Sam Mestas                      |            8
 4053 - 40193 Adwar H. Nikola                 |            7
 2733 - 74600 Benny Jona                      |            7
 5874 - 73628 Sergey Cab Corp.                |            5
 2241 - 44667 - Felman Corp, Manuel Alonso    |            3
 3556 - 36214 RC Andrews Cab                  |            2

  1. Запрос:
SELECT
  cabs.company_name AS company_name,
  COUNT(trips.trip_id) AS trips_amount
FROM
  cabs
INNER JOIN trips ON trips.cab_id = cabs.cab_id
WHERE
  CAST(trips.start_ts AS date) BETWEEN '2017-11-15' AND '2017-11-16'
GROUP BY
  company_name
ORDER BY
  trips_amount DESC;

Наверх

Задание 1

Автоматизируй тест-кейс для Яндекс.Маршрутов. Найди нужные селекторы на стенде: https://qa-routes.praktikum-services.ru/

[CASE-1] Проверка названия вида транспорта в результате для такси

Шаги:
1. Ввести «Время начала поездки» — 08:00.
2. В поле «Откуда»: Усачева, 3.
3. В поле «Куда»: Комсомольский проспект, 18.
4. Выбрать режим «Свой».
5. Выбрать вид транспорта: такси.

ОР: Текст появившегося результата начинается со слова «Такси».

Решение

Селекторы:

Элемент Селектор
Поле «Часы» #form-input-hour
Поле «Минуты» #form-input-minute
Поле «Откуда» #form-input-from
Поле «Куда» #form-input-to
Режим «Свой» #form-mode-custom
Транспорт «Такси» #from-type-taxi
Строка результата #result-time-price

Автотест:

const puppeteer = require('puppeteer');

const URL_TEST = 'https://qa-routes.praktikum-services.ru/';

async function testTaxiResult() {
    console.log('Запуск браузера');
    const browser = await puppeteer.launch({headless: false, slowMo: 100});

    console.log('Создание новой вкладки в браузере');
    const page = await browser.newPage();

    console.log('Переход по ссылке');
    await page.goto(URL_TEST);

    console.log('Шаг 1: ввод часов и минут');
    const hoursInput = await page.$('#form-input-hour');
    await hoursInput.type('08');

    const minutesInput = await page.$('#form-input-minute');
    await minutesInput.type('00');

    console.log('Шаг 2: заполнение поля Откуда');
    const fromInput = await page.$('#form-input-from');
    await fromInput.type('Усачева, 3');

    console.log('Шаг 3: заполнение поля Куда');
    const toInput = await page.$('#form-input-to');
    await toInput.type('Комсомольский проспект, 18');

    console.log('Шаг 4: выбор режима Свой');
    const routeMode = await page.$('#form-mode-custom');
    await routeMode.click();

    console.log('Шаг 5: выбор вида транспорта');
    const typeOfTransport = await page.$('#from-type-taxi');
    await typeOfTransport.click();

    console.log('Ожидание элемента с результатом');
    await page.waitForSelector('#result-time-price')

    console.log('Получение строки с результатом');
    const text = await page.$eval('#result-time-price', element => element.textContent);

    console.log('Проверка условия тест-кейса');
        if (text.startsWith('Такси')) {
        console.log('Успех. Текст содержит: ' + text);
    } else {
          console.log(`Ошибка. Текст не начинается со слова 'Такси'`)
    }

    console.log('Закрытие браузера');
    await browser.close();
}

testTaxiResult();

Наверх

Задание 2

Автоматизируй тест-кейс для ya.ru, применив нужные селекторы.

[CASE-2] Проверка появления результатов поиска

Предусловие:
Перейти на страницу ya.ru.

Шаги:
1. Ввести «Автоматизация тестирования» в поисковую строку.
2. Нажать кнопку «Найти».

ОР: Выполнен переход на страницу выдачи поиска и результат поиска непустой.

Решение

Селекторы:

Элемент Селектор
Поисковая строка #text
Кнопка «Найти» .button[type=submit]
Результат поиска .serp-item

Автотест:

const puppeteer = require('puppeteer');

async function testYaRu() {
    console.log('Запуск браузера');
    const browser = await puppeteer.launch();

    console.log('Создание новой вкладки в браузере');
    const page = await browser.newPage();

    console.log('Переход на страницу ya.ru');
    await page.goto('https://ya.ru/');

    console.log('Ввод текста "Автоматизация тестирования" в поисковую строку');
    const searchField = await page.$('#text');
    await searchField.type('Автоматизация тестирования');

    console.log('Клик в кнопку "Найти"');
    const searchButton = await page.$('.button[type=submit]');
    await searchButton.click();
    
    console.log('Ожидание перехода в страницу поисковых результатов');
    await page.waitForNavigation();
    
    console.log('Получение элементов результата поиска');
    const result = await page.$('.serp-item');
    
    console.log('Сравнение ОР и ФР');
    if (result == null) {
        console.log('Результаты поиска не найдены');
    } else {
        console.log('Результаты поиска отобразились');
    }
    
    console.log('Закрытие браузера');
    await browser.close();
}

testYaRu();

Наверх

© Яндекс.Практикум & Елена Добровольская, 2020

qa-portfolio's People

Contributors

okogora avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.