Этот блог поможет вам понять, как реализовать ваши тесты e2e с помощью Cypress, а также выполнить непрерывную интеграцию и доставку с CircleCI для ваших тестов.

О Кипарисе

Cypress - это инструмент для тестирования интерфейса нового поколения, созданный для современных веб-приложений. Cypress имеет полностью встроенные функции, такие как:

- Путешествие во времени

- Возможность отладки

- Автоматическое ожидание

- Скриншоты и видео

- Кроссбраузерное тестирование

И многое другое…

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

Настройка проекта

Приступим к настройке базового проекта Cypress.

- Создайте папку с именем cypress-circleci и инициализируйте проект узла.

$ mkdir cypress-circleci
$ npm init

- Установить кипарис командой

npm install cypress --save

- Откройте кипарисовик из вашего проекта

npx cypress open

- Структура папок будет выглядеть примерно так

circleci-cypress

└───fixtures
│ │ sampleData.json
│ │
└───integration
│ │ siteVerify.js

└───plugins
│ │ index.js

└───screenshots
│ │ img1.pmg

└───results
│ │ test

└───supports
│ │ commands.js
│ │ index.js
|
└───cypress.json
└───package.json

- Создайте базовый тест для проверки сайта https://dikshitashirodkar.com. И вы можете настроить базовый URL своего сайта внутри cypress.json

{
  "baseUrl": "https://dikshitashirodkar.com/",
  "video": false,
  "reporterOptions": {
    "mochaFile": "cypress/results/tests-[hash].xml",
    "toConsole": true
  }
}

Примечание: по умолчанию cypress предоставляет видеозапись выполненных тестов, здесь мы явно отключили ее с помощью флажка видео. И добавил конфигурации для отчета в формате xml.

В приведенном ниже тестовом файле используется fixtures (используется для хранения и управления тестовыми данными, которые представляют собой не что иное, как файл json).
Простой файл фикстуры с именем sample.json

{
  "imageName": "dikshita",
  "heading": "QA Talking point"
}

Вот базовый тест integration/test.js. Тест содержит:

1. Посетите сайт

2. Убедитесь, что статус ответа сайта - 200

3. Проверьте заголовок блога, чтобы быть «точкой для обсуждения QA»

4. Убедитесь, что значок изображения в блоге является «dikshita»

describe("Verify the website", function() {
  before(function() {
    cy.visit("/")
  })
  beforeEach(function() {
    cy.fixture("sample").then(function(sample) {
      this.sample = sample
    })
  })
  it("verify the status of the site", function() {
    cy.request("/about").should(function(response) {
      expect(response.status).to.eq(200)
    })
  })
  it("verify the heading of the blog", function() {
    cy.get(".head-logo")
      .children("a")
      .should("have.text", this.sample.heading)
  })
  it("verfiy the image icon on the site", function() {
    console.log(this.sample, "printing data")
    cy.get(".profile-img")
      .should("have.attr", "src")
      .and("include", this.sample.imageName)
  })
})

Давайте выполним тесты с помощью команды:

npm run cypress run --browser chrome

Результат будет примерно таким:

Spec                                              Tests  Passing  Failing  Pending  Skipped
  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ ✔  tests/verifySite.js                      00:08        3        3        -        -        - │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘
    ✔  All specs passed!                        00:08        3        3        -        -        -

Итак, вы успешно настроили и выполнили… 🏅

Запускаем кипарис с CircleCI

CircleCI - это инструмент непрерывной интеграции и развертывания, который помогает командам интегрировать свой код в репозиторий и создавать тесты «n» раз в день. CircleCI использует Orbs, которые являются общедоступными пакетами параметризуемых возобновляемых элементов конфигурации с открытым исходным кодом, включая задания, команды и исполнителей.
CircleCI также предоставляет Orb для тестирования cypress, не тратя время на настройку CircleCI. Он также записывает результаты и предоставляет графический интерфейс.

Перейдем к настройке CircleCI

- Создайте папку .circleci в корневом каталоге вашего проекта
- Добавьте файл в папку .circleci как config.yml

version: 2.1
orbs:
  cypress: cypress-io/cypress@1
executors:
  with-chrome:
    resource_class: small
    docker:
      - image: "cypress/browsers:node14.16.0-chrome90-ff88"
workflows:
  build:
    jobs:
      - cypress/install
      - cypress/run:
          requires:
            - cypress/install
          executor: with-chrome
          browser: chrome
          post-steps:
            - run: ls
            - store_test_results:
                path: cypress/results
            - store_artifacts:
                path: cypress/screenshots

Примечание: поместите свой проект Cypress в систему с контролируемой версией (github или bitbucket). В нашем случае мы бы разместили его на github.

Настройте свою учетную запись CircleCI

1. Вы можете войти на портал CircleCI через gitHub, и у вас будет доступ ко всем вашим репозиториям github на экране списка проектов.

2. Чтобы настроить circleci для вашего проекта концентратора git, выберите Setup project. Затем вам будет предложено выбрать ветку, из которой вы хотите выполнять свои тесты, и она должна содержать config.yml внутри .circleci папки. Или другой вариант - создать новый файл конфигурации.

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

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

4. Успех конвейера будет выглядеть так:

5. Неисправный конвейер будет выглядеть так

6. Мы добавили конфигурацию для хранения результатов тестирования и артефактов в нашем config.yml файле. Следовательно, мы также сможем увидеть детали неудачного теста в разделе теста и ссылку на снимок экрана теста в разделе артефактов.

Это все для этого блога. Надеюсь, вам понравилось. Спасибо за прочтение…!