VSCode的Rest扩展尝试——极简Api测试方案

1,697 阅读5分钟

这是一款中国人自己开发的插件,有兴趣可以关注下作者本人。之前介绍过webapi的测试工具,有Postman、Fiddler等,现在是时候拜托它们的时候了。

1、安装

可以在Visual Studio市场或VS Code的扩展资源管理器中找到该扩展:

marketplace.visualstudio.com/items?itemN… 如果您点击此链接,您将找到有关扩展,有非常不错的如何工作以及如何使用的文档。这也意味着这篇文章是没有用的,除了您想阅读快速概述;-) 在这里插入图片描述

REST Client扩展的源代码托管在GitHub上: github.com/Huachao/vsc…

该扩展程序得到积极维护,下载数非常大,并由250多人提供了很棒的评级(5分中的5.0分)

2、它能解决什么?

与Fiddler和Postman相比,它绝对是简约的。没有炫目且功能完善的UI。尽管Fidler功能齐全,但Postman的UI更好,更轻松,更直观,但是REST Client完全不需要UI,除了VSCode shell和纯文本编辑器。

和Fiddler和Postman无法轻松共享请求配置不同,REST客户端使用* .http或* .rest扩展名将请求配置存储在文本文件中,扩展名可以提交给源代码存储库并与整个团队共享。 在这里插入图片描述

3、让我们看看它是如何工作的

为了在演示中对其进行测试,让我们创建一个新的Web API项目,转到项目目录,然后打开VSCode:

dotnet new webapi -n RestClient -o RestClient
cd RestClient
code .

该项目已经包含一个Web API控制器。我将在REST Client的第一个小测试中使用它。稍后我将在博客文章中创建并使用更复杂的控制器

为了将* .http文件放在一个位置,我创建了一个ApiTest文件夹并将其放置WeatherForecast.http在其中。我不确定将此类文件放入项目是否有意义,因为这些文件不会投入生产。我认为,在现实世界的项目中,我会将文件放置在实际项目文件夹之外的某个位置,但要放在源代码存储库中。让我们暂时保留它: 在这里插入图片描述 我已经将以下行放入该文件中:

GET https://localhost:5001/WeatherForecast/ HTTP/1.1

这只是带有文件扩展名的纯文本文件中的简单文本行,*.http是REST Client扩展的一部分,在解析它时具有一些很酷的魔术:

在顶部边框上,您可以看到REST Client扩展支持文件结构内部的导航。这很酷。在该行上方,它还将一个CodeLens可操作链接添加到已配置的请求中以发送该请求。

首先,通过按F5或dotnet run在Shell中使用启动项目。

如果项目正在运行,则可以单击“发送请求代码镜头”链接,然后查看会发生什么。 在这里插入图片描述 它将在VSCode中的新选项卡组中打开响应,并显示响应标题和响应内容

4、更复杂的例子

我创建了另一个处理人员的API控制器。在PersonController使用GenFu创建假的用户。方法POST,PUT和DELETE并没有真正做任何事情,但是控制器可以很好地被测试。

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;

using GenFu;

using RestClient.Models;

namespace RestClient.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class PersonController : ControllerBase
    {

        [HttpGet]
        public ActionResult<IEnumerable<Person>> Get()
        {
            return A.ListOf<Person>(15);
        }

        [HttpGet("{id:int}")]
        public ActionResult<Person> Get(int id)
        {
            var person = A.New<Person>(new Person { Id = id });
            return person;
        }

        [HttpPost]
        public ActionResult Post(Person person)
        {
            return Ok(person);
        }

        [HttpPut("{id:int}")]
        public ActionResult Put(int id, Person person)
        {
            return Ok(person);

        }

        [HttpDelete("{id:int}")]
        public ActionResult Delete(int id)
        {
            return Ok(id);
        }
    }
}

该Person模型很简单:

namespace RestClient.Models
{
    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Telephone { get; set; }
        public string Street { get; set; }
        public string Zip { get; set; }
        public string City { get; set; }
    }
}

如果现在启动项目,则将在Web API项目中已配置的Swagger UI中看到新的端点。调用以下URL以查看Swagger UI:https://localhost:5001/swagger/ index.html

在这里插入图片描述 好的。开始吧。我创建了一个名为新文件Person.http中ApiTests的文件夹。您可以将多个REST Client请求配置添加到一个文件中。

我们不需要两个GET端点和DELETE端点的Swagger UI,因为它们是简单的端点,并且看起来与中的相同WeatherForecast.http:

GET https://localhost:5001/Person/ HTTP/1.1

###

GET https://localhost:5001/Person/2 HTTP/1.1

### 

DELETE https://localhost:5001/Person/2 HTTP/1.1

POST请求稍微复杂一点

如果现在/Person在Swagger UI中打开POST部分并尝试请求,您将获得REST Client所需的所有信息:

在这里插入图片描述 在http文件中,它将如下所示:

POST https://localhost:5001/Person/ HTTP/1.1
content-type: application/json

{
  "id": 0,
  "firstName": "Juergen",
  "lastName": "Gutsch",
  "email": "juergen@example.com",
  "telephone": "08150815",
  "street": "Mainstr. 2",
  "zip": "12345",
  "city": "Smallville"
}

您可以对PUT请求执行相同的操作:

PUT https://localhost:5001/Person/2 HTTP/1.1
content-type: application/json

{
  "id": 2,
  "firstName": "Juergen",
  "lastName": "Gutsch",
  "email": "juergen@example.com",
  "telephone": "08150815",
  "street": "Mainstr. 2",
  "zip": "12345",
  "city": "Smallville"
}

如果您单击GET请求的CodeLens链接,这就是VSCode中的样子: 在这里插入图片描述 现在,您可以通过这种方式测试所有API端点。

5、小结

实际上,这不仅能测试REST api,您可以通过这种方式测试任何类型的HTTP请求。您甚至可以将二进制数据(例如图像)发送到端点。

对于VSCode来说,这是一个非常不错的扩展,我敢肯定,我只会在没有安装VS Code的环境中使用Fiddler或Postman。

说了半天,你心动了吗?心动不如行动,关注楼主,不迷路!