test/framework/business/dev_machine.py
2026-03-17 14:59:41 +08:00

82 lines
3.1 KiB
Python

import time
from framework.core.base_api import BaseAPI
from framework.config.settings import Config
from framework.core.logger import get_logger
from framework.models.result import StepResult
logger = get_logger("DevMachineService")
class DevMachineService(BaseAPI):
def __init__(self):
super().__init__(Config.BASE_URL, Config.AUTH_TOKEN, Config.COOKIE)
def create_machine(self, name):
"""创建开发机"""
body = {
"displayName": name,
"imageID": Config.DevMachine.IMAGE_ID,
"skuID": Config.DevMachine.SKU_ID,
"sshPublicKey": Config.DevMachine.SSH_KEY,
"systemDiskSize": Config.DevMachine.DISK_SIZE,
"sourceDir": "",
}
headers = self.get_common_headers("/dev-machine")
headers["content-type"] = "application/json"
data = self.request("POST", "/api/artificerApi/devMachine/createInstance", headers=headers, json=body)
instance_id = data.get("data", {}).get("instanceId") or data.get("instanceId")
return instance_id
def stop_machine(self, instance_id):
"""关机"""
body = {"instanceId": instance_id}
return self.request("POST", "/api/artificerApi/devMachine/stopInstance", json=body)
def start_machine(self, instance_id):
"""开机"""
body = {"instanceId": instance_id}
return self.request("POST", "/api/artificerApi/devMachine/startInstance", json=body)
def delete_machine(self, instance_id):
"""删除"""
body = {"instanceId": instance_id}
return self.request("POST", "/api/artificerApi/devMachine/deleteInstance", json=body)
def run_lifecycle_test(self, name, progress_callback=None):
results = []
instance_id = None
def _log(msg):
logger.info(msg)
if progress_callback: progress_callback(msg)
try:
_log(f"Step 1: 创建 {name}")
t0 = time.time()
instance_id = self.create_machine(name)
results.append(StepResult("创建开发机", True, "成功", time.time()-t0))
time.sleep(Config.WAIT['create'])
_log("Step 2: 关机")
t0 = time.time()
self.stop_machine(instance_id)
results.append(StepResult("关机开发机", True, "成功", time.time()-t0))
time.sleep(Config.WAIT['stop'])
_log("Step 3: 开机")
t0 = time.time()
self.start_machine(instance_id)
results.append(StepResult("开机开发机", True, "成功", time.time()-t0))
time.sleep(Config.WAIT['start'])
_log("Step 4: 删除")
t0 = time.time()
self.delete_machine(instance_id)
results.append(StepResult("删除开发机", True, "成功", time.time()-t0))
except Exception as e:
logger.error(f"Flow failed: {e}")
results.append(StepResult("执行中止", False, str(e)))
return results, instance_id or "N/A"