Swagger与knife4j接口测试工具

简介: Swagger与knife4j接口测试工具

1 传统测试工具postman

(1)简介

这个工具测试有所弊端要自己填充一些测试数据才可以非常麻烦20210216162944813.png

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。postman被500万开发者和超100,000家公司用于每月访问1.3亿个API。java开发通常是作为后台开发语言,通常的项目中的接 口开发需要一款测试工具来调试接口,这样无需前端页面也不耽误后台代码的开发进度,postman作为 一个接口测试工具,是一个非常不错的选择。


通过以上描述,希望初学者可以快速的安装和使用postman来进行接口的测试,当然,这里描述并不详 尽,postman作为一个接口测试的利器,还有很多特别强大的功能并没有介绍,后面随着项目的深入会 继续使用。

2 Swagger介绍

(1) 简介

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(http s://swagger.io/)。 它的主要作用是:


使得前后端分离开发更加方便,有利于团队协作


接口的文档在线自动生成,降低后端开发人员编写接口文档的负担


功能测试


Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在 项目中引入Springfox ,即可非常简单快捷的使用Swagger。

(2) SpringBoot集成Swagger

  • 引入依赖,在oldlu-leadnews-model模块中引入该依赖
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>

只需要在oldlu-leadnews-common中进行配置即可,因为其他微服务工程都直接或间接依赖即可。

  • 在oldlu-leadnews-admin工程的config包中添加一个配置类
package com.admin.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import springfox.documentation.service.Contact;
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    @Bean
    public Docket buildDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(buildApiInfo())
                .select()
// 要扫描的API(Controller)基础包
                .apis(RequestHandlerSelectors.basePackage("com.oldlu"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo buildApiInfo() {
        Contact contact = new Contact("程序员", "", "");
        return new ApiInfoBuilder()
                .title("平台管理API文档")
                .description("平台管理服务api")
                .contact(contact)
                .version("1.0.0").build();
    }
}

(3)Swagger常用注解


在Java类中添加Swagger的注解即可生成Swagger接口文档,常用Swagger注解如下:


@Api:修饰整个类,描述Controller的作用


@ApiOperation:描述一个类的一个方法,或者说一个接口


@ApiParam:单个参数的描述信息


@ApiModel: 用 对 象 来 接 收 参 数


@ApiModelProperty:用对象接收参数时,描述对象的一个字段@ApiResponse:HTTP响应其中1个描述


@ApiResponses:HTTP 响 应 整 体 描 述


@ApiIgnore:使用该注解忽略这个API


@ApiError :发生错误返回的信息


@ApiImplicitParam:一个请求参数


@ApiImplicitParams:多个请求参数的描述信息


@ApiImplicitParam属性:


属性 取值 作用

paramType  查询参数类型

path 以地址的形式提交数据

query 直接跟参数完成自动映射赋值

body 以流的形式提交 仅支持POST

header 参数在request headers 里边提交

form 以form表单的形式提交 仅支持POST

dataType  参数的数据类型 只作为标志说明,并没有实际验证

Long

String

name  接收参数名

value  接收参数的意义描述

required  参数是否必填

true 必填

false 非必填

defaultValue  默认值

我们在AdChannelControllerApi中添加Swagger注解,代码如下所示:

@Api(value = "频道管理", tags = "channel", description = "频道管理API")
public interface AdChannelControllerApi {
    /**
     * 根据名称分页查询频道列表
     *
     * @param dto
     * @return
     */
    @ApiOperation("根据名称分页查询频道列表")
    public ResponseResult findByNameAndPage(ChannelDto dto);
}

ChannelDto

@Data
public class ChannelDto extends PageRequestDto {
    /**
     * 频道名称
     */
    @ApiModelProperty("频道名称")
    private String name;
}

PageRequestDto

@Data
@Slf4j
public class PageRequestDto {
    @ApiModelProperty(value="当前页",required = true)
    protected Integer size;
    @ApiModelProperty(value="每页显示条数",required = true)
    protected Integer page;
    public void checkParam() {
        if (this.page == null || this.page < 0) {
            setPage(1);
        }
        if (this.size == null || this.size < 0 || this.size > 100) {
            setSize(10);
        }
    }
}

启动admin微服务,访问地址:

http://localhost:9001/swagger-ui.html

20210216163207622.png

20210216163054406.png

查询 先点击Try it out 输入参数,然后点击Execute,结果如下:

202102161632336.png

2021063008391628.png

3 knife4j

(1)简介


knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!


gitee地址:https://gitee.com/xiaoym/knife4j


官方文档:https://doc.xiaominfo.com/


效果演示:http://knife4j.xiaominfo.com/doc.html


(2)核心功能


该UI增强包主要包括两大核心功能:文档说明 和 在线调试


文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示 例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说 明,对该接口的使用情况一目了然。


在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数 可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者 在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。


个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息


离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown 接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件


接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进 行接口对接

(3)快速集成

  • 在oldlu-leadnews-common模块中的 pom.xml 文件中引入knife4j 的依赖,如下:
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>
  • admin模块的swagger配置类中,加上两个注解
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)

注解 说明

@EnableSwagger2 该注解是Springfox-swagger框架提供的使用Swagger注解,该注解必须加

@EnableKnife4j 该注解是knife4j 提供的增强注解,Ui提供了例如动态参数、参数过滤、接口排序等增强功能,如果你想使用这些增强功能就必须加该注解,否则可以不用加

访问

在浏览器输入地址: http://localhost:9001/doc.html

20210216163256453.png

查询频道列表:

202102161633120.png

还可以下载接口文档

20210216163324330.png

4 常见错误

4.1 knife4j 不能设置请求Header

问题描述:

knif4j 不能设置请求头信息

a962f645d8c64c86a5ab3c796932f090.png

解决方案:

开启动态请求参数,刷新即可。

0779fed4708548a48428988cfeba9bfd.png

871854c1fa5b4547a82a41db2bf4b2ba.png



























目录
相关文章
|
11月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
872 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
11月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
843 6
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
2224 10
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1696 23
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
监控 Java 数据挖掘
利用Jmeter工具进行HTTP接口的性能测试操作
基础上述步骤反复迭代调整直至满足预期目标达成满意水平结束本轮压力评估周期进入常态监控阶段持续关注系统运转状态及时发现处理新出现问题保障服务稳定高效运作
1403 0
|
弹性计算 JavaScript Ubuntu
WebSocket协议相关的测试命令工具使用简介
本文介绍了针对WebSocket的测试工具wscat和websocat的基本使用方法,以及通过curl命令测试HTTP/HTTPS协议的方式。对于WebSocket,直接使用curl测试较为复杂,推荐使用wscat或websocat。文中详细说明了这两种工具的安装步骤、常用参数及连接示例,例如在ECS上开启8080端口监听并进行消息收发测试。此外,还提供了curl命令的手动设置头部信息以模拟WebSocket握手的示例,但指出curl仅能作为客户端测试工具,无法模拟服务器。
4192 5
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2314 24
|
人工智能 数据可视化 测试技术
UAT测试排程工具深度解析:让验收测试不再失控,项目稳稳上线
在系统交付节奏加快的背景下,“测试节奏混乱”已成为项目延期的主因之一。UAT测试排程工具应运而生,帮助团队结构化拆解任务、清晰分配责任、实时掌控进度,打通需求、测试、开发三方协作闭环,提升测试效率与质量。本文还盘点了2025年热门UAT工具,助力团队选型落地,告别靠表格和群聊推进测试的低效方式,实现有节奏、有章法的测试管理。