You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将单用户自动化测试改造为NUnit数据驱动测试

用NUnit TestCase实现多用户数据驱动测试(遵循DRY原则)

你的核心问题是:要针对多个仅用户名(Users枚举成员)不同的场景做自动化测试,之前通过字符串参数直接访问枚举成员的写法语法错误,导致方案无效。以下是两种可行的解决方案:

方案一:直接传递枚举成员作为TestCase参数

NUnit支持将枚举类型作为TestCase的参数,这是最直接且类型安全的方式:

首先确认Users是枚举类型:

public enum Users
{
    lufas_sac1,
    lufas_sac2,
    lufas_sac3 // 其他测试用户
}

修改后的测试方法:

[TestCase(Users.lufas_sac1)]
[TestCase(Users.lufas_sac2)]
[TestCase(Users.lufas_sac3)]
public void SACCanSelectPayments(Users user)
{
    LufasWebManager.OktaDevTenantSignIn(user.ToString(), LufasWebManager.EncryptPassword(_site.GetAuditPassword(user)));
    // 原有测试逻辑保持不变
    new MenuBarSubPage(LufasWebManager.Driver).SelectPracticeAudit(MenuBarSubPage.PracticeAuditOptions.WardOrBranch);
    LufasWebManager.Stall(2500);
    LufasWebManager.Driver.FindElement(By.XPath("//simple-snack-bar/div/button")).Click();
    var auditPage = new BaseAudit(LufasWebManager.Driver);
    auditPage.ClickContinue();
    auditPage.ClickContinue();
    var paymentsPage = new AuditAddPaymentsDepositsSubpage(LufasWebManager.Driver);
    SelectPayments(paymentsPage);
}

这种方式无需额外转换,直接使用枚举实例调用相关方法,完全遵循DRY原则,避免重复编写测试代码。

方案二:通过字符串解析枚举成员(适合需传字符串参数的场景)

如果必须使用字符串作为TestCase参数,可以通过Enum.TryParse将字符串转换为对应的枚举成员:

[TestCase("lufas_sac1")]
[TestCase("lufas_sac2")]
public void SACCanSelectPayments(string userStr)
{
    if (Enum.TryParse<Users>(userStr, out var user))
    {
        LufasWebManager.OktaDevTenantSignIn(user.ToString(), LufasWebManager.EncryptPassword(_site.GetAuditPassword(user)));
        // 原有测试逻辑保持不变
        // ...
    }
    else
    {
        Assert.Fail($"无效的用户枚举值: {userStr}");
    }
}

为什么之前的方法无效?

你之前尝试的Users.user是错误语法:user是方法的变量参数,不能直接作为枚举的成员名称访问。枚举成员必须是编译期确定的常量,或通过解析字符串/数值的方式获取实例。

内容的提问来源于stack exchange,提问作者DarthOpto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:52:44