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(见 自动化测试适配器)。