# -*- coding: utf-8 -*- """ 可选桌面 E2E 示例(默认不执行:文件名后缀为 .sample)。 启用方式: 复制本文件为 test_desktop_smoke.py,按目标技能修改提问文案与断言。 运行:pytest tests/desktop/test_desktop_smoke.py -v -s 依赖:pytest、jiangchang_desktop_sdk、匠厂桌面宿主已就绪。 """ from __future__ import annotations import logging import os import pytest from jiangchang_desktop_sdk import AskOptions, JiangchangDesktopClient _logger = logging.getLogger("skill-template-desktop-e2e-sample") if not _logger.handlers: _logger.setLevel(logging.INFO) _h = logging.StreamHandler() _h.setFormatter(logging.Formatter("[E2E-sample] %(message)s")) _logger.addHandler(_h) _ARTIFACT_DIR = os.path.join(os.path.dirname(__file__), "artifacts") class TestDesktopSmokeSample: """最小 smoke:拉起桌面、等待网关、发一条与技能路由相关的问句并做宽松断言。""" @pytest.fixture(autouse=True) def connect_and_teardown(self, request): client = JiangchangDesktopClient() _logger.info("ensure_app_running") client.ensure_app_running(wait_timeout_s=30) client.bring_to_front() client.wait_gateway_ready(timeout_ms=30000) self.client = client yield try: rep = getattr(request.node, "rep_call", None) if rep is not None and rep.failed: os.makedirs(_ARTIFACT_DIR, exist_ok=True) paths = client.snapshot(_ARTIFACT_DIR, tag=request.node.name) _logger.error("snapshot: %s", paths) finally: client.disconnect() def test_gateway_and_simple_ask(self) -> None: """请将 SKILL 名与路由关键词改成你复制后的真实技能。""" answer = self.client.ask( "请使用当前已安装技能执行一次 health 检查并返回 OK 或等价结果。", AskOptions(timeout=120000, new_task=True), ) assert answer assert "OK" in answer or "ok" in answer.lower() or "健康" in answer