Как настроить селективность при запуске тестов
Введение
Селективность позволяет значительно ускорить процесс тестирования, запуская только релевантные тесты вместо всего набора. Testplane отслеживает зависимости каждого теста от файлов проекта — как код самих тестов, так и код, выполняемый в браузере — и при изменении файла запускает только те тесты, которые от него зависят.
Как это работает?
При первом запуске с включенной селективностью Testplane собирает информацию о зависимостях каждого теста:
- какие модули Node.js были загружены во время выполнения теста;
- какие файлы исходного кода были выполнены в браузере.
После изменения файла при следующем запуске будут выполнены только те тесты, которые зависят от измененного файла. Это значительно экономит время, особенно в больших проектах с большим количеством тестов.
Если хотя бы один тест упадет, то при следующем прогоне будут запущены все те же тесты — Testplane "зап омнит" новое состояние только после полностью успешного прогона.
Настройка
Для включения селективности достаточно добавить в конфигурацию Testplane секцию selectivity с параметром enabled: true:
// testplane.config.ts
export default {
// ... Остальные настройки
selectivity: {
enabled: true,
},
} satisfies import("testplane").ConfigInput;
Пример использования
Включим селективность в проекте с браузерами chrome и firefox. Также для удобства настроим devServer:
// testplane.config.ts
const DEV_SERVER_PORT = 3050;
export default {
baseUrl: `http://127.0.0.1:${DEV_SERVER_PORT}`,
// ... Остальные настройки
devServer: {
command: `npm run dev -- --port=${DEV_SERVER_PORT}`,
reuseExisting: true,
readinessProbe: {
url: `http://127.0.0.1:${DEV_SERVER_PORT}`,
},
},
selectivity: {
enabled: true,
},
} satisfies import("testplane").ConfigInput;
Также включим генерацию SourceMap в конфиге используемого Webpack:
// webpack.config.js
module.exports = (env, argv) => {
return {
// ...
// Используем несколько входных точек
entry: {
main: './js/home.js',
about: './js/about.js',
contact: './js/contact.js',
shared: './js/shared.js'
},
// Включаем генерацию SourceMap
// Подходят как внешние (`source-map`), так и встроенные (`inline-source-map`)
devtool: 'source-map',
output: {
// Указываем шаблон, по которому Webpack будет сохранять пути до файлов исходного кода
// Подойдут также значения `"[resource-path]"` или `"[absolute-resource-path]"`
devtoolModuleFilenameTemplate: "webpack://[resource-path]",
},
Для примера будем использовать проект на чистом JavaScript без React со следующей файловой структурой:
.
|____css
| |____home.css
| |____shared.css
| |____about.css
|____js
| |____about.js
| |____home.js
| |____main.js
| |____contact.js
| |____shared.js
|____index.html
|____about.html
|____contact.html
|____webpack.config.js
|____testplane.config.ts
|____testplane-tests
| |____example.testplane.ts
| |____tsconfig.json
|____package.json
|____package-lock.json