首页 > 解决方案 > 由于我的restapi客户端返回旧数据,如何清除缓存?

问题描述

我们的团队一直在使用 RestSharp 作为 API 客户端使用 Specflow 创建 API 测试。我正在测试的 API 只是使用 POST 方法创建一个资产(具有一些属性),然后我使用 GET 方法获取新资产的数据,因此我可以反序列化并验证一些属性以确保新资产资产已创建。

例如,我通过 name 属性传递新资产,其中 Name="Asset15" (从序列中创建 ID=15 的新资产),然后我得到传递 ID=15 的信息以验证新资产Name="Asset15" 存在。直到最近,一切似乎都在工作。

例如,在不更改任何代码的情况下,测试会创建 Name="Asset20" 且 ID=20 的新资产,但 GET 方法似乎返回的是 Name="Asset19" 和 ID=19 的记录,导致我的即使我手动看到已创建 Name="Asset20" 和 ID=20 的资产,测试也明显失败。

似乎存在一些缓存问题,我想知道清除此缓存的方法是什么。

我在某处看过一篇文章,该人仅通过重新启动 Visual Studio 来解决此问题。我尝试这样做只是为了得到 2 条记录的结果。

这就是我设置测试的方式:

_settings.BaseUrl = new Uri(ConfigurationManager.AppSettings["baseUrl"].ToString());
_settings.RestClient.BaseUrl = _settings.BaseUrl;

执行 POST 方法来创建资产:

_settings.PostRequest = new RestRequest("CreateAsset", Method.POST);
_settings.PostRequest.RequestFormat = DataFormat.Json;
_settings.PostRequest.AddJsonBody(testData);

_settings.PostResponse = _settings.RestClient.Execute(_settings.PostRequest);

稍后我执行 GET 方法,反序列化,并验证信息是否正确:

_settings.GetRequest = new RestRequest("GetAsset?id=20", Method.GET);
_settings.GetResponse = _settings.RestClient.Execute(_settings.GetRequest);

var deserial = new JsonDeserializer();
var output = deserial.Deserialize<Dictionary<string, string>>(_settings.GetResponse);
var result = output["Name"];

Assert.That(result.Equals(testData.Name), $"Error: ...");

测试通过了,现在似乎落后了 1 或 2 条记录。有人可以帮助并让我知道我做错了什么吗?提前致谢!

标签: c#restsharp

解决方案


这里的问题在于 API 而不是测试代码。这可以关闭,因为它不是问题。


推荐阅读