| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | import jsonimport requestsimport pytest@pytest.fixturedef api_url():    return "http://127.0.0.1:8086/api/v1/actions"@pytest.fixturedef valid_payload():    return {        "openapi_schema": {            "openapi": "3.0.0",            "info": {                "title": "OpenWeatherMap One Call API",                "description": "API for accessing comprehensive weather data from OpenWeatherMap.",                "version": "1.0.0",            },            "servers": [                {                    "url": "https://api.openweathermap.org/data/3.0",                    "description": "OpenWeatherMap One Call API server",                }            ],            "paths": {                "/onecall": {                    "get": {                        "summary": "Get Comprehensive Weather Data",                        "description": "Retrieves weather data for a specific latitude and longitude.",                        "operationId": "get_weather_data",                        "parameters": [                            {                                "in": "query",                                "name": "lat",                                "schema": {"type": "number", "format": "float", "minimum": -90, "maximum": 90},                                "required": True,                                "description": "Latitude, decimal (-90 to 90).",                            },                            {                                "in": "query",                                "name": "lon",                                "schema": {"type": "number", "format": "float", "minimum": -180, "maximum": 180},                                "required": True,                                "description": "Longitude, decimal (-180 to 180).",                            },                            {                                "in": "query",                                "name": "exclude",                                "schema": {"type": "string"},                                "required": False,                                "description": "Exclude some parts of the weather data(current, minutely, hourly, daily, alerts).",                            },                            {                                "in": "query",                                "name": "appid",                                "schema": {"type": "string", "enum": ["101f41d3ff4095824722d57a513cb80a"]},                                "required": True,                                "description": "Your unique API key.",                            },                        ],                        "responses": {                            "200": {                                "description": "Successful response with comprehensive weather data.",                                "content": {"application/json": {"schema": {"type": "object", "properties": {}}}},                            }                        },                    }                }            },        }    }@pytest.fixturedef created_action_id(api_url, valid_payload):    # 在创建动作的 fixture 中执行创建动作并返回动作 ID    headers = {"Content-Type": "application/json"}    response = requests.post(api_url, headers=headers, json=valid_payload)    assert response.status_code == 200    return response.json()[0]["id"]# 测试创建动作def test_create_action(api_url, valid_payload):    headers = {"Content-Type": "application/json"}    response = requests.post(api_url, headers=headers, json=valid_payload)    assert response.status_code == 200# 测试获取动作def test_get_action(api_url, created_action_id):    get_url = f"{api_url}/{created_action_id}"    response = requests.get(get_url)    assert response.status_code == 200# 测试更新动作def test_update_action(api_url, valid_payload, created_action_id):    update_url = f"{api_url}/{created_action_id}"    valid_payload["openapi_schema"]["paths"]["/onecall"]["get"]["operationId"] = "update_test"    headers = {"Content-Type": "application/json"}    response = requests.post(update_url, headers=headers, json=valid_payload)    assert response.status_code == 200    assert response.json()["operation_id"] == "update_test"# 测试删除动作def test_delete_action(api_url, created_action_id):    delete_url = f"{api_url}/{created_action_id}"    response = requests.delete(delete_url)    assert response.status_code == 200# 测试删除动作def test_run_action(api_url, created_action_id):    run_action_url = f"{api_url}/{created_action_id}/run"    payload = json.dumps({"parameters": {"lon": 120.1552, "lat": 30.2741}})    headers = {"Content-Type": "application/json"}    response = requests.post(run_action_url, headers=headers, data=payload)    assert response.status_code == 200
 |