Cypress создан для тестирования вашего приложения. Другими словами, он был разработан для тестирования приложения, к которому у вас есть доступ и которое вы активно разрабатываете. По этой причине Cypress поставляется с параметром baseUrl, который может помочь вам установить начальную точку тестирования. В этой статье мы рассмотрим, что это за параметр и как его можно использовать.
Содержание
- Настройка baseUrl в Cypress Configuration
- Доступ к baseUrl в тестах
- Изменение baseUrl во время выполнения теста
- Создание утверждений с помощью baseUrl
- Передача baseUrl через CLI
- Динамическая установка baseUrl
- Лучшие практики использования baseUrl
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Настройка baseUrl в Cypress Configuration
Первым шагом в использовании baseUrl в Cypress является его настройка в файле cypress.config.js. Этот файл находится в корне вашего проекта Cypress и содержит различные параметры конфигурации для ваших тестов. Конфигурация будет выглядеть примерно так:
const { defineConfig } = require('cypress')
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
},
baseUrl: 'https://example.com'
},
})
Необходимо заменить https://example.com на реальный URL вашего веб-приложения. Это может быть адрес localhost, если вы тестируете локально, стейджинг-сайт или релизный сайт. При такой конфигурации указанный URL становится доступным в качестве baseUrl во всем тестовом наборе.
Доступ к baseUrl в тестах
После того как вы задали baseUrl в своей конфигурации, вы можете обращаться к нему различными способами. Например, этот baseUrl будут использовать ваши команды cy.visit(), cy.request() и cy.intercept(), поэтому вместо ввода всего url используйте относительный путь.
cy.visit('/home')
// resolves to https://example.com/home
cy.request('/api/items')
// resolves to https://example.com/api/items
cy.intercept('/api/logout')
// resolves to https://example.com/api/logout
? Знаете ли вы, что вместо URL-адреса можно открыть обычный html-файл? Просто используйте cy.visit('index.html') для открытия файла index.html в корневой папке вашего проекта.
Изменение baseUrl во время выполнения теста
В некоторых случаях может потребоваться изменить baseUrl на уровне теста. Это может быть характерно для smoke-тестов, предназначенных для охвата более крупной системы, состоящей из приложений, разделенных на несколько доменов. Чтобы задать другой baseUrl для теста, можно использовать объект конфигурации теста:
Copy to clipboard
describe('smoke tests', () => {
it('test default domain', () => {
cy.visit('/home')
// will go to https://example.com/home
})
it('test some other domain', { baseUrl: 'https://other.com '}, () => {
cy.visit('/home')
// will go to https://other.com/home
})
})
Создание утверждений с помощью baseUrl
Вы можете захотеть сделать в тестах утверждения, в которых будет задействован baseUrl. Допустим, необходимо убедиться, что после выполнения определенного действия приложение перенаправляется на нужную страницу.
Вот пример того, как это сделать с помощью baseUrl:
describe('Redirect Test', () => {
it('Redirects to the login page after signing out', () => {
const baseUrl = Cypress.config('baseUrl');
// Perform the sign-out action
cy.get('#sign-out-button').click();
// Assert that the user is redirected to the login page
cy.url().should('eq', `${baseUrl}/login`);
});
});
Передача baseUrl через CLI
На самом деле вовсе не обязательно настраивать свой baseUrl в файле cypress.config.js. Вместо этого можно решить эту проблему при запуске Cypress:
npx cypress open --config baseUrl=https://staging.example.com
Благодаря такому подходу вы можете легко переключаться между различными средами и запускать Cypress в той среде, в которой хотите провести тестирование.
Динамическая установка baseUrl
Можно пойти еще дальше и установить свой baseUrl динамически. Это можно сделать либо в самом параметре, либо с помощью функции setupNodeEvents().
Рассмотрим примеры.
const { defineConfig } = require('cypress')
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
},
baseUrl: process.env.CI ? "https://staging.example.com" : "http://localhost:3000"
},
})
В данном примере мы будем задавать адрес https://staging.example.com всякий раз, когда запускаем тесты в CI-конвейере. Большинство CI-сервисов устанавливают переменную CI=1, которую мы можем использовать для дальнейших условий. Мы добавляем условие, которое будет использовать адрес https://staging.example.com, если мы находимся в среде CI, и http://localhost:3000, если нет.
Если нам необходимо переключаться между несколькими URL, мы можем использовать функцию setupNodeEvents():
const { defineConfig } = require('cypress')
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
const version = config.env.VERSION || 'local'
const urls = {
local: "http://localhost:3000",
staging: "https://staging.example.com",
prod: "https://example.com"
}
// choosing version from urls object
config.baseUrl = urls[version]
return config
},
},
})
Теперь мы можем легко переключаться между различными URL, передавая имя версии приложения во флаг --env:
# will use http://localhost:3000 npx cypress open --env version="local" # will use http://staging.example.com npx cypress open --env version="staging" # will use http://example.com npx cypress open --env version="prod" # will use fallback to http://localhost:3000 npx cypress open
Лучшие практики использования baseUrl в Cypress
Частой ошибкой является использование baseUrl следующим образом:
cy.visit(Cypress.config('baseUrl') + '/home')
Как показано в примере, приведенном в начале этой заметки, это не добавляет ничего нового в ваши тесты, зато вносит избыточность.
Настройка baseUrl помогает писать тесты таким образом, чтобы их можно было запускать в любом окружении. Это очень важно для обеспечения гибкости тестов.
Перевод статьи «Cypress basics: Using baseUrl».