> For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt.

# 开始使用：HarmonyOS · Vitest · ChatGPT 订阅 {#get-started}

本页是在 **HarmonyOS** 上使用 **Vitest**、通过 **ChatGPT 订阅**接入模型的配置步骤。如需其他组合，请查看[全部配置路径](/zh/get-started.md#all-setup-paths)。

## 安装 Node.js
安装 Node.js `^20.19.0 || ^22.12.0 || >=24.0.0`，并确认终端中可以执行 `node -v`。
下文命令使用 pnpm。如果尚未安装，请运行 `npm install -g pnpm`。

## 连接 HarmonyOS 设备
运行 Midscene 的电脑需要通过 `hdc` 连接目标 HarmonyOS NEXT 设备。如果已安装 `hdc` 并连接好设备，可直接跳至[确认设备连接](#verify-device-connection)。

### 安装 HDC

HDC（HarmonyOS Device Connector）是 HarmonyOS 官方提供的设备连接命令行工具，可通过以下任一方式安装：

- 通过 [DevEco Studio](https://developer.huawei.com/consumer/cn/deveco-studio/) 安装（推荐）
- 下载 [HarmonyOS 命令行工具（Command Line Tools）](https://developer.huawei.com/consumer/cn/download/)独立安装

在终端运行以下命令，验证 `hdc` 是否安装成功：

```bash
hdc version
```

终端输出版本号即表示安装成功。

:::info 配置 HDC 路径

如果 `hdc` 未加入系统 `PATH`，可以通过设置 `HDC_HOME` 环境变量指向 `hdc` 所在的目录：

```bash
export HDC_HOME=/path/to/hdc/directory
```

:::

### 开启调试并连接设备

1. 在 HarmonyOS 设备的系统设置中进入「系统 > 开发者选项」，开启 **USB 调试**。
2. 使用支持数据传输的 USB 数据线将设备连接到电脑。
3. 保持设备解锁亮屏，并在设备弹窗中允许 USB 调试授权。

### 确认设备连接 {#verify-device-connection}

在终端运行以下命令检查连接状态：

```bash
hdc list targets
```

终端输出设备序列号（Device ID）即表示连接就绪：

```log
0123456789ABCDEF
```

如果同时连接了多台设备，请记录目标设备的序列号，以便后续在 Playground 或项目配置中指定该设备。若输出为空或显示 `[Empty]`，请检查 USB 数据线、连接模式、**USB 调试**开关及手机端的调试授权弹窗。

## 使用 ChatGPT 订阅登录
首先，在终端运行：

```bash
pnpm dlx @midscene/cli model siwc login
```

按照终端提示，在浏览器中登录 ChatGPT 并授权使用订阅额度。授权时可以自行设置 Agent 名称；完成后，可在 ChatGPT 的使用情况页面查看已授权的 Agent。

命令会将凭据保存到 `~/.midscene/siwc.json`。首次使用前需要手动完成这一步登录。

然后在项目目录中，把以下配置写入 `.env` 文件。如果还没有项目，请先新建一个目录并在其中运行 `pnpm init`。

```bash
MIDSCENE_MODEL_AUTH_MODE="siwc"
MIDSCENE_MODEL_NAME="gpt-6-sol"
MIDSCENE_MODEL_FAMILY="gpt-6"
```
可用模型以你的 ChatGPT 账号为准。凭据与额度说明请参阅[使用 ChatGPT 订阅](/zh/chatgpt-subscription.md#额度与凭据)。

## 搭建项目
在 `.env` 所在的项目目录中，验证模型配置：
```bash
pnpm dlx @midscene/test@latest model verify
```
如果验证失败，请参阅[验证模型连接](/zh/model-config.md#verify-model-connectivity)。

### 安装依赖

```bash
pnpm add -D vitest dotenv @midscene/harmony
```

### 配置 Vitest
新建 `vitest.config.ts`。如果项目已在使用 Vitest，可以将设备测试配置单独保存为 `vitest.device.config.ts`，运行时通过 `--config vitest.device.config.ts` 指定，以免影响现有的单元测试配置。

```typescript title="vitest.config.ts"
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    include: ['e2e/**/*.test.ts'],
    environment: 'node',
    testTimeout: 90_000,
    hookTimeout: 90_000,
    fileParallelism: false,
    sequence: { concurrent: false },
  },
});
```

由于模型调用和设备连接耗时较长，请根据实际用例适当调大 `testTimeout` 与 `hookTimeout`。在共享同一台设备时，需关闭文件级并行（`fileParallelism: false`）并保持用例串行执行（`sequence.concurrent: false`），同时避免在代码中调用 `test.concurrent` 或 `describe.concurrent`。相关配置项详见 Vitest 的 [fileParallelism](https://vitest.dev/config/fileparallelism)、[testTimeout](https://vitest.dev/config/testtimeout) 和 [hookTimeout](https://vitest.dev/config/hooktimeout) 文档。

## 编写测试

新建 `e2e/settings.test.ts`，在 `beforeEach` 中为每个用例创建新的 Agent，并在 `afterEach` 中销毁：

```typescript title="e2e/settings.test.ts"
import 'dotenv/config';
import { afterEach, beforeEach, test } from 'vitest';
import { agentFromHdcDevice } from '@midscene/harmony';

let agent: Awaited<ReturnType<typeof agentFromHdcDevice>> | undefined;

beforeEach(async () => {
  agent = await agentFromHdcDevice();
});

afterEach(async () => {
  const currentAgent = agent;
  agent = undefined;
  await currentAgent?.destroy();
});

test('scroll through settings', async () => {
  if (!agent) throw new Error('Agent was not initialized');

  await agent.launch('com.huawei.hmos.settings');
  await agent.aiWaitFor('The Settings app is visible');
  await agent.aiAct('Scroll down one screen');
  await agent.aiAssert('The Settings app is still visible');
});
```
连接多台设备时，通过 `agentFromHdcDevice(deviceId)` 指定设备 ID。连接参数详见 [HarmonyOS SDK 文档](/zh/sdk/harmonyos.md)。

`dotenv/config` 用于从项目的 `.env` 文件加载模型配置（Playground 中的配置不会自动同步到测试进程）。

当 `aiAssert` 的断言未通过时，会直接抛出错误，Vitest 随即将其所在用例标记为失败，并继续执行 `afterEach` 销毁 Agent。你也可以用 `aiQuery` 等方法提取界面数据，再交给 Vitest 的 `expect` 进行校验。更多交互与提取方法见 [Agent API 参考](/zh/reference/index.md#interaction-methods)。

## 运行测试并查看报告

```bash
pnpm exec vitest run e2e/settings.test.ts
```

运行后，Vitest 会在终端汇总用例的通过或失败状态；Midscene SDK 则默认在 `midscene_run/report/` 下生成各 Agent 的执行报告，并在终端打印报告路径。在浏览器中打开生成的 HTML 报告，即可查看各步骤的截图、AI 执行过程和断言结果。

与 Playwright Test 不同，Vitest 接入直接使用 SDK 内置的报告生成机制，无需额外部署 reporter。Vitest 的测试结果与 Midscene 的 Agent 报告相互独立；如需合并或进一步处理报告文件，请参阅[处理报告文件](/zh/consume-report-file.md)。

测试通过且报告中能看到每一步的截图，即表示模型、运行环境和项目都已正常工作。

## 下一步
- **查看更多案例**：[案例展示](/zh/showcases.md)收录了各平台的演示视频和完整执行报告。

- **查阅 API**：[API reference](/zh/reference.md) 列出了全部 Agent 方法及其参数。
- **将 AI 调用与代码结合**：[关键 API](/zh/basics.md#javascript-orchestration) 说明了 `aiAct`、即时操作和洞察类 API 的适用场景。

- **多个测试共用设备**：[生命周期与设备独占](/zh/sdk/vitest.md#生命周期与设备独占)说明了多个测试共用一台设备时如何创建和销毁 Agent。
