天天看點

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

環境:Spring Boot,Swagger,gradle,Postman,newman,jenkins

SpringBoot環境搭建。

Swagger簡介

Swagger 是一款RESTFUL接口的文檔線上自動生成+功能測試功能軟體。

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

一、SpringBoot內建Swagger

1.build.gradle增加swagger相關jar包,maven項目同理。

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

2.增加SwaggerConfig配置檔案。

前兩步完成,通路http://localhost:8080/demoService/swagger-ui.html#/即可看見swagger的api頁面了。下面幾個步驟是為了解決一些配置問題,沒有以下幾種問題可以不用配置。

​<code>​import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;​</code>​​<code>​import org.springframework.context.annotation.Bean;​</code>​​<code>​import org.springframework.context.annotation.Configuration;​</code>​​<code>​import springfox.documentation.builders.ApiInfoBuilder;​</code>​​<code>​import springfox.documentation.builders.ParameterBuilder;​</code>​​<code>​import springfox.documentation.builders.PathSelectors;​</code>​​<code>​import springfox.documentation.builders.RequestHandlerSelectors;​</code>​​<code>​import springfox.documentation.schema.ModelRef;​</code>​​<code>​import springfox.documentation.service.ApiInfo;​</code>​​<code>​import springfox.documentation.service.Parameter;​</code>​​<code>​import springfox.documentation.spi.DocumentationType;​</code>​​<code>​import springfox.documentation.spring.web.plugins.Docket;​</code>​​<code>​import springfox.documentation.swagger2.annotations.EnableSwagger2;​</code>​

​<code>​ ​</code>​

​<code>​import java.util.ArrayList;​</code>​​<code>​import java.util.List;​</code>​

​<code>​@Configuration​</code>​​<code>​@EnableSwagger2​</code>​​<code>​@ConditionalOnExpression("${swagger.enable:true}")​</code>​​<code>​public class SwaggerConfig {​</code>​​<code>​@Bean​</code>​​<code>​public Docket createRestApi() {​</code>​​<code>​ParameterBuilder sessionIdPar = new ParameterBuilder();​</code>​​<code>​List&lt;Parameter&gt; pars = new ArrayList&lt;Parameter&gt;();​</code>​​<code>​sessionIdPar.name("SESSIONID").description("使用者 sessionid")​</code>​​<code>​.modelRef(new ModelRef("string")).parameterType("header")​</code>​​<code>​.required(true).build();​</code>​​<code>​pars.add(sessionIdPar.build()); //根據每個方法名也知道目前方法在設定什麼參數​</code>​​<code>​return new Docket(DocumentationType.SWAGGER_2)​</code>​​<code>​.globalOperationParameters(pars)​</code>​​<code>​.apiInfo(apiInfo())​</code>​​<code>​.select()​</code>​​<code>​.apis(RequestHandlerSelectors.basePackage("com.example.demo"))​</code>​​<code>​.paths(PathSelectors.any())​</code>​​<code>​.build();​</code>​​<code>​}​</code>​

​<code>​}​</code>​

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

3.生産環境不部署問題

解決生産環境不部署問題,application.yml增加配置資訊。SwaggerConfig增加注解資訊,完整配置檔案資訊在下方。

swagger.enable

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

4. 配置使用者名密碼

配置使用者名密碼通路swagger需要增加spring-boot-starter-security。

增加使用者名密碼登入限制。application.yml增加配置資訊。

application.yml完整配置檔案

​<code>​---​</code>​​<code>​spring:​</code>​​<code>​ profiles: dev​</code>​​<code>​swagger:​</code>​​<code>​ enable: false​</code>​​<code>​security:​</code>​​<code>​ basic:​</code>​​<code>​ path: /swagger-ui.html​</code>​​<code>​ enabled: true​</code>​​<code>​ user:​</code>​​<code>​ name: lifeccp​</code>​​<code>​ password: lifeccp​</code>​​<code>​---​</code>​

​<code>​---​</code>​​<code>​spring:​</code>​​<code>​ profiles: test​</code>​​<code>​swagger:​</code>​​<code>​ enable: true​</code>​​<code>​security:​</code>​​<code>​ basic:​</code>​​<code>​ path: /swagger-ui.html​</code>​​<code>​ enabled: true​</code>​​<code>​ user:​</code>​​<code>​ name: lifeccp​</code>​​<code>​ password: lifeccp​</code>​​<code>​---​</code>​

​<code>​---​</code>​​<code>​spring:​</code>​​<code>​ profiles: prod​</code>​​<code>​swagger:​</code>​​<code>​ enable: true​</code>​​<code>​security:​</code>​​<code>​ basic:​</code>​​<code>​ path: /swagger-ui.html​</code>​​<code>​ enabled: true​</code>​​<code>​ user:​</code>​​<code>​ name: lifeccp​</code>​​<code>​ password: lifeccp​</code>​​<code>​---​</code>​​<code>​---​</code>​

5.攔截器攔截swagger url問題。

為了防止自定義攔截器攔截swagger位址。需要增加攔截器配置。

​<code>​import org.slf4j.Logger;​</code>​​<code>​import org.slf4j.LoggerFactory;​</code>​​<code>​import org.springframework.context.annotation.Configuration;​</code>​​<code>​import org.springframework.context.annotation.Profile;​</code>​​<code>​import org.springframework.util.StringUtils;​</code>​​<code>​import org.springframework.web.servlet.config.annotation.InterceptorRegistry;​</code>​​<code>​import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;​</code>​​<code>​import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;​</code>​​<code>​import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;​</code>​

​<code>​import javax.servlet.http.HttpServletRequest;​</code>​​<code>​import javax.servlet.http.HttpServletResponse;​</code>​

​<code>​@Configuration​</code>​​<code>​@Profile({"dev","prod", "test"})​</code>​​<code>​public class ServletConfig extends WebMvcConfigurationSupport {​</code>​​<code>​private static final Logger LOG = LoggerFactory.getLogger(ServletConfig.class);​</code>​​<code>​private static final String[] EXCLUE_PATH = {"/swagger-resources/", "/webjars/", "/swagger-ui.html/**"};​</code>​

二、swagger注解

常用的注解在這裡列舉一下,詳細的需求還是要去看文檔。

​<code>​//用在對象上​</code>​​<code>​@ApiModel(value = "使用者對象")​</code>​​<code>​@ApiModelProperty(value = "id")​</code>​

​<code>​@ApiModel(value = "使用者對象")​</code>​​<code>​public class UserInfoDTO {​</code>​​<code>​@ApiModelProperty(value = "id")​</code>​​<code>​private int id ;​</code>​​<code>​@ApiModelProperty(value = "使用者姓名")​</code>​​<code>​private String name ;​</code>​​<code>​@ApiModelProperty(value = "昵稱")​</code>​​<code>​private String nickName ;​</code>​​<code>​set() ...​</code>​​<code>​get() ...​</code>​​<code>​}​</code>​

API完整代碼

Demo:​​https://github.com/xinzhongyi/SpringBootExample/tree/master/swagger-demo​​

三、Swagger一鍵導入Postman

Postman是一款http請求測試軟體,不知道的同學可以自己去百度并下載下傳使用下。

Postman可以導入Swagger的api請求,這樣就不用一個一個去錄入了,錄入到Postman後可以利用Postman的自動化測試工具,後續還可以使用jenkins自動化繼承Postman接口測試。

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.
SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

上圖的位址填入下圖中紅框圈住的位址即可。

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.
SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

四、Postman 測試

以下隻是使用了一個最簡單的測試,Postman還有很多其他功能,具體可以參考官方文檔。

官方文檔位址:​​https://learning.getpostman.com/docs/postman/scripts/test_examples/​​

建立測試api,我是利用本機位址測試。測試api如下。

​​http://localhost:8080/demoService/sample/{{id}​​}

Tests測試用例如下

tests[“result is”] = responseBody === data.result

測試資料如下,id參數可以從檔案中擷取,這樣就不用每次手動去改。

上面都是為測試準備的資料,下面開始進行Postman測試。

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.
SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.
SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.
SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.
SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

五、newman內建postman測試

windows安裝newman,首先你得現有node環境跟npm指令。

npm install -g newman

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

newman run test.postman_collection -d data.json

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

newman run test.postman_collection -d data.json -r html --reporter-html-export ./testReport.html

測試并且聲稱測試報告

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

六、jenkins內建postman測試

未測試過jenkins內建測試,jenkins也是去執行newman指令執行測試。

SpringBoot內建Swagger,Postman,newman,jenkins自動化測試.

繼續閱讀