如何将JSON值作为参数传入NUnit数据驱动测试方法?
解决NUnit数据驱动测试中JSON参数的类型转换错误
问题原因
你把url、username、password声明成了JToken?类型,但调用.Value<string>()后得到的是string类型,类型不匹配导致了转换错误。
修复方案
1. 快速修正编译错误
把变量类型从JToken?改为string?,同时加上空值检查避免空引用异常:
public class TestData: BasePage { static JObject? data = ReadJson(@"jsconfig1.json"); static string? url = data?.SelectToken("url")?.Value<string>(); static string? username = data?.SelectToken("username")?.Value<string>(); static string? password = data?.SelectToken("password")?.Value<string>(); public void Login_Method() { if (url == null) throw new InvalidOperationException("未从JSON文件加载到URL"); driver.Url = url; driver.FindElement(By.Id("username")).SendKeys(username); driver.FindElement(By.Id("password")).SendKeys(password); driver.FindElement(By.Id("login")).Click(); driver.Close(); } }
2. 优化为NUnit标准数据驱动模式
如果要贴合NUnit数据驱动测试的规范,推荐使用TestCaseSource加载JSON数据,方便后续扩展多组测试用例:
public class TestData: BasePage { // 加载JSON测试数据的方法 private static IEnumerable<TestCaseData> GetLoginTestData() { var data = ReadJson(@"jsconfig1.json"); if (data == null) yield break; string? url = data.SelectToken("url")?.Value<string>(); string? username = data.SelectToken("username")?.Value<string>(); string? password = data.SelectToken("password")?.Value<string>(); yield return new TestCaseData(url, username, password); // 如果JSON里有多组测试数据(数组格式),可遍历返回: // var testCases = data.SelectToken("loginCases") as JArray; // if (testCases != null) // { // foreach (var caseItem in testCases) // { // yield return new TestCaseData( // caseItem.SelectToken("url")?.Value<string>(), // caseItem.SelectToken("username")?.Value<string>(), // caseItem.SelectToken("password")?.Value<string>() // ); // } // } } [Test, TestCaseSource(nameof(GetLoginTestData))] public void Login_Method(string? url, string? username, string? password) { if (url == null) throw new InvalidOperationException("未从JSON文件加载到URL"); driver.Url = url; driver.FindElement(By.Id("username")).SendKeys(username); driver.FindElement(By.Id("password")).SendKeys(password); driver.FindElement(By.Id("login")).Click(); driver.Close(); } }
注意事项
- 确保
ReadJson方法能正确读取并解析JSON文件,返回有效的JObject实例 - 始终添加空值检查,避免出现
NullReferenceException - 若需多组测试数据,可将JSON结构改为数组,通过遍历
JArray返回多组测试用例
内容的提问来源于stack exchange,提问作者Khizar Sohail
相关产品推荐
相关产品推荐

