dart-test

dart pub add dev:tracera_test

需要 Dart ≥ 3.8 和 package:test ≥ 1.25(见 自动化测试适配器)。tracera_test 在 pub.dev 上的页面。

环境变量与运行模式:自动化测试适配器。

在 main 函数开头调用一次 installTracera()。保留标准的 package:test 导入;只需添加 installTracera 和 tracera 调用:

import 'package:test/test.dart';
import 'package:tracera/tracera.dart' as tracera;
import 'package:tracera_test/tracera_test.dart';

void main() {
  installTracera();

  test('user can sign in', () {
    tracera.step('open login', () {
      // ...
    });
  }, tags: ['tracera-id-42']);
}

绑定 testCaseId 与 autotestName

为 test 或 group 添加标签 tracera-id-‹id›。添加 tracera-name-‹name› 可设置 autotestName。名称标签不能包含空格;若名称需要空格,请在测试内部用 tracera.testCase 绑定。若未指定名称标签,则 autotestName 取 package:test 的测试名称。

test('user can sign in', () {
  // ...
}, tags: ['tracera-id-42', 'tracera-name-e2e_sign_in']);

test('user can sign out', () {
  tracera.testCase(43, 'e2e/sign out');
});

若要消除 package:test 对未定义标签的警告,请把 Tracera 标签列在 dart_test.yaml 的 tags: 下。

Skip

在测试内部调用 markTestSkipped('reason')。结果会作为 Skipped 上报,原因会作为 comment 写入结果。

test('checkout', () {
  markTestSkipped('needs a seeded account');
}, tags: ['tracera-id-42']);

test 或 group 上的 skip: 不会写入报告。

步骤

使用 tracera.step('…', () { … })。setUp 回调进入结果的 准备,测试体进入 测试,tearDown 回调进入 清理。setUpAll / tearDownAll 内的步骤不会写入报告。

setUp(() {
  tracera.step('open shop', () {});
});

test('checkout', () async {
  tracera.testCase(10);

  await tracera.step('add item', () async {
    tracera.step('nested leaf', () {});
  });
});

tearDown(() {
  tracera.step('close shop', () {});
});

注释、错误与附件

限制与允许的 MIME 类型:自动化测试适配器。

tracera.comment、tracera.error 和附件会添加到当前打开的步骤;若没有打开的步骤,则添加到结果。tracera.attachmentFile 接收文件路径;tracera.attachmentBytes 接收名称和字节,并可选传入 mimeType。附件在结果上报时上传。

tracera.comment('result-level note');
tracera.error('result-level error');
tracera.attachmentFile('test/fixtures/screenshot.png');
tracera.step('open login', () {
  tracera.comment('step note');
  tracera.attachmentBytes(
    'body.json',
    utf8.encode('{"ok":true}'),
    mimeType: 'application/json',
  );
});

参数化测试

在循环中为每一行创建一个 test。若未指定名称,则 autotestName 取测试名称,因此请为每一行设置不同的标题。若要为每一行指定名称,请把名称传给 tracera.testCase:

for (final login in ['alice', 'bob']) {
  test('sign in as $login', () {
    tracera.testCase(7, 'login as $login');
  });
}

使用 retry: 重试测试时,只上报最后一次尝试。结果的 Env 标签页随后会包含 DART_TEST_RETRY(见 自动化测试适配器)。