Тестирование приложений

С человеческим лицом

Игорь Коновалов @epam Feb 2019

О чем поговорим сегодня?

  • Что такое тест?

  • Зачем нужно тестировать?

  • Виды тестов

  • TDD vs TLD vs BDD

  • Настройка окружения

  • Как Не надо тестировать

  • Что такое покрытие

  • Тест компонент веб приложения (на примере Vue)

Что такое тест?

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

Иными словами, при данных условиях возвращает данный результат 

Например, в Agile методологиях к User Story пишутся тест кейсы, что то вроде:

Пользователь должен иметь возможность сложить два числа и получить в итоге их сумму

или

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

Любое взаимодействие с приложением - уже тест

Вы можете отдать тестирование приложения другим людям (QA, пользователи после релиза), или сделать это сами 

Разработчики, тестирующие код в продакшене, в аду попадают в отдельный котёл

Как правило, разработчики предпочитают все таки протестировать код перед тем как его отдавать

Робот - спасай человека!

Идея

Планирование

Реализация

Тест

Robots should suffer, not humans

Linters

Unit tests

Integration

E2E

Cup of Love Testing Types

Value (potential)

Time

Сложность функции

Что такое линтер?

Статический анализатор кода

Первый рубеж обороны от багов

Линтер

Тест

Анализирует код до момента компиляции

Сравнивает входные параметры и требуемый разультат

npm i eslint -D
npm i eslint eslint-plugin-prettier eslint-config-prettier prettier -D

Но лучше

Можно

Let's have a look at the code

const calculatorF = () => ({
    add(x, y) { return  x + y },
})
const myCalculator = calculatorF()

if (myCalculator.add(1, 3) === 4) {
    console.info('test passed')
} else {
    throw new Error('test failed')
}

Теперь робот работает на человека!

Test runners and frameworks

Jest

pick any - it doesn't matter

Jest и первый тест

TDD

+

-

  • 100% покрытие

  • качество кода

  • нужен план

Test Driven Development

TLD

Наиболее частая практика - тесты  пишутся после кода

BDD

Описываем тесты так, чтобы это понял BA, QA и ваша бабушка

Tests Last Development

behavior driven development

Любой подход имеет свои преимущества и недостатки

Когда - какой? 

TDD

  • Вам лень писать код
  • Есть план, представление того как выглядит конечный результат и что от него нужно

TLD

  • Покрываем существующую кодовую базу
  • Нет времени
  • Прототипирование

BDD

Всегда

Что отличает хороший тест?

  • Он простой и понятный

  • Он действительно проверяет логику, его можно сломать

  • Его описание сможет понять QA

  • Он независим, не влияет на остальные тесты

Unit vs Integration

IN

OUT

Unit

Unit - тестируем вход и выход

Integration - корректная работа нескольких юнитов

E2E - End To End

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

describe("Knowledge Base Application", () => {
  beforeEach(() => {
    cy.fixture("users/admin").as("admin");
  });
  it("Should be able to login: admin", function() {
    cy.visit("/login");
    cy
      .get('input[name="email"]')
      .type(this.admin.email)
      .should("have.value", this.admin.email);
    cy
      .get('input[name="password"]')
      .type(this.admin.password)
      .should("have.value", this.admin.password);
    cy.get("form").submit();
    cy.location("pathname").should("eq", "/home");
  });
});

Cypress

Black Box testing

Тестируйте юнит так, как будто вы Не знаете того, что происходит внутри.

IN

OUT

Что-то

Тестирование компонента приложения на примере Vue

Coverage - когда стоит остановиться?

High

Low

No coverage

100% coverage

Risk

Cost

Всем спасибо!

Тестирование приложений

By Igor Konovalov

Тестирование приложений

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

  • 293