NUnit
<PackageReference Include="Tracera.NUnit" Version="*" />
需要 .NET ≥ 8 和 NUnit ≥ 4(见 自动化测试适配器)。Tracera.NUnit on NuGet。
环境变量、运行模式与重试:自动化测试适配器。
重试 Env 键:NUNIT_RETRY。
推荐在程序集上启用,以便套件结束后适配器能结束它创建的运行。仅标在测试类上仍会上传结果,但结束运行可能要等到进程退出:
[assembly: TraceraNUnit]
[TraceraNUnit] // optional on a test class when the assembly attribute is present
public class LoginTests
{
// …
}
绑定 testCaseId 与 autotestName
照常使用 NUnit 标准 API,以及全局类型 Tracera。
在声明时(推荐 — 即使测试体提前跳过也会绑定):
using NUnit.Framework;
[assembly: TraceraNUnit]
public class LoginTests
{
[Test]
[Tracera.Id(42, name: "e2e/login")]
public void Login()
{
Assert.That(true);
}
}
在测试内部:
[Test]
public void Login()
{
Tracera.TestCase(42, "e2e/login");
Assert.That(true);
}
Skip
使用 NUnit 自带的 skip(Assert.Ignore、Assert.Inconclusive、[Ignore] 等)。Skip 原因会作为 comment 添加到结果。
步骤
使用 Tracera.Step("…", () => { … })、Tracera.Step("…", async () => { … })(会等待 async 回调完成),或在方法上加 [Tracera.Step("…")](同步与 async Task)。若 [Tracera.Step] 标题为空或省略,步骤标题为方法名;标题中的 {0} / {name} 由方法参数填充。[SetUp] / [TearDown] 中的步骤进入结果的 准备 / 清理;测试体内的步骤进入 测试。[OneTimeSetUp] / [OneTimeTearDown] 中的步骤不会上报;若 OneTimeSetUp 失败,声明式绑定的测试仍会上报为 Failed(空步骤,结果上带 setup 错误)。
using NUnit.Framework;
[assembly: TraceraNUnit]
public class CheckoutTests
{
[SetUp]
public void OpenShop()
{
Tracera.Step("open shop", () => { });
}
[Tracera.Step("add {sku}")]
public void AddSku(string sku) { }
[Test]
[Tracera.Id(10, name: "e2e/checkout")]
public void Checkout()
{
AddSku("SKU-1");
Tracera.Step("pay", () => { });
}
}
注释、错误与附件
注释、错误与附件:自动化测试适配器。
Tracera.Comment("result-level note");
Tracera.Error("result-level error text");
Tracera.Step("open login", () =>
{
Tracera.Comment("landed on login");
});
参数化测试
在每个带 [TestCase] / [TestCaseSource] 的方法上放 [Tracera.Id](所有行共用同一 id,或在测试内调用 Tracera.TestCase 以按行变化)。可选 name 可使用占位符:来自方法参数的 {login}(及其他参数名),或 {param_id}(NUnit 测试名;下例为 Login("ok") / Login("sso"))。若未指定 name,则 autotestName 取 NUnit 测试名。
[Tracera.Id(42, name: "login as {login}")]
[TestCase("ok")]
[TestCase("sso")]
public void Login(string login)
{
Assert.That(login, Is.Not.Empty);
}