import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class StagingPage:
def __init__(self, driver):
self.driver = driver
def open(self, url):
self.driver.get(url)
def is_updated_content_visible(self, expected_text):
try:
element = WebDriverWait(self.driver, 10).until(
EC.visibility_of_element_located((By.XPATH, f"//*[contains(text(), '{expected_text}')]"))
)
return True
except:
return False
def verify_ci_build(ci_api_url, build_id, headers):
response = requests.get(f"{ci_api_url}/builds/{build_id}", headers=headers)
response.raise_for_status()
data = response.json()
return data.get('status') == 'success'
def verify_ci_tests(ci_api_url, build_id, headers):
response = requests.get(f"{ci_api_url}/builds/{build_id}/tests", headers=headers)
response.raise_for_status()
data = response.json()
return all(test['status'] == 'passed' for test in data.get('tests', []))
def verify_cd_deployment(cd_api_url, deployment_id, headers):
response = requests.get(f"{cd_api_url}/deployments/{deployment_id}", headers=headers)
response.raise_for_status()
data = response.json()
return data.get('status') == 'deployed'
def smoke_test_staging(staging_url):
driver = webdriver.Chrome()
page = StagingPage(driver)
try:
page.open(staging_url)
if not page.is_updated_content_visible('New Feature'):
return False
# Additional smoke test steps can be added here
return True
finally:
driver.quit()
# Example usage
ci_api_url = 'https://ci.example.com/api'
cd_api_url = 'https://cd.example.com/api'
headers = {'Authorization': 'Bearer your_token_here'}
build_id = '12345'
deployment_id = '67890'
staging_url = 'https://staging.example.com'
assert verify_ci_build(ci_api_url, build_id, headers), 'CI build failed'
assert verify_ci_tests(ci_api_url, build_id, headers), 'CI tests failed'
assert verify_cd_deployment(cd_api_url, deployment_id, headers), 'CD deployment failed'
assert smoke_test_staging(staging_url), 'Smoke test failed on staging environment'
This script automates the verification of a Continuous Delivery pipeline.
First, it uses requests to call the CI API and check if the build succeeded and all tests passed. Then it calls the CD API to confirm the deployment status.
For the staging environment, it uses Selenium WebDriver to open the application URL and check if the updated content is visible, simulating a smoke test.
The code uses explicit waits to ensure elements are loaded before checking. It separates concerns by having functions for each verification step and a Page Object for UI interaction.
Assertions ensure the test fails clearly if any step does not meet expectations.