-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
89 changed files
with
18,818 additions
and
128 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
name: Check, Build and Artifact Deploy | ||
on: | ||
pull_request: | ||
push: | ||
branches: | ||
- main | ||
|
||
permissions: | ||
contents: write | ||
pages: write | ||
id-token: write | ||
pull-requests: write | ||
deployments: write | ||
|
||
jobs: | ||
deploy: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
|
||
- uses: actions/setup-java@v4 | ||
with: | ||
java-version: '17' | ||
distribution: 'temurin' # https://github.com/actions/setup-java/issues/298 | ||
|
||
- name: Install Packages | ||
working-directory: src/frontend | ||
run: | | ||
npm install | ||
- name: Lint check | ||
working-directory: src/frontend | ||
run: | | ||
npm run lint | ||
- name: Test check | ||
working-directory: src/frontend | ||
run: | | ||
npm run test | ||
- name: Build | ||
working-directory: src/frontend | ||
run: | | ||
npm run build | ||
- name: Setup Gradle | ||
uses: gradle/actions/[email protected] | ||
|
||
- name: Build with Gradle | ||
run: ./gradlew clean bootJar | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Zip artifact for deployment | ||
run: | | ||
zip zucchini-launcher.zip ./build/libs/* -r | ||
echo "GITHUB_SHA_SHORT=$(echo $GITHUB_SHA | cut -c 1-6)" >> $GITHUB_ENV | ||
- name: Create Draft Release | ||
id: create_release | ||
uses: actions/create-release@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
tag_name: ${{ env.GITHUB_SHA_SHORT }} | ||
release_name: Zucchini Launcher ${{ env.GITHUB_SHA_SHORT }} | ||
draft: true | ||
prerelease: false | ||
|
||
- uses: actions/[email protected] | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
asset_path: ./zucchini-launcher.zip | ||
asset_name: zucchini-launcher.zip | ||
asset_content_type: application/zip | ||
|
||
- uses: eregon/publish-release@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
release_id: ${{ steps.create_release.outputs.id }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,133 @@ | ||
# ZucchiniLauncher | ||
|
||
Система запуска автоматизированных тестов "Zucchini Launcher" — это инструмент для создания, запуска, мониторинга | ||
выполнения и предоставление результатов автоматизированного тестирования. | ||
Система должна обладать следующей функциональностью: | ||
|
||
1. Авторизация: пользователь должен авторизовываться в системе, иметь одну из ролей, иметь доступ к функциональности, | ||
согласно роли, доступ к странице настроек. | ||
2. Создание тестовых сценариев: пользователь должен иметь возможность создавать тестовые сценарии в текстовом редакторе | ||
и сохранять их на сервере. | ||
3. Просмотр и редактирование тестовых сценариев: пользователь должен иметь возможность просматривать существующее | ||
сценарии и редактировать их текст. | ||
4. Запуск тестовых сценариев: пользователь должен иметь возможность гибкого запуска тестовых сценариев из каталога. | ||
5. Мониторинг текущих запусков: пользователь должен иметь возможность видеть текущее состояние запусков в системе – | ||
какие сценарии запущены, какие в очереди, какие завершены. В зависимости от роли пользователь может управлять | ||
состоянием сценария (останавливать, повышать приоритет и т.д.). | ||
6. Просмотр результатов: пользователь должен иметь возможность просматривать результаты каждого завершенного запуска и | ||
тестового сценария. | ||
Системе будет иметь серверную и клиентскую часть. | ||
<br/> | ||
<p align="center"> | ||
<h3 align="center">ZucchiniLauncher</h3> | ||
<p align="center"> | ||
Приложение для запуска Cucumber тестов. | ||
<br/> | ||
<br/> | ||
</p> | ||
</p> | ||
|
||
[![Check, Build and Artifact Deploy](https://github.com/SergeyAkkuratov/ZucchiniLauncher/actions/workflows/build_deploy.yml/badge.svg)](https://github.com/SergeyAkkuratov/ZucchiniLauncher/actions/workflows/build_deploy.yml) | ||
![Contributors](https://img.shields.io/github/contributors/SergeyAkkuratov/ZucchiniLauncher?color=dark-green) ![Issues](https://img.shields.io/github/issues/SergeyAkkuratov/ZucchiniLauncher) | ||
|
||
**Backend** | ||
|
||
![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=openjdk&logoColor=white) | ||
![SpringBoot](https://img.shields.io/badge/Spring_Boot-F2F4F9?style=for-the-badge&logo=spring-boot) | ||
|
||
**Frontend** | ||
|
||
![typescript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white) | ||
![react](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB) | ||
![redux](https://img.shields.io/badge/Redux-593D88?style=for-the-badge&logo=redux&logoColor=white) | ||
![router](https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white) | ||
|
||
## Содержание | ||
|
||
- [О проекте](#о-проекте) | ||
- [Установка](#установка) | ||
- [Использование](#использование) | ||
- [Структура проекта](#структура-проекта) | ||
|
||
## О проекте | ||
|
||
<img src="src/frontend/src/images/zucchini-real.jpg"> | ||
|
||
Приложение **ZuccchiniLauncher** служит для запуска, мониторинга и обработки результатов Cucumber тестов. | ||
|
||
## Требования | ||
|
||
Для локального запуска приложения вам потребуется Java 17 версии или выше. | ||
|
||
## Установка | ||
|
||
Для локального запуска приложения вам нужно скачать | ||
пакет [zucchini-launcher.jar](https://github.com/SergeyAkkuratov/ZucchiniLauncher/releases/tag/major) и запустить его: | ||
|
||
```bash | ||
java -jar zucchini-launcher.jar | ||
``` | ||
|
||
Приложение будет доступно по адресу http://localhost:8080/. | ||
|
||
Если вы хотите самостоятельно выполнить сборку приложения из исходного кода, то требуется склонировать проект и выполнить сборку через Gradle: | ||
|
||
```bash | ||
gradlew clean bootJar | ||
``` | ||
|
||
Для использования Allure Report требуется запустить и настроить [allure-docker-service](https://github.com/fescobar/allure-docker-service). | ||
|
||
## Использование | ||
|
||
### Логин | ||
|
||
Приложение требует авторизации для просмотра и выполнения действий. | ||
На данный момент существует две роли пользователей: user и admin. | ||
Только пользователь с ролью admin может удалять feature файлы и тесты из очереди. | ||
![login](./images/login.png) | ||
|
||
### Dashboard | ||
|
||
Страница dashboard открывается ппосле авторизации пользователя и содержит информацию о запущенных, ожидающих и завершенных тестах. | ||
![dashboard](./images/dashboard.png) | ||
|
||
При первональном запуске все таблицы будут пусты (так как ниодного теста ещё не было запущено): | ||
![dashboard](./images/dashboard_empty.png) | ||
|
||
При наведении курсора мыши на строчку в любой таблицы будут появляться детали запуска с задержкой в 1 секунду: | ||
![deatails](./images/dashboard_details.png) | ||
|
||
Так же вы можете кликнуть по строке любой таблице, чтобы открыть окно с деталями запуска и, например, скопировать информацию. | ||
В окне с деталями завершенного запуска вы найдете кнопку, открывающую Allure report ( | ||
требует [allure-docker-service](https://github.com/fescobar/allure-docker-service)). | ||
![results](./images/dashboard_results.png) | ||
|
||
### Запуск тестов | ||
|
||
Запустить тест вы может с любой страницы программы нажам кнопку "Run test" в правом верхнем углу. | ||
После этого откроется окно, в котором нужно будет указать параметры запуска теста: | ||
![runTest](./images/runNewTests.png) | ||
В строке "Feature file name" нужно выбрать конкретный .feature файл для запуска. В поле Tags - указать тэги, запускаемого теста (можно посмотреть в | ||
.feature файле). В поле таймаут указывается маскимально допустимое время выполнения теста. | ||
|
||
Если требуется запустить больше одно теста, то можно отметить чекбокс "Run another test" и окно запуска не будет закрваться при нажатии кнопки "Run". | ||
|
||
### Удаление тестов из очереди | ||
|
||
Если пользователь обладает ролью admin, то он может удалять тест из очереди ожидания. | ||
Для этого требуется нажать на крестик в соотвествующей этом тесту строке в таблице и подвердить своё действие в всплывающем окне. | ||
![delete](./images/remove_test.png) | ||
|
||
### Features | ||
|
||
На страницы Features пользователь может просмтривать, редактировать, создавать новые и удалять .feature файлы, хранящиеся на серевере. | ||
![features](./images/features.png) | ||
|
||
Для того, чтобы открыть конкретный .feature файл, нужно выбрать его имя в поле "Feature file name". | ||
В редакторе ниже отобразится текст .feature файла. | ||
Если изменить текст .feature файла - станет доступна кнопка "Save changes". Нажав её можно сохранить изменение на сервере. | ||
Если же нажать "Cancel" - все изменения отменятся. | ||
|
||
Для создания нового .feature файла нужно нажать на стрелочку рядом с кнопкой "Save changes" и выбрать пункт "Add new feature". После этого откроется | ||
окно: | ||
![newFeature](./images/addNewFeature.png) | ||
В поле "File name" нужно ввести имя нового .feature файла (расширение указывать не нужно, оно подставится автоматически). | ||
|
||
Пользователь с ролью admin может так же удалять .feature файлы. | ||
Для этого он должен выбрать файл и нажать кнопку "Delete". В появившемся окне требуется подтвердить своё действие. | ||
![deleteFeature](./images/remove_feature.png) | ||
## Структура проекта | ||
|
||
- github | ||
- workflows - настройки для GitHub Actions | ||
- src | ||
- frontend - исходный код для Frontend | ||
- images - скриншоты и .gif файлы для файла README.md | ||
- mocks - файлы для моков тестов | ||
- src - исходный код проекта | ||
- components - React компоненты программы | ||
- pages - страницы приложения | ||
- store - описание и Redus Store приложения | ||
- java - исходный код для Backend |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
docker run -p 5050:5050 -e CHECK_RESULTS_EVERY_SECONDS=3 -e KEEP_HISTORY=1 -e KEEP_HISTORY_LATEST=10 -v E:\_Study\IdeaProjects\ZucchiniLauncher\allure-results:/app/allure-results -v E:\_Study\IdeaProjects\ZucchiniLauncher\allure-reports:/app/default-reports frankescobar/allure-docker-service |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
coverage | ||
dist | ||
webpack.config.js | ||
module | ||
storybook-static |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
module.exports = { | ||
env: { | ||
browser: true, | ||
es2021: true, | ||
"jest/globals": true, | ||
}, | ||
parser: "@typescript-eslint/parser", | ||
extends: ["airbnb-base", "plugin:jest/recommended", "plugin:@typescript-eslint/recommended", "prettier", "plugin:storybook/recommended"], | ||
overrides: [ | ||
{ | ||
env: { | ||
node: true, | ||
}, | ||
files: [".eslintrc.{js,cjs}"], | ||
parserOptions: { | ||
sourceType: "script", | ||
}, | ||
}, | ||
], | ||
parserOptions: { | ||
ecmaVersion: "latest", | ||
sourceType: "module", | ||
}, | ||
plugins: ["jest", "eslint-plugin-html", "@typescript-eslint"], | ||
rules: { | ||
"import/no-unresolved": "off", // https://github.com/typescript-eslint/typescript-eslint/issues/1624 | ||
"import/extensions": ["warn", "never"], // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md | ||
"import/no-extraneous-dependencies": [ | ||
"off", | ||
{ | ||
devDependencies: ["**/*.test.ts?(x)", "**/*.spec.ts?(x)", "**/test-utils.ts", "webpack.config.js"], | ||
}, | ||
], | ||
"no-shadow": "off", | ||
"@typescript-eslint/no-shadow": "error", | ||
}, | ||
}; |
Oops, something went wrong.