关于软件测试:技术分享-Spring-Boot-集成-Swagger

33次阅读

共计 5402 个字符,预计需要花费 14 分钟才能阅读完成。

Swagger UI 容许任何人(无论您是开发团队还是最终用户)都能够可视化 API 资源并与之交互,而无需任何实现逻辑。它是依据您的 OpenAPI(以前称为 Swagger)标准主动生成的,具备可视化文档,可简化后端实现和客户端应用。

为什么应用 Swagger

  • 跨语言性,反对 40 多种语言,Swagger 曾经缓缓演变成了 OpenAPI 标准;
  • Swagger UI 出现进去的是一份可交互式的 API 文档,咱们能够间接在文档页面尝试 API 的调用,省去了筹备简单的调用参数的过程;
  • 对于某些没有前端界面 UI 的性能,能够用它来测试接口;
  • 联调不便,如果出问题,间接测试接口,实时查看参数和返回值, 就能够疾速定位问题。

Swagger 疾速开始

这里抉择 2.9.2 版本。

<!-- swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

增加配置类

增加一个 Swagger 配置类,在工程下新建 config 包并增加一个 SwaggerConfig 配置类。SwaggerConfig.java

import com.google.common.collect.Lists;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

// 作为 Springfox 框架的次要接口的构建器, 提供正当的默认值和不便的配置办法。@Bean
public Docket docket() {ParameterBuilder builder = new ParameterBuilder();
    builder.parameterType("header").name("token")
            .description("token 值")
            .required(true)
            .modelRef(new ModelRef("string")); // 在 swagger 里显示 header

    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("aitest_interface")
            .apiInfo(apiInfo())
            .globalOperationParameters(Lists.newArrayList(builder.build()))
            .select().paths(PathSelectors.any()).build();}

private ApiInfo apiInfo() {return new ApiInfoBuilder()
            .title("aitest-mini 零碎")
            .description("aitest-mini 接口文档")
            .contact(new Contact("tlibn", "","103@qq.com"))
            .version("1.0")
            .build();}

}

增加控制器

增加一个控制器,在工程下新建 controller 包并增加一个 Controller 控制器,如果曾经存在 Controller 控制器,则间接启动服务也能够,如上章咱们编写了 HogwartsTestUserController 类,此时间接启动服务即可。

关上 swagger 接口文档界面

启动 Spring Boot 服务,关上浏览器,拜访:http://127.0.0.1:8081/swagger-ui.html,进入 swagger 接口文档界面。

测试

开展 hogwarts-test-user-controller 的任意接口,输出参数并点击执行,就能够看到接口测试后果了。

Swagger 罕用注解

swagger 通过注解表明该接口会生成文档,包含接口名、申请办法、参数、返回信息的等等。
Api:润饰整个类,形容 Controller 的作用

Api(tags = "霍格沃兹测试学院 - 用户治理模块", hidden = true)

ApiOperation:形容一个类的一个办法,或者说一个接口

ApiOperation("查问用户列表")

ApiParam:单个参数形容
ApiModel:用对象来接管参数

 ApiModel(value = "用户登录类", description = "申请类")

ApiProperty:用对象接管参数时,形容对象的一个字段

ApiModelProperty(value="用户 id", example="1",required=true)

ApiResponse:HTTP 响应其中 1 个形容
ApiResponses:HTTP 响应整体形容
ApiIgnore:应用该注解疏忽这个 API
ApiError:产生谬误返回的信息
ApiImplicitParam:一个申请参数
ApiImplicitParams:多个申请参数
更多参见 https://github.com/swagger-ap…

增加 Swagger 罕用注解后的成果

增加 Swagger 罕用注解后的示例代码
HogwartsTestUserController.java

@Api(tags = "霍格沃兹测试学院 - 用户治理模块", hidden = true)
@RestController
@RequestMapping("/api/user")
public class HogwartsTestUserController {

    /**
     * 查问用户列表,返回一个 JSON 数组
     * */
    @ApiOperation("查问用户列表")
    @GetMapping("/users")
    @ResponseStatus(HttpStatus.OK)
    public Object getUsers(){List<UserDto> list = getData();
        return list;
    }

    /**
     * 查问用户信息,返回一个新建的 JSON 对象
     * */
    @ApiOperation("查问用户信息")
    @GetMapping("/users/{id}")
    @ResponseStatus(HttpStatus.OK)
    public Object getUser(@PathVariable("id") Long id){if(Objects.isNull(id)){return null;}

        List<UserDto> list= getData();
        UserDto userDto = getUserDto(id, list);

        return userDto;
    }

    /**
     * 新增用户
     * */
    @ApiOperation("新增用户")
    @PostMapping("/users")
    @ResponseStatus(HttpStatus.CREATED)
    public Object addUser(@RequestBody UserDto user){List<UserDto> list= getData();
        list.add(user);// 模仿向列表中减少数据
        return user;
    }

    /**
     * 编辑用户
     * */
    @ApiOperation("编辑用户")
    @PutMapping("/users/{id}")
    @ResponseStatus(HttpStatus.CREATED)
    public Object editUser(@PathVariable("id") Long id,@RequestBody UserDto user){List<UserDto> list = getData();
        for (UserDto userDto:list) {if(id.equals(userDto.getId())){
                userDto = user;
                break;
            }
        }

        return user;
    }

    /**
     * 删除用户
     * */
    @ApiOperation("删除用户")
    @DeleteMapping("/users/{id}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public Object deleteUser(@PathVariable("id") Long id){List<UserDto> list = getData();
        UserDto userDto = getUserDto(id, list);
        return  userDto;
    }

    /**
     * 模仿数据
     * */
    private List<UserDto> getData(){List<UserDto> list=new ArrayList<>();

        UserDto userDto = new UserDto();
        userDto.setId(1L);
        userDto.setName("admin");
        userDto.setPwd("admin");
        list.add(userDto);

        userDto = new UserDto();
        userDto.setId(2L);
        userDto.setName("HogwartsTest1");
        userDto.setPwd("HogwartsTest1");
        list.add(userDto);

        userDto = new UserDto();
        userDto.setId(3L);
        userDto.setName("HogwartsTest2");
        userDto.setPwd("HogwartsTest2");
        list.add(userDto);

        userDto = new UserDto();
        userDto.setId(4L);
        userDto.setName("HogwartsTest3");
        userDto.setPwd("HogwartsTest3");
        list.add(userDto);

        return  list;
    }

    /**
     *  模仿依据 id 查问列表中的数据
     * @param id
     * @param list
     * @return
     */
    private UserDto getUserDto(Long id, List<UserDto> list) {
        UserDto UserDto = null;
        for (UserDto user : list) {if (id.equals(user.getId())) {
                UserDto = user;
                break;
            }
        }
        return UserDto;
    }
}

UserDto.java

 @ApiModel(value = "用户登录类", description = "申请类")
 public class UserDto {@ApiModelProperty(value="用户 id", example="1",required=true)
     private Long id;

     @ApiModelProperty(value="用户名称", example="hogwarts1",required=true)
     private String name;

     @ApiModelProperty(value="用户明码", example="hogwarts2",required=true)
     private String pwd;

     public Long getId() {return id;}

     public void setId(Long id) {this.id = id;}

     public String getName() {return name;}

     public void setName(String name) {this.name = name;}

     public String getPwd() {return pwd;}

     public void setPwd(String pwd) {this.pwd = pwd;}
 }

Spring Boot 集成 Swagger 就先讲到这里,大家能够照着代码,多练习一下哦~

正文完
 0