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.
210 lines
9.4 KiB
YAML
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()
|