我正在学习c#,VS与RestSharp和SpecFlow一起尝试学习一些自动API测试,我正在尝试获取响应代码或响应状态,以便使用Assert验证两者中的任何一个言。
我遇到的问题是我似乎无法获得响应并将其显示为响应代码。即200 或作为响应状态int String格式。即"好的"
我用print语句编写了下面的代码,该语句应该打印响应代码,但是当我运行代码时,我会在输出中打印出一个空行。
pip
这会打印一个代码0,表示呼叫正在终止,但是如果我使用邮递员发送相同的呼叫,我会收到一个ok响应状态200
BaseSteps类
using System;
using System.Net;
using TechTalk.SpecFlow;
using RestSharp;
using NUnit.Framework;
namespace SWAPITEST.Steps
{
[Binding]
public class SWAPIFeaturesSteps : BaseSteps
{
//private RestClient restClient;
//private RestRequest restRequest;
// private IRestResponse restResponse;
[Given(@"i sen an api request for a luke skywalker")]
public void GivenISenAnApiRequestForALukeSkywalker()
{
restRequest = new RestRequest(Method.GET);
}
[When(@"the response code is received")]
public void WhenTheResponseCodeIsReceived()
{
restResponse = restClient.Execute(restRequest);
}
[Then(@"the Resonse code is OK")]
public void ThenTheResonseCodeIsOK()
{
HttpStatusCode statusCode = restResponse.StatusCode;
int numericStatusCode = (int)statusCode;
Console.WriteLine(numericStatusCode);
}
}
}
有谁能告诉我如何获取响应代码并在断言中使用它? 例如:
public class BaseSteps
{
protected RestClient restClient;
protected RestRequest restRequest;
protected IRestResponse restResponse;
protected readonly Uri BaseUri = new Uri("http://swapi.co/api/people/1");
public BaseSteps()
{
restClient = new RestClient();
}
或我如何断言回复的实际状态?例如:
Assert.That(resp.ToString, Is.EqualTo(200));
答案 0 :(得分:0)
我没有使用RestSharp,但我认为您需要做的就是创建一个知道在哪里发出请求的请求:
[Given(@"i sen an api request for a luke skywalker")]
public void GivenISenAnApiRequestForALukeSkywalker()
{
restRequest = new RestRequest(BaseUri.AbsoluteUri, Method.GET);
}
答案 1 :(得分:0)
这是一个旧线程,但这是找到它的任何人的答案。
您的步骤彼此不了解。响应是在“何时”设置的,但没有存储在“然后”中的任何位置,您试图从中获取响应代码。您可以将响应存储在方案上下文中,并在以后的步骤中将其拉回。
存储
ScenarioContext.Current.Add("response", response);
第一个参数是键,第二个参数是实际响应。
检索
var response = ScenarioContext.Current["response"];
现在,如果将响应代码转换为整数,则将获得数字代码。
(int)response.StatusCode
,因为您在“下一步”步骤中已填充响应。