From 5bc1c626bed8ccb74d9555563d3864bc95423695 Mon Sep 17 00:00:00 2001 From: Sudip Date: Mon, 15 Apr 2024 14:17:25 +0545 Subject: [PATCH 1/3] Add allure reporting in backend test --- tests/govtool-backend/.gitignore | 1 + tests/govtool-backend/requirements.txt | 1 + tests/govtool-backend/test_cases/test_ada_holder.py | 4 +++- tests/govtool-backend/test_cases/test_drep.py | 7 ++++++- tests/govtool-backend/test_cases/test_proposal.py | 3 +++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/govtool-backend/.gitignore b/tests/govtool-backend/.gitignore index 40bb37348..ee3cf2608 100644 --- a/tests/govtool-backend/.gitignore +++ b/tests/govtool-backend/.gitignore @@ -35,3 +35,4 @@ Thumbs.db # Other *.bak +reports/ diff --git a/tests/govtool-backend/requirements.txt b/tests/govtool-backend/requirements.txt index b20c7ad50..386c06cf4 100644 --- a/tests/govtool-backend/requirements.txt +++ b/tests/govtool-backend/requirements.txt @@ -2,3 +2,4 @@ pytest==7.4.0 pytest-github-report==0.0.1 python-dotenv==1.0.0 requests==2.31.0 +allure-pytest==2.13.5 \ No newline at end of file diff --git a/tests/govtool-backend/test_cases/test_ada_holder.py b/tests/govtool-backend/test_cases/test_ada_holder.py index 651a31218..2f0b37515 100644 --- a/tests/govtool-backend/test_cases/test_ada_holder.py +++ b/tests/govtool-backend/test_cases/test_ada_holder.py @@ -1,5 +1,7 @@ from models.TestData import AdaHolder, Delegation +import allure +@allure.story("AdaHolder") def test_ada_delegation(govtool_api, ada_holder_delegate_to_drep): print(ada_holder_delegate_to_drep) response = govtool_api.ada_holder_get_current_delegation(ada_holder_delegate_to_drep["stakeKey"]) @@ -7,7 +9,7 @@ def test_ada_delegation(govtool_api, ada_holder_delegate_to_drep): if resp: assert ada_holder_delegate_to_drep["drepId"] in resp - +@allure.story("Drep") def test_check_voting_power(govtool_api, ada_holder_delegate_to_drep): response = govtool_api.ada_holder_get_voting_power(ada_holder_delegate_to_drep["stakeKey"]) ada_holder_voting_power = response.json() diff --git a/tests/govtool-backend/test_cases/test_drep.py b/tests/govtool-backend/test_cases/test_drep.py index c077e9169..b4b74e62f 100644 --- a/tests/govtool-backend/test_cases/test_drep.py +++ b/tests/govtool-backend/test_cases/test_drep.py @@ -1,5 +1,7 @@ from models.TestData import Drep, VoteonProposal, Vote, Proposal +import allure +@allure.story("Drep") def validate_drep_list(drep_list: [Drep]) -> bool: for item in drep_list: if not isinstance(item, dict): @@ -10,6 +12,7 @@ def validate_drep_list(drep_list: [Drep]) -> bool: return False return True +@allure.story("Drep") def validate_voteonproposal_list(voteonproposal_list: [VoteonProposal]) -> bool: for item in voteonproposal_list: if not isinstance(item, dict): @@ -34,12 +37,13 @@ def validate_voteonproposal_list(voteonproposal_list: [VoteonProposal]) -> bool: return True +@allure.story("Drep") def test_list_drep(govtool_api): response = govtool_api.drep_list() drep_list = response.json() validate_drep_list(drep_list) - +@allure.story("Drep") def test_initialized_getVotes( govtool_api, registered_drep): response = govtool_api.drep_getVotes(registered_drep["drepId"]) validate_voteonproposal_list(response.json()) @@ -49,6 +53,7 @@ def test_initialized_getVotes( govtool_api, registered_drep): assert len(proposals)==0 +@allure.story("Drep") def test_initialized_getVotingPower(govtool_api, registered_drep): response = govtool_api.drep_get_voting_power(registered_drep["drepId"]) assert isinstance(response.json(), int) diff --git a/tests/govtool-backend/test_cases/test_proposal.py b/tests/govtool-backend/test_cases/test_proposal.py index 7533d56ac..aa32990cc 100644 --- a/tests/govtool-backend/test_cases/test_proposal.py +++ b/tests/govtool-backend/test_cases/test_proposal.py @@ -1,5 +1,7 @@ from models.TestData import Proposal +import allure +@allure.story("Proposal") def validate_proposal_list(proposal_list: [Proposal]) -> bool: for item in proposal_list: if not isinstance(item, dict): @@ -13,6 +15,7 @@ def validate_proposal_list(proposal_list: [Proposal]) -> bool: return True +@allure.story("Proposal") def test_list_proposal(govtool_api): response = govtool_api.proposal_list() proposal_list = response.json() From 011ae4641ba51aff406d359932c318ab9c225837 Mon Sep 17 00:00:00 2001 From: Sudip Date: Tue, 16 Apr 2024 10:56:16 +0545 Subject: [PATCH 2/3] remove pytest version constraint --- tests/govtool-backend/requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/govtool-backend/requirements.txt b/tests/govtool-backend/requirements.txt index 386c06cf4..9ab683282 100644 --- a/tests/govtool-backend/requirements.txt +++ b/tests/govtool-backend/requirements.txt @@ -1,4 +1,3 @@ -pytest==7.4.0 pytest-github-report==0.0.1 python-dotenv==1.0.0 requests==2.31.0 From d709d4fedecbde3a20847c57ad9126c14d94298d Mon Sep 17 00:00:00 2001 From: Nabin Kawan Date: Tue, 16 Apr 2024 12:43:11 +0545 Subject: [PATCH 3/3] Publish report to gh-pages --- .github/workflows/test_backend.yml | 127 +++++++++++++++++++++++------ generate_latest_report_redirect.sh | 18 ++++ generate_report_details.sh | 11 +++ register_report.sh | 15 ++++ 4 files changed, 145 insertions(+), 26 deletions(-) create mode 100644 generate_latest_report_redirect.sh create mode 100644 generate_report_details.sh create mode 100644 register_report.sh diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index eb17b9e46..7c53ee7b3 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -3,12 +3,12 @@ name: Backend Test on: push: paths: - - .github/workflows/test_backend.yml + - .github/workflows/test_backend.yml # - govtool/backend # - tests/govtool-backend schedule: - - cron: '0 0 * * *' + - cron: "0 0 * * *" workflow_dispatch: inputs: deployment: @@ -21,29 +21,104 @@ on: - "govtool-sanchonet.cardanoapi.io/api" jobs: - build: + backend-tests: runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: 3.11.4 - cache: 'pip' - - - name: Run Backend Test - working-directory: tests/govtool-backend - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pytest -v --github-report - env: - BASE_URL: https://${{inputs.deployment || 'staging.govtool.byron.network/api' }} - METRICS_URL: https://metrics.cardanoapi.io - METRICS_API_SECRET: "${{ secrets.METRICS_SERVER_SECRET_TOKEN }}" - - # - uses: schemathesis/action@v1 - # with: - # schema: "http://localhost:8080/swagger.json" + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.11.4 + cache: "pip" + + - name: Run Backend Test + working-directory: tests/govtool-backend + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + python -m pytest --alluredir allure-results + env: + BASE_URL: https://${{inputs.deployment || 'staging.govtool.byron.network/api' }} + METRICS_URL: https://metrics.cardanoapi.io + METRICS_API_SECRET: "${{ secrets.METRICS_SERVER_SECRET_TOKEN }}" + + - name: Upload report + uses: actions/upload-artifact@v3 + if: always() + with: + name: allure-results + path: tests/govtool-backend/allure-results + + publish-report: + runs-on: ubuntu-latest + if: always() + needs: backend-tests + steps: + - uses: actions/checkout@v4 + - name: Download results + uses: actions/download-artifact@v3 + with: + name: allure-results + path: allure-results + + - name: Get Allure history + uses: actions/checkout@v4 + continue-on-error: true + with: + ref: gh-pages + path: gh-pages + repository: ${{vars.GH_PAGES}} + token: ${{secrets.PERSONAL_TOKEN}} + + - name: Register report + id: register-project + if: ${{success()}} + run: | + chmod +x ./register_report.sh + ./register_report.sh + - if: steps.register-project.outputs.project_exists != 'true' + uses: JamesIves/github-pages-deploy-action@v4 + with: + token: ${{ secrets.PERSONAL_TOKEN }} + repository-name: ${{vars.GH_PAGES}} + branch: gh-pages + folder: project + + - name: Generate report details + id: report-details + run: | + chmod +x ./generate_report_details.sh + ./generate_report_details.sh + + - name: Build report + uses: simple-elf/allure-report-action@master + if: always() + id: allure-report + with: + allure_results: allure-results + gh_pages: gh-pages/${{env.REPORT_NAME}} + allure_report: allure-report + allure_history: allure-history + keep_reports: 2000 + report_url: ${{steps.report-details.outputs.report_url}} + github_run_num: ${{steps.report-details.outputs.report_number}} + + - name: Generate Latest Report + run: | + chmod +x ./generate_latest_report_redirect.sh + ./generate_latest_report_redirect.sh ${{steps.report-details.outputs.report_number}} + + - name: Deploy report to Github Pages + uses: JamesIves/github-pages-deploy-action@v4 + with: + token: ${{ secrets.PERSONAL_TOKEN }} + repository-name: ${{vars.GH_PAGES}} + branch: gh-pages + folder: build + target-folder: ${{ env.REPORT_NAME }} + + env: + REPORT_NAME: backend + GH_PAGES: ${{vars.GH_PAGES}} diff --git a/generate_latest_report_redirect.sh b/generate_latest_report_redirect.sh new file mode 100644 index 000000000..de2ad8646 --- /dev/null +++ b/generate_latest_report_redirect.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +REPORT_NUMBER="$1" + +mkdir -p build +cp -r allure-history/*[^index.html] build/ +allure_report_path=$(basename "$GH_PAGES") + +cat < build/index.html + + + + + + Redirecting... + + +EOF diff --git a/generate_report_details.sh b/generate_report_details.sh new file mode 100644 index 000000000..f9e4416b7 --- /dev/null +++ b/generate_report_details.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +if [[ ! -d "gh-pages/$REPORT_NAME" ]]; then + latest_number=0 +else + gh_pages_content=$(ls "gh-pages/$REPORT_NAME/") + latest_number=$(echo "$gh_pages_content" | grep -Eo '[0-9]+' | sort -nr | head -n 1) +fi + +echo "::set-output name=report_number::$((latest_number+1))" +echo "::set-output name=report_url::https://$(dirname "$GH_PAGES").github.io/$(basename "$GH_PAGES")/$REPORT_NAME" diff --git a/register_report.sh b/register_report.sh new file mode 100644 index 000000000..a36016ebb --- /dev/null +++ b/register_report.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +PROJECT_DIR="project" +PROJECT_FILE="projects.txt" + +mkdir -p "$PROJECT_DIR" +cp -r gh-pages/* "$PROJECT_DIR" || true + +if grep -q "$REPORT_NAME" "$PROJECT_DIR/$PROJECT_FILE"; then + echo "Project already exists" + echo "::set-output name=project_exists::true" +else + echo "$REPORT_NAME" >> "$PROJECT_DIR/$PROJECT_FILE" + echo "::set-output name=project_exists::false" +fi