天天看點

Spring Boot使用Swagger2自動化文檔與測試

1. 場景

兄弟們,上一篇咱們示範了SpringBoot開發Restful Web項目是多麼的簡單啊,簡直就是簡單到爆炸。反正老哥我用了SpringBoot之後,是再寫不想寫原始的帶有一堆配置的Spring項目了。

誰還不想簡簡單單把事情辦了,好有更多時間陪女朋友逛街買裙子啊?啥?你沒女朋友,那你還不想有更多時間玩優秀麼兄弟,别這麼死腦筋行不?

說正經的,還是找個女朋友是正道!

好的,有了Restful之後,開發後端API接口确實足夠簡單了,但是如何測試捏。

難道為了測試,就得把前端工程實作了?那還叫啥前後端分離呢。

難道要單獨使用工具測試,比如Postman,功能導師挺全面,但是Postman完全不知道我們的項目是咋回事啊,URL參數都得自己一個一個填,多麻煩啊。

既然我們的程式都擺在這了,各個接口URL位址、參數都是确定的,就不能自動生成可視化的測試界面麼,讓我們把參數填填發起測試就行。

2. Swagger2用了就是爽

當然行咧,用Swagger2就是咧。不光自動生成可視化測試,還能自動生成接口文檔。

别人來測試的時候,直接看到文檔描述,都不用來問你了。将程式設計的懶人原則發揮到極緻。

此處提一點,程式開發就是要足夠懶,才能讓需求方感到:咋這麼容易、這麼好用捏。

3. 具體實作

好了,扯了一大堆,看看怎麼實作。

3.1 導入依賴

我們還是使用上一章節中的Web項目進行示範,當然也可以使用任何的SpringBoot 2.x版本的項目進行添加Swagger2操作。

然後導入Swagger2相關的依賴,這樣咱們的項目就能支援Swagger2咧,具體依賴項如下:

<!-- 添加swagger2相關功能 -->

   <dependency>

    <groupId>io.springfox</groupId>

    <artifactId>springfox-swagger2</artifactId>

    <version>2.9.2</version>

   </dependency>

   <!-- 添加swagger-ui相關功能 -->

    <artifactId>springfox-swagger-ui</artifactId>

TIPS:為啥用2.9.2版本?因為2.9.2是最新版本,炫酷呗!

3.2 添加Swagger2配置類

通過配置類配置Swagger2相關功能即可,相關要點咱都放注釋中了。需要注意的是,不要感覺很難了解,這是人家定義好的類庫,我們其實隻要拿過來用就行了,Swagger2重點就是會使用就OK。

@Configuration // 告訴Spring容器,這個類是一個配置類,Spring容器得采用這個類的配置

@EnableSwagger2 // 啟用Swagger2功能

public class Swagger2Config {

/**

 * 配置Swagger2相關的bean

 */

@Bean

   public Docket createRestApi() {

       return new Docket(DocumentationType.SWAGGER_2)

               .apiInfo(apiInfo())

               .select()

      .apis(RequestHandlerSelectors.basePackage("com"))//com包下所有API都交給Swagger2管理

               .paths(PathSelectors.any())

               .build();

   }

 * 此處主要是API文檔頁面顯示資訊

   private ApiInfo apiInfo() {

       return new ApiInfoBuilder()

               .title("示範項目API")   //标題

               .description("學習Swagger2的示範項目") //描述

               .termsOfServiceUrl("http://www.forwhatsogood.com") //服務網址,此處是我個人網站位址

               .version("1.0") //版本

}

3.3 配置靜态資源通路

由于Swagger2相關API文檔html/css/js頁面,而SpringBoot 2.x預設會攔截靜态資源,是以需要通過配置類配置下靜态資源。

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

 // 允許一下目錄靜态資源通路

 registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");

 registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");

 registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");

}

3.4 啟動項目并進行檢視、測試

啟動項目,在之前的通路位址

http://127.0.0.1:1007

後面添加/swagger-ui.html,即通路

http://127.0.0.1:1007/swagger-ui.html

顯示如下,可見我們控制器重的API方法都被列出來了。

Spring Boot使用Swagger2自動化文檔與測試

點選其中一個API,然後點選try it out,則可以注入參數自動執行并顯示結果,如下圖,大家自己試試就OK。

Spring Boot使用Swagger2自動化文檔與測試

3.5 通過注解自動生成API文檔

通過在控制器上添加注解,可以在Swagger頁面生成文檔内容,修改控制器代碼如下:

@Api(tags = "部落格API") // 類文檔顯示内容

@RestController // 通過該注解,第一将BlogController注冊為控制器,第二将其中方法傳回值轉換為json

public class BlogController {

  @Autowired // 自動裝配blogService

  private BlogService blogService;

  @ApiOperation(value = "根據id擷取部落格資訊") // 接口文檔顯示内容

  @GetMapping("/blog/{id}")

  public BlogDo getOne(@PathVariable("id") long id) {

   return blogService.getBlogById(id);

  }

  @ApiOperation(value = "擷取部落格清單") // 接口文檔顯示内容

  @GetMapping("/blog")

  public List<BlogDo> getList() {

   return blogService.getBlogList();

  @ApiOperation(value = "新增部落格") // 接口文檔顯示内容

  @PostMapping("/blog")

  public void add(@RequestBody BlogDo blog) {

   blogService.addBlog(blog);

  @ApiOperation(value = "根據id修改部落格資訊") // 接口文檔顯示内容

  @PutMapping("/blog/{id}")

  public void update(@PathVariable("id") long id, @RequestBody BlogDo blog) {

   // 修改指定id的部落格資訊

   blog.setId(id);

   blogService.updateBlog(blog);

  @ApiOperation(value = "根據id删除部落格") // 接口文檔顯示内容

  @DeleteMapping("/blog/{id}")

  public void delete(@PathVariable("id") long id) {

   blogService.deleteBlog(id);

添加api注解後,Swagger頁面顯示如下,非常清晰簡便的API文檔,且可以直接點選調試,抓緊試試吧。

Spring Boot使用Swagger2自動化文檔與測試

4. 總結

Swagger2測試要比寫前端代碼調試,或者寫Java Http代碼調試,或者通過Postman等工具調試都要友善。

因為不用寫代碼、可視化、參數自動生成,我們隻需要在指定參數位置填寫參數即可。

當然也不是萬能的,比如批量測試、并發測試,這個工具是玩不了的。

是以Swagger的使用場景是作為API文檔,或者開發完畢後的調整參數測試邏輯正确性。