環境:Spring Boot,Swagger,gradle,Postman,newman,jenkins
SpringBoot環境搭建。
Swagger簡介
Swagger 是一款RESTFUL接口的文檔線上自動生成+功能測試功能軟體。

一、SpringBoot內建Swagger
1.build.gradle增加swagger相關jar包,maven項目同理。
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<Parameter> pars = new ArrayList<Parameter>();</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>
3.生産環境不部署問題
解決生産環境不部署問題,application.yml增加配置資訊。SwaggerConfig增加注解資訊,完整配置檔案資訊在下方。
swagger.enable
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接口測試。
上圖的位址填入下圖中紅框圈住的位址即可。
四、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測試。
五、newman內建postman測試
windows安裝newman,首先你得現有node環境跟npm指令。
npm install -g newman
newman run test.postman_collection -d data.json
newman run test.postman_collection -d data.json -r html --reporter-html-export ./testReport.html
測試并且聲稱測試報告
六、jenkins內建postman測試
未測試過jenkins內建測試,jenkins也是去執行newman指令執行測試。