Skip to content

updated BaseTest by adding filter for RestAssured in beforeTest() #49

updated BaseTest by adding filter for RestAssured in beforeTest()

updated BaseTest by adding filter for RestAssured in beforeTest() #49

Workflow file for this run

name: TeamCity tests
on: [push]
jobs:
run_teamcity_tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'zulu'
# По умолчанию в ubuntu отсутствует команда ifconfig
- name: Install ifconfig
run: sudo apt-get update && sudo apt-get install -y net-tools
- name: Set up host environment variable
# Команда для определения ip адреса для обращения из другого контейнера, рекомендуется в документации Selenoid UI: https://aerokube.com/selenoid-ui/latest/
run: |
echo "HOST=$(ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1)" >> $GITHUB_ENV
# Храним переменные как в переменных среды ($GITHUB_ENV), для использования внутри этого yml файла, так и в config.properties, для использования в тестах
- name: Set up host config property
run: echo "host=$HOST:8111" >> src/main/resources/config.properties
- name: Pull Selenoid Chrome
run: docker pull selenoid/vnc_chrome:119.0
- name: Run Selenoid
# Флаг -d запускает контейнер в фоновом режиме (так как, например, контейнер с сервером не имеет окончания, он просто всегда включен,
# и если мы без этого флага в него перейдем, то никогда не сможем перешагнуть к следующему степу
run: |
docker run -d --name selenoid \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/config/:/etc/selenoid/:ro \
-p 4444:4444 \
aerokube/selenoid
# В этом степе нет смысла, так как через GitHub Actions нет доступа к Selenoid UI. Но зато это полезно при локальном запуске через act, для отладки
- name: Run Selenoid UI
run: |
docker run -d --name selenoid-ui \
-p 8080:8080 \
aerokube/selenoid-ui \
--selenoid-uri http://$HOST:4444
- name: Run TeamCity server
# Флаг -u 0 запускает контейнер от имени root, чтобы был доступ на запись файлов в директории, указанные в volume.
# По-хорошему, надо делать chown -R 1000:1000 на эти директории и запускать контейнер без этого флага,
# но это усложнение пайплайна и не приоритет в контексте данного задания.
# Указываем конкретную версию для сервера и агента, так как мало ли, в новой версии могут поменяться используемые локаторы,
# чтобы в рамках этого задания не тратить время на фикс подобных проблем.
run: |
docker run -u 0 -d --name teamcity-server \
-v $(pwd)/tmp/teamcity_server/datadir:/data/teamcity_server/datadir \
-v $(pwd)/tmp/teamcity_server/logs:/opt/teamcity/logs \
-p 8111:8111 \
jetbrains/teamcity-server:2023.11.1
- name: Set up TeamCity server
# Настройка сервера при первом запуске (принятие лицензии, выбор базы данных и т.д.), реализованная в виде теста
run: ./mvnw clean test -Dtest=SetupFirstStartTest#setupTeamCityServerTest
- name: Set up superUserToken environment variable
# Берем из лога контейнера строку с последним упоминанием токена, из нее 6-е слово, что соответствует токену
run: echo "SUPER_USER_TOKEN=$(docker logs teamcity-server | grep 'Super user authentication token' | tail -n 1 | awk '{print $6}')" >> $GITHUB_ENV
- name: Set up superUserToken config property
run: echo "superUserToken=$SUPER_USER_TOKEN" >> src/main/resources/config.properties
- name: Run TeamCity agent
run: |
docker run -e SERVER_URL=http://$HOST:8111 -u 0 -d --name teamcity-agent \
-v $(pwd)/tmp/teamcity_agent/conf:/data/teamcity_agent/conf \
jetbrains/teamcity-agent:2023.11.1
- name: Set up TeamCity agent
# Авторизация агента при первом запуске, реализованная в виде теста
# Не указываем clean, чтобы потом в итоговом репорте были и setup тесты
run: ./mvnw test -Dtest=SetupFirstStartTest#setupTeamCityAgentTest
- name: Run Checkstyle
run: mvn validate -Dcheckstyle.failOnViolation=true
- name: Run API Smoke tests
# Указываем группу, чтобы еще раз не запустить тесты, которые использовались для сетапа сервера и агента
run: ./mvnw test -Dgroups=smoke
- name: Run API Regression tests
# Указываем API Regression сьют
run: ./mvnw test -DsuiteXmlFile=testng-suites/api-regression-suite.xml
- name: Run UI Regression tests
# Указываем UI Regression
run: ./mvnw test -DsuiteXmlFile=testng-suites/ui-regression-suite.xml
- name: Get Allure history # Step to retrieve Allure history
uses: actions/checkout@v4
# Execute even if previous steps fail
if: always()
continue-on-error: true
with:
# Specify the branch to retrieve Allure history from
ref: gh-pages
# Set the destination path for Allure history
path: gh-pages
- name: Allure report action from marketplace # Step to generate Allure report
uses: simple-elf/allure-report-action@master
# Execute even if previous steps fail
if: always()
id: allure-report
with:
# Specify the directory containing Allure results
allure_results: target/allure-results
gh_pages: gh-pages
allure_report: allure-report
# Specify the directory to store Allure history
allure_history: allure-history
# Specify the number of previous reports to keep
keep_reports: 5
- name: Deploy report to GitHub Pages # Step to deploy Allure report to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
# Execute even if previous steps fail
if: always()
with:
# Provide the GitHub token for authentication
github_token: ${{ secrets.GH_TOKEN }}
# Specify the branch to publish the report to
publish_branch: gh-pages
# Specify the directory containing the report
publish_dir: allure-history
- name: Download and extract swagger-coverage # Step to download and extract swagger-coverage with latest version = 1.5.0
run: |
wget https://github.com/viclovsky/swagger-coverage/releases/download/1.5.0/swagger-coverage-1.5.0.zip
unzip swagger-coverage-1.5.0.zip
- name: Run Swagger coverage # Step to calculate rate of coverage API endpoints from Teamcity swagger.json which is located by path http://$HOST:8111/app/rest/swagger.json
if: always()
run: swagger-coverage-commandline-1.5.0/bin/swagger-coverage-commandline -s http://$HOST:8111/app/rest/swagger.json -i swagger-coverage-output -q
- name: Save Swagger coverage # Step to save results of Swagger coverage in an artifact
uses: actions/upload-artifact@v4
if: always()
with:
name: swagger-coverage
path: |
swagger-coverage-report.html
swagger-coverage-results.json