如何获取API响应状态或状态代码

时间:2018-03-31 15:15:17

标签: c# restsharp specflow

我正在学习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));

2 个答案:

答案 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,因为您在“下一步”步骤中已填充响应。