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



























目录
相关文章
|
22天前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
105 7
Jmeter实现WebSocket协议的接口测试方法
|
22天前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
100 3
快速上手|HTTP 接口功能自动化测试
|
16天前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
27 4
|
22天前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
31 5
|
1月前
|
监控 安全 Linux
如何利用Kali Linux进行网站渗透测试:最常用工具详解
如何利用Kali Linux进行网站渗透测试:最常用工具详解
70 6
|
1月前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
43 2
|
2月前
|
测试技术
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
47 4
|
2月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
|
2月前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
2月前
|
网络协议 测试技术 网络安全
Python进行Socket接口测试的实现
在现代软件开发中,网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯,都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中,Socket(套接字)技术扮演了重要角色。 Socket 允许计算机上的程序通过网络进行通信,它是网络通信的基础。Python 提供了强大且易于使用的 socket 模块,使开发者能够轻松地创建客户端和服务器应用,实现数据传输和交互。 本文将深入探讨如何利用 Python 编程语言来进行 Socket 接口测试。我们将从基础概念开始介绍,逐步引导大家掌握创建、测试和优化 socket 接口的关键技能。希望本文可以给大家的工作带来一些帮助~
下一篇
无影云桌面