【发布时间】:2021-09-25 05:10:00
【问题描述】:
我正在使用 RestSharp 编写 API 自动化测试。任何形式的帮助都将不胜感激! 我正在从响应中获取数据值,并且我需要将一些值写入我的 json 文件(我将用于另一个测试,将它们作为一个主体)。 我设法从 JArray 中获得 1 个值,但我还需要 2 个值,但我不知道该怎么做。 我附上了我的 api 测试代码和我从响应中获得的数据 + 我设法写入我的 json 文件的数据。
我设法获得的值:FsNumber(将其声明为 FinancialNumber)。我需要添加到 json 中的内容:subjectName + subjectCode(它们将被声明为 companyName/companyCode)。如何使用 SubjectName/SubjectCode 访问“查询”列表?
测试
var queryResult = client.Execute<object>(request);
var data = JsonConvert.SerializeObject(queryResult.Data);
var jsonParse = JToken.Parse(data);
var fsObject = jsonParse.Value<JToken>("FinanceReportList");
var fsArray = fsObject.Value<JArray>("List");
foreach (var fs in fsArray)
{
var cfn = fs.Value<string>("FsNumber");
var queryObject = new DataQuery
{
financialNumber = cfn,
};
var queryObjectString = JsonConvert.SerializeObject(queryObject);
File.WriteAllText(@"C:\Users\TestAPI\myJsonWithValues.json", queryObjectString);
}
我从响应中得到的数据:
{
"RequestDate": "2021-07-16",
"Message": "Active",
"ProductNumber": 666,
"Language": "EN",
"RequestId": "reqID666",
"Query": {
"SubjectCode": "MY-SUBJECT",
"SubjectName": "MY-NAME"
},
"FinanceReportList": {
"List": [
{
"FsNumber": "MY-NUMBER",
"Year": 2021,
到目前为止,我设法将 FsNumber 保存到 myJsonWithValues.json 文件中,如下所示:
{"financialNumber":"MY-NUMBER","companyName":null,"companyCode":null}
我想做的是,我的 json 应该看起来像
{"financialNumber":"MY-NUMBER","companyName":MY-NAME,"companyCode":MY-CODE}
【问题讨论】:
-
您是否尝试从查询字段中读取值?那就是您的数据所在的位置。 var fsQuery = jsonParse.Value
("查询");像 docs.microsoft.com/en-us/dotnet/standard/serialization/… 这样封装响应以将 json 反序列化为对象是一种很好的做法 -
是的,但现在我得到 System.InvalidOperationException:无法访问 Newtonsoft.Json.Linq.JProperty 上的子值。 :(@michal.materowski
-
您是否尝试使用 Children() 方法访问查询对象的子项? var jsonData = JObject.Parse(json).Children(); List
令牌 = jsonData .Children().ToList();也许首先尝试调试你的测试,看看你得到什么样的对象,你可以在结果上调用什么方法。这总是一个好的开始。 -
谢谢!我会试试的。完全忘记了调试。 @michal.materowski
-
设法用 var fsQuery = jsonParse.Value
("Query");正如迈克尔所说。调试响应,发现错误,纠正它,它就像一个魅力。再次感谢你! @michal.materowski
标签: c# json .net-core restsharp web-api-testing