You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Playwright Python实现Swagger API自动化及Ansible Tower自动化框架需求

一、Playwright Python实现Swagger API自动化

环境准备

  • 安装依赖包:
    pip install playwright
    playwright install chrome
    

核心实现思路

Swagger UI是网页版API调试界面,Playwright可模拟Chrome浏览器操作页面元素,完成API参数填充、请求发送、响应断言全流程。

示例脚本

from playwright.sync_api import sync_playwright

def swagger_api_test():
    with sync_playwright() as p:
        # 启动Chrome,打开目标Swagger页面
        browser = p.chromium.launch(headless=False)  # 调试时设为False,生产环境改为True
        page = browser.new_page()
        page.goto("http://your-swagger-ui-url")

        # 等待页面加载,定位目标API(以POST /api/users为例)
        page.wait_for_selector('text="POST /api/users"')
        # 展开API详情面板
        page.click('text="POST /api/users"')

        # 激活"Try it out"模式
        page.click('button:has-text("Try it out")')

        # 填充请求体参数
        request_body = '{"username": "test_user", "email": "test@example.com"}'
        page.fill('textarea[name="body"]', request_body)

        # 发送请求
        page.click('button:has-text("Execute")')

        # 等待响应加载,断言状态码和响应内容
        page.wait_for_selector('.response-col_status')
        status_code = page.text_content('.response-col_status')
        assert status_code == "201 Created", f"预期状态码201,实际得到{status_code}"

        response_body = page.text_content('.response_body')
        assert '"username": "test_user"' in response_body, "响应内容未包含预期数据"

        browser.close()

if __name__ == "__main__":
    swagger_api_test()

关键注意事项

  • 元素定位:优先使用文本选择器(text="xxx")或CSS属性选择器,避免依赖Swagger动态生成的元素ID
  • 等待机制:必须用wait_for_selector确保元素加载完成,避免页面渲染延迟导致的定位失败
  • 复用性:可将API操作封装为通用函数,传入API路径、请求参数、断言条件等,适配不同接口测试需求
二、Ansible Tower自动化的Python框架

Ansible Tower(现AWX)支持REST API和官方Python SDK,可实现作业模板管理、作业启动、状态查询等自动化操作,以下两种方案可选:

方案1:使用官方SDK awxkit

环境准备

pip install awxkit

示例代码

from awxkit.api.pages import *

def tower_job_automation():
    # 连接Ansible Tower实例
    tower = AwxApi("http://your-tower-url", username="admin", password="your-password")

    # 根据名称获取目标作业模板
    job_template = tower.job_templates.get(name="Deploy Web Server")

    # 启动作业
    job = job_template.launch()

    # 等待作业执行完成
    job.wait_until_completed()

    # 验证作业状态
    assert job.status == "successful", f"作业执行失败,状态:{job.status}"

    # 打印作业日志
    print("作业日志:\n", job.stdout)

if __name__ == "__main__":
    tower_job_automation()

方案2:直接调用REST API(灵活度更高)

环境准备

pip install requests

示例代码

import requests
from requests.auth import HTTPBasicAuth

def tower_api_automation():
    tower_url = "http://your-tower-url"
    username = "admin"
    password = "your-password"

    # 获取认证Token
    auth_response = requests.post(
        f"{tower_url}/api/v2/tokens/",
        auth=HTTPBasicAuth(username, password)
    )
    auth_response.raise_for_status()
    token = auth_response.json()["token"]
    headers = {"Authorization": f"Bearer {token}"}

    # 根据名称查询作业模板ID
    templates_response = requests.get(
        f"{tower_url}/api/v2/job_templates/",
        headers=headers,
        params={"name": "Deploy Web Server"}
    )
    templates_response.raise_for_status()
    template_id = templates_response.json()["results"][0]["id"]

    # 启动作业
    launch_response = requests.post(
        f"{tower_url}/api/v2/job_templates/{template_id}/launch/",
        headers=headers
    )
    launch_response.raise_for_status()
    job_id = launch_response.json()["id"]

    # 轮询作业状态,直到结束
    while True:
        job_response = requests.get(
            f"{tower_url}/api/v2/jobs/{job_id}/",
            headers=headers
        )
        job_response.raise_for_status()
        job_status = job_response.json()["status"]
        if job_status in ["successful", "failed", "canceled"]:
            break

    assert job_status == "successful", f"作业执行失败,状态:{job_status}"

if __name__ == "__main__":
    tower_api_automation()

核心建议

  • 凭证管理:避免硬编码敏感信息,使用环境变量或密钥管理工具存储用户名、密码、Token
  • 错误处理:添加try-except块捕获API请求异常,提升脚本稳定性
  • 封装复用:将Tower常用操作(模板查询、作业启动、状态检查)封装为工具类,减少重复代码
  • 集成场景:可将两种自动化流程结合,比如用Playwright验证API可用性后,调用Ansible Tower执行部署作业

内容的提问来源于stack exchange,提问作者Ali Haider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 18:04:50