如何将单用户自动化测试改造为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
相关产品推荐
相关产品推荐

