DigitalConsumer.FixMyGlass/azure-pipelines-automated-testing.yml
maguire-arman 92c223487a Updating 836 with 631
Adds a new environment variable to skip content site checks, improving test environment flexibility.
Improves the "nextPage" function in BasePage to handle loader elements and button states more reliably.
Adds support for selecting loss location in CCPolicyInfoPage to reflect claim details accurately.
Updates assertion methods to use Soft assertions for smoother test execution.
Adds a new test case "InsuranceMeemicNearSchoolVerified" to expand test coverage.
2025-07-08 14:59:48 -04:00

210 lines
9.4 KiB
YAML

trigger: none
schedules:
- cron: 0 9 * * MON-FRI
always: true
displayName: Daily Test Automation Run for FMG-NextGen
branches:
include:
- develop
pool: "Default"
variables:
# - group: Digital-Infrastructure
# - group: FMG-BuildBranches
- name: dockerImageName
value: "playwright-tests"
- name: imageTag
value: "$(Build.BuildId)"
- name: totalShards
value: 4
- name: IS_REGRESSION
value: "true"
- name: JIRA_BOARD_ID
value: "845"
- name: JIRA_EPIC_KEY
value: "CASH-208"
- name: JIRA_PROJECT_KEY
value: "CASH"
stages:
- stage: TestPr
displayName: Run Playwright Test
jobs:
- job: playwright_tests
continueOnError: true
strategy:
matrix:
shard1:
shardNumber: 1
shard2:
shardNumber: 2
shard3:
shardNumber: 3
shard4:
shardNumber: 4
steps:
- script: |
echo "Starting Docker cleanup to free space..."
# Remove all stopped containers
echo "Removing stopped containers..."
docker container prune -f
# Remove dangling images (untagged)
echo "Removing dangling images..."
docker image prune -f
# Remove unused volumes
echo "Removing unused volumes..."
docker volume prune -f
# Show disk usage after cleanup
echo "Docker system usage after cleanup:"
docker system df
echo "Docker cleanup completed!"
displayName: "Docker Cleanup"
- task: Docker@2
displayName: "Build Docker Image"
inputs:
command: build
dockerfile: Dockerfile.playwright
repository: $(dockerImageName)
tags: $(imageTag)
arguments: "--no-cache --pull"
- script: |
# Create container and run tests
container_id=$(docker create \
--ipc=host \
-e "CCIS_API_AUTH=$(CCIS_API_AUTH)" \
-e "SKIP_CONTENT_SITE=$(SKIP_CONTENT_SITE)" \
-e "BASE_URL=$(BASE_URL)" \
-e "CCIS_API_URL=$(CCIS_API_URL)" \
-e "ADMIN_SERVICE_API_URL=$(ADMIN_SERVICE_API_URL)" \
-e "SHARD=$(shardNumber)" \
-e CI=true \
-e "NODE_ENV=$(NODE_ENV)" \
$(dockerImageName):$(imageTag) \
npx concurrently -k -n "server,playwright"\
"sed -i \"s|^process\.env\.VUE_APP_CONSUMER_CF_DISTRO = .*|process\.env\.VUE_APP_CONSUMER_CF_DISTRO='https://digitalapi.test.safelite.io'|\" \"./vue.config.js\" && echo \"Updated config file to use TEST APIs\" && npm run serve -- --port=8080"\
"npx wait-on http://localhost:8080/fmg/ && npm run test:playwright -- --shard=$(shardNumber)/$(totalShards) --reporter=list,blob --grep \"@CASH|@Alert\"")
# Start container and stream logs
echo "Starting tests for shard $(shardNumber)..."
docker start -a $container_id
# Create directory for test results
echo "Creating test results directory..."
mkdir -p $(System.DefaultWorkingDirectory)/blob-reports/shard-$(shardNumber)
# Copy test results from container
echo "Copying test results..."
docker cp $container_id:/app/blob-report/. $(System.DefaultWorkingDirectory)/blob-reports/shard-$(shardNumber)/
# Remove container
echo "Cleaning up container..."
docker rm $container_id
# Check if tests failed
if [ $? -ne 0 ]; then
echo "Tests failed in shard $(shardNumber) or tests don't exist for this shard number!"
exit 0 # Suppress error. It will be visible in report.
fi
displayName: "Run Playwright Tests - Shard $(shardNumber)"
- task: PublishPipelineArtifact@1
displayName: "Publish Test Reports - Shard $(shardNumber)"
condition: always()
inputs:
targetPath: "$(System.DefaultWorkingDirectory)/blob-reports/shard-$(shardNumber)"
artifact: "playwright-report-shard-$(shardNumber)"
publishLocation: "pipeline"
- script: |
docker rmi $(dockerImageName):$(imageTag) -f
displayName: "Cleanup Docker Image"
condition: always()
- job: download_and_merge_reports
dependsOn: playwright_tests
timeoutInMinutes: 8
cancelTimeoutInMinutes: 10
steps:
- task: DownloadPipelineArtifact@2
inputs:
targetPath: "$(System.DefaultWorkingDirectory)/playwright-reports"
- task: Docker@2
displayName: "Build Docker Image"
inputs:
command: build
dockerfile: Dockerfile.playwright
repository: $(dockerImageName)
tags: $(imageTag)
arguments: "--no-cache --pull"
- bash: |
# Create container for jira writeback
container_id=$(docker create \
--ipc=host \
-e "JIRA_SERVER=$(JIRA_SERVER)" \
-e "JIRA_USERNAME=$(JIRA_USERNAME)" \
-e "JIRA_API_KEY=$(JIRA_API_KEY)" \
-e "IS_REGRESSION=$(IS_REGRESSION)" \
-e "JIRA_BOARD_ID=$(JIRA_BOARD_ID)" \
-e "JIRA_EPIC_KEY=$(JIRA_EPIC_KEY)" \
-e "JIRA_PROJECT_KEY=$(JIRA_PROJECT_KEY)" \
$(dockerImageName):$(imageTag) \
bash -c "echo \"Moving Playwright reports out of subfolders...\" &&
find ./playwright-reports/ -mindepth 2 -type f -exec mv {} ./playwright-reports/ \; &&
echo \"Merging reports...\" &&
PLAYWRIGHT_JUNIT_OUTPUT_DIR='/app/test-results' PLAYWRIGHT_JUNIT_OUTPUT_NAME='junit_results.xml' npx playwright merge-reports --reporter='playwright-tests/impl/reporter/JiraWritebackReporter.ts',junit ./playwright-reports
echo \"Contents of ortoni-report:\" && ls ./ortoni-report &&
echo 'Current dir: ' && pwd
echo 'Contents of current dir: ' && ls
echo 'Contents of /app/test-results' && ls /app/test-results ")
# Start container and stream logs
echo "Starting merge"
docker start -a $container_id
# Create directory for test results
echo "Creating test results directory..."
mkdir -p $(System.DefaultWorkingDirectory)/ortoni-report
mkdir -p $(System.DefaultWorkingDirectory)/test-results
# Copy test results from container
echo "Copying test results..."
docker cp $container_id:/app/ortoni-report/. $(System.DefaultWorkingDirectory)/ortoni-report
docker cp $container_id:/app/test-results/junit_results.xml $(System.DefaultWorkingDirectory)/test-results
# Remove container
echo "Cleaning up container..."
docker rm $container_id
env:
JIRA_API_KEY: $(JIRA_API_KEY)
displayName: merge_and_publish_results_to_jira
- task: PublishTestResults@2
displayName: "Publish test results"
inputs:
searchFolder: "test-results"
testResultsFormat: "JUnit"
testResultsFiles: "junit_results.xml"
mergeTestResults: true
failTaskOnFailedTests: false
testRunTitle: "Playwright Tests"
condition: succeededOrFailed()
- task: PublishPipelineArtifact@1
displayName: "Publish Merged Report"
condition: always()
inputs:
targetPath: "$(System.DefaultWorkingDirectory)/ortoni-report"
artifact: "playwright-merged-report"
publishLocation: "pipeline"
- script: |
docker rmi $(dockerImageName):$(imageTag) -f
displayName: "Cleanup Docker Image"
condition: always()