如何在C#中将Specflow ScenarioContext值传入API请求体?
解决Specflow ScenarioContext传值到API请求体的问题
你在使用.NET Core、Specflow、Selenium做API测试时,尝试通过ScenarioContext存储的值传入请求体,却收到'{salesOrderType}' cannot be found in the system错误。下面提供两种正确的实现方式:
方案1:优化字符串插值写法(修复原有逻辑)
原有手动拼接JSON的方式存在转义繁琐、易出错的问题,且未处理值的类型转换,可按以下方式修正:
// 先将ScenarioContext中的值转为字符串,同时处理空值情况 var salesOrderNumber = _scenarioContext["SalesOrderNumber"]?.ToString() ?? string.Empty; var salesOrderType = _scenarioContext["SalesOrderType"]?.ToString() ?? string.Empty; // 使用$@插值逐字字符串,简化JSON拼接(双大括号{{}}用于转义JSON的大括号) var body = $@"{{ ""entity"": {{ ""OrderType"": {{ ""value"": ""{salesOrderType}"" }}, ""OrderNbr"": {{ ""value"": ""{salesOrderNumber}"" }} }} }}";
方案2:使用实体类序列化(推荐)
手动拼接JSON容易出现语法错误,推荐定义对应实体类后通过序列化生成请求体,类型更安全:
1. 定义请求体实体类
public class OrderRequest { public Entity entity { get; set; } } public class Entity { public OrderField OrderType { get; set; } public OrderField OrderNbr { get; set; } } public class OrderField { public string value { get; set; } }
2. 生成请求体
// 安全从ScenarioContext取值,避免键不存在的异常 if (!_scenarioContext.TryGetValue("SalesOrderType", out var salesOrderTypeObj)) { throw new InvalidOperationException("SalesOrderType未在ScenarioContext中存储"); } if (!_scenarioContext.TryGetValue("SalesOrderNumber", out var salesOrderNumberObj)) { throw new InvalidOperationException("SalesOrderNumber未在ScenarioContext中存储"); } var salesOrderType = salesOrderTypeObj?.ToString() ?? string.Empty; var salesOrderNumber = salesOrderNumberObj?.ToString() ?? string.Empty; // 构建实体对象 var requestBody = new OrderRequest { entity = new Entity { OrderType = new OrderField { value = salesOrderType }, OrderNbr = new OrderField { value = salesOrderNumber } } }; // 使用.NET Core内置的System.Text.Json序列化 var body = System.Text.Json.JsonSerializer.Serialize(requestBody, new System.Text.Json.JsonSerializerOptions { WriteIndented = true // 格式化输出JSON,方便调试 });
额外检查点
- 确认
ScenarioContext中确实已存入SalesOrderType和SalesOrderNumber,键名拼写、大小写完全匹配; - 若使用方案1,确保字符串插值的语法正确(
$@组合使用时,JSON的大括号需用{{}}转义)。
内容的提问来源于stack exchange,提问作者Shari Valenta
相关产品推荐
相关产品推荐

