TL; DR
Огурец - это каркас BDD. Его основными компонентами являются:
- Огурец : вездесущий язык, используемый как средство общения, чем что-либо, и может использоваться как трамплин для совместной работы. Это помогает управлять ожиданиями бизнеса, и если все увидят изменения, которые вы вносите в удобоваримом формате, они, надеюсь, будут меньше разочарованы командами разработчиков, но также вы можете использовать это, чтобы ускорить время реакциивашей команде, если есть ошибки, написав тесты, которые огурец охватывает с мышлением, что кто-то должен будет вернуться и отладить его в какой-то момент.
- Реализация CLI (илиCLI): тестовый бегун на основе огурца. Он разработан добровольцами, которые жертвуют часть своего свободного времени. Каждая реализация специфична для языка программирования, поддерживающего производственный код, готовый к тестированию. Он рассматривается как конкретный инструмент / утилита.
Длинная версия
Предполагаемое использование Gherkin в качестве инструмента коммуникации, описывающего взаимодействия с системой с разных точек зрения (или действующих лиц)и так уж получилось, что вы можете интегрировать его с тестовыми средами, что поможет обеспечить правильную обработку этих взаимодействий системой на месте.
Чаще всего это с точки зрения пользователей:
Given John has logged in
When he receives a message from Brenda
Then he should be able to click through to his message thread with Brenda via the notification
Но это также может быть и с точки зрения компонентов / страниц:
Given the customer history table is displayed
And there have been changes to the customer table for that user since the page was first loaded
When it receives a click to refresh the data
Then the new changes should be displayed
Это все о описании поведения и предоставлении возможности бизнесу и разработчикам свободно сотрудничать, одновременно устраняя языковые барьеры, которыеобычно в конечном итоге изводят общение и, как правило, обескураживают обе стороны из-за отсутствия взаимопонимания по вопросу
Именно здесь начинается "веселье" - Анакин, Ep III
Вы можете использовать эти файлы для создания среды "liv"Документация "для всей вашей команды разработчиков (и, в случае успеха, для более широкого бизнеса) и теоретически - сформулирована и отображена правильно, это было бы невероятным благом для специалистов по обслуживанию клиентов, которым легче было бы быть в курсе изменений, иочень хорошо описал бы справочную документацию - без каких-либо дополнительных усилий, но это не то, что я видел в дикой природе. Я написал скрипт на работе, который делает это путем преобразования функций в уценку и наряду с различными другими инструментами уценки (mermaid
для графиков, tsdoc-plugin-markdown
для создания документов API и различными расширениями для выбранного мной конвертера HTML, docsify
) Мне удалось сгенерировать что-то, что не было трудно ориентироваться, и открыло общение между командами, которым раньше было труднее сообщать о своих проблемах команде разработчиков (большинство людей в наши дни знают немного уценки, даже если она имеетдолжен быть описан как "символы, которые вы вводите в потоках reddit и комментариях на YouTube, чтобы сделать текст жирным и курсивом и т. д." для того, чтобы люди поняли, что это такое, но это означает, что каждый может внести свой вклад в это)
Это чрезвычайно полезный инструмент, когда дело доходит до отладки тестов, особенно при использовании с шаблоном сценария (в отличие от стандартной объектной модели страницы, из-за отсутствия дополнительного контекста, который предоставляет pom, но он все еще полезен), так как все описано так, что порождаетрепликация проблемы с точки зрения пользователей или компонентов в случае ее сбоя.
Я связал ее с блок-схемами, где я рисую взаимодействия с пользователем, прикрепляя к нему функции и получая возможность видеть в болеевизуальный способ, с помощью которого пользователи смогут делать то, что мы, возможно, не планировали, или даже придумывать какой-то броский сценарий, который мы каким-то образом упустили.
Длинная версия Длиннее
Мои примеры здесьв основном в javascript, как мы разрабатывали в среде node
, но если вы хотите создавать свои собственные версии, она не должна быть слишком разной.
The Docs
По сути, этот бит предназначен только для отображения файлов функций таким образом, который легко усваивается бизнесом (у меня тоже есть планы по интеграции отчетов об испытаниях и возможности переключения ветвей и тому подобного)
Во-первых, вы хотите получить простой массив всех файлов в папке функций и выбрать файлы с ".feature" в конце,
По сути, вам просто нужно сгладить ls
здесь (это можно улучшить, но у нас есть требование использовать LTS-версию узла, а не последнюю версию в целом)
const fs = require('fs');
const path = require('path');
const walkSync = (d) => fs.statSync(d).isDirectory() ? fs.readdirSync(d).map(f => walkSync(path.join(d, f))) : d;
const flatten = (arr, result = []) => {
if (!Array.isArray(arr)){
return [...result, arr];
}
arr.forEach((a) => {
result = flatten(a, result)
})
return result
}
function features (folder) {
const allFiles = flatten(walkSync(path.relative(process.cwd(), folder)))
let convertible = []
for (let file of allFiles) {
if (file.match(/.feature$/)) {
convertible.push(file)
}
}
return convertible
}
...
Для просмотра всех этих файлов с помощью анализатора Gherkin для извлечения ваших сценариев требуется некоторая настройка, хотя это довольно просто сделать, поскольку Gherkin имеет чрезвычайно четко определенную структуру и известные ключевые слова.
Тамможет быть много ссылок на себя, так как когда вы сводите его к основам, много огурцов строится на четко определенных компонентах. Например, вы можете описать сценарий как фон, который может иметь описание, теги и имя:
class Convert {
...
static background (background) {
return {
cuke: `${background.keyword.trim()}:`,
steps: this.steps(background.steps),
location: this.location(background.location),
keyword: background.keyword
}
}
static scenario (scenario) {
return {
...this.background(scenario),
tags: this.tags(scenario.tags),
cuke: `${scenario.keyword.trim()}: ${scenario.name}\n`,
description: `${scenario.description.replace(/(?!^\s+[>].*$)(^.*$)/gm, "$1<br>").trim()}`,
examples: this.examples(scenario.examples)
}
}
...
}
Вы можете выделить его полностью, чтобы записать в один файл или вывести несколько уценокфайлы (убедитесь, что ссылки на них есть в файле меню)
Блок-схемы
Блок-схемы упрощают визуализацию проблемы, и есть несколько инструментов, которые используют уценку для создания такихэто:
В конце концов, это будет выглядеть так:
### Login
Customers should be able to log into their account, as long as they have registered.
...
```mermaid
graph TD
navigateToLogin["Navigate to Login"] -->logIn{"Login"}
logIn -->validCredentials["Valid<br>Credentials"]
logIn -->invalidCredentials{"Invalid<br>Credentials"}
invalidCredentials -->blankPass["Blank Password"]
invalidCredentials -->wrongPass["Wrong Password"]
invalidCredentials -->blankEmail["Blank Email"]
invalidCredentials -->wrongEmail["Wrong Email"]
...
click blankPass "/#/areas/login/scenario-blank-password" "View Scenario"
...
```
По сути, это действительнобыстрый способ визуализации проблем и ссылки на правильные места в документации, чтобы найти ответ. Инструмент рисует блок-схему, вам просто нужно установить связь между ключевыми понятиями или идеями на странице (т.е. новый клиент получает другой стартовый экран)
Шаблон сценария, спокойствие и отладка
Я думаю, что все, что действительно нужно здесь сказать, это то, что когда вы запускаете тест, это ваш вывод:
✓ Correct information on the billing page
✓ Given Valerie has logged into her account
✓ Valerie attempts to log in
✓ Valerie visits the login page
✓ Valerie navigates to '/login'
✓ Valerie waits up to 5s until the email field does become visible
✓ Valerie enters 'thisisclearlyafakeemail@somemailprovider.com' into the email field
✓ Valerie enters 'P@ssword!231' into the password field
✓ Valerie clicks on the login button
✓ Valerie waits for 1s
Он разбит любую часть теста на описания, что означает, что CSSизменения, мы не будем искать что-то, что больше не существует, и даже кто-то новичок в отладке этой области сайта сможет обнаружить после неудачного теста.
Общение
Я думаю, все это должно показать, как можно улучшить общение в более общем смысле. Все дело в том, чтобы убедиться, что проекты доступны как можно большему числу людей, которые могут внести что-то ценное (что должно быть всем в вашем бизнесе)