接口自動化工具(測試,編寫,生成)

[TOC]前端

coupler

gitos: https://gitee.com/mliang/couplergit

graph TB

subgraph 服務中轉
browser1[前端]--請求-->coupler1[coupler]
coupler1[coupler]--返回-->browser1[前端]
coupler1[coupler]--請求-->server1[後端]
server1[後端]--返回-->coupler1[coupler]
end

subgraph 服務模擬
coupler2[coupler]--返回-->browser2[前端]
browser2[前端]--請求-->coupler2[coupler]
end

subgraph 接口測試
coupler3[coupler]--請求-->server3[後端]
server3[後端]--返回-->coupler3[coupler]
end
graph LR

coupler((coupler))-->文檔生成
coupler-->歷史文檔比較

開發記錄

1.0 一階段

  • 基礎運行框架搭建
  • 基礎測試框架搭建
  • 基礎模塊構建
  • 測試模塊開發

1.0 架構

graph TB

subgraph core
config
document
interface
params
result
server
end
graph TB

subgraph extend
swagger
graphql
end
graph TB

subgraph tools
compare
end

核心 coupler.core

配置 core.config

  • 接口文檔目錄
  • 接口文檔生成目錄
  • 經過代理接口訪問,生成接口文檔
  • server服務,數據來源:遠程接口數據,本地數據,mock產生
  • server服務,將遠程數據或mock數據保存本地

文檔 core.document

加載 load.base
加載 load.openapi

接口 core.interface

掃描 scanner
訪問 access

信息 core.message

記錄 record
輸出 export

訪問參數 core.params

比較 compare

返回結果 core.result

比較 compare

工具 coupler.tools

tools.document

轉換 trans4openapi
轉換 trans4base

擴展 coupler.extend

加載 load.swagger.yaml
加載 load.swagger.json

功能流程

接口測試

  • require
  • [x] 接口文檔
  • [x] 遠程接口服務器
  • action
  • [x] session的記錄和共享
  • [x] 參數組織
  • [x] 返回數據校驗
  • [x] 結果輸出
  • 參數校驗內容
  • [x] 長度 (defalut:100)
  • [x] 非空 (defalut:false)
  • [x] 類型 (defalut:null)
  • [x] 格式 (defalut:null)
  • 返回結果校驗內容
  • [x] 非空 (defalut:true)
  • [x] 類型 (defalut:null)
  • [x] 格式 (defalut:null)
  • 數據類型
  • [x] string
  • [x] number
  • [x] boolean
  • [x] array
  • [x] object
  • [x] date(defalut:'yyyy-MM-dd HH:mm:ss')
  • [x] timestamp
  • 數據格式
  • [x] 手機
  • [x] 郵箱
graph TB

1[加載接口文檔]
2[加載接口列表]
3{批量掃描接口}
4[記錄dead接口]
5[訪問alive接口]
6[準備參數]
7[訪問接口]
8[比較返回數據]
9[記錄比較結果]
10[整理記錄並輸出]

1-->2
2-->3
3--dead-->4
3--alive-->5
5-->6
6-->7
7-->8
8-->9
9-->10
4-->10
  1. 加載、解析接口文檔
  2. 加載接口列表
  3. 批量掃描接口,返回接口狀態(alive,dead)
  4. 記錄dead接口
  5. 訪問alive接口
    1. 準備參數
    2. 訪問接口
    3. 比較返回數據
    4. 記錄比較結果
  6. 整理記錄並輸出

服務

graph TB

1[加載接口文檔]
2[加載接口列表]
3[啓動服務器並監聽]
4[接口訪問]
5{接口是否存在}
6{參數是否正確}
7{是否遠程接口訪問}
8[掃描遠程接口]
a{遠程接口是否存在}
9{訪問遠程}
10[比較返回數據]
b{返回數據是否符合規範}
11[返回數據]
12{是否本地模擬接口}
13{是否存在本地數據}
14[組織mock數據]
15[加載本地數據]
16{是否將mock數據保存在本地}
17[將mock數據保存在本地]

20>記錄錯誤信息]
21[輸出錯誤信息]
1-->2
2-->3
3-->4
4-->5
5--否-->20
5--是-->6
6--否-->20
6--是-->7
7--是-->8
8-->a
a--否-->20
a--是-->9
9--訪問失敗-->20
9-->10
10-->b
b--否-->20
b--是-->11
7--否-->12
12--是-->13
13--是-->15
15-->11
13--否-->14
14-->11
14-->16
16--是-->17

11-->21
  1. 加載、解析接口文檔
  2. 加載接口列表
  3. 啓動服務器並監聽
  4. 接口訪問
    1. 判斷接口是否存在,記錄錯誤信息
    2. 判斷參數是否正確,記錄錯誤信息
    3. 是否遠程接口訪問
      1. 掃描遠程接口,記錄錯誤信息
      2. 訪問遠程接口,記錄錯誤信息
      3. 比較返回數據,記錄錯誤信息
      4. 是否須要將數據保存在本地
      5. 返回數據
    4. 是否本地模擬接口
      1. 判斷是否存在本地數據
      2. 組織mock數據
      3. 是否須要將mock數據保存在本地
      4. 返回數據

2.0 架構

擴展 extend

extend.graphql

加載 load.graphql
轉換 trans4graphql

文檔結構

數據結構

coupler 數據結構

  • 接口文檔目錄結構
- apis
    - [{version}]
        - api.json
        - [{interface}.json]
  • api.json 結構
- servers
    - url (string)
    - description (string)
- info 
    - description (string)
    - version (string)
- paths
    - /{path} 
- Components
    - schemas 
    - parameters
    - responses
  • {interface}.json 結構
- /{path} 
    - get|post|put|delete|options|head|patch|trace
        - description (string)    
        - parameters
            - name (string)
            - in (string:"query","header","path","cookie",default:get|) 
            - required (boolean,default:false)
            - description (string)
        - responses
            - default|HTTP Status Code
                - description
                - content
                    - application/json | text/plain
                        - schema 
                            - type
                            - properties
                                - key
                                    - type
                                    - format

基本數據結構

- servers
    - url (string)
    - description (string)
- info 
    - description (string)
    - version (string)
- paths
    - /{path} 
        - get|post|put|delete|options|head|patch|trace
            - description (string)    
            - parameters
                - name (string)
                - in (string:"query","header","path","cookie") 
                - required (boolean)
                - description (string)
            - responses
                - default|HTTP Status Code
                    - description
                    - content
                        - application/json | text/plain
                            - schema 
                                - type
                                - properties
                                    - key
                                        - type
                                        - format
- Components
    - schemas 
    - parameters
    - responses

需求

1.0 無界面版

  • 接口文檔利於編寫
  • 接口文檔利於更新
  • 接口文檔格式規範化
  • 接口文檔適用於先後端
  • 記錄文檔改動
  • 遵循openapi3.0接口規範

後端接口測試

  • 接口可測試
  • 測試自動化
  • 測試結果可輸出

前端訪問接口

  • 工具提供接口模擬訪問(無後端)
  • 工具提供後端接口轉發
  • 前端接口訪問結果輸出

1.1 功能擴展

  • 測試可編排
  • 定時任務測試
  • 經過代理遠程接口訪問,生成接口文檔

2.0 界面版

  • 結果可展現
  • 接口可展現
  • 可在線測試
  • graphql規範接入

3.0 代碼生成版

  • 生成接口mock數據代碼
  • 生成先後端接口代碼

其餘

文檔版本差別比較

  • 生成統一文檔並保存,以時間區分
  • 提供文檔版本追加並記錄
  • 提供文檔版本差別比較內容

測試內容

  • 後端接口是否可訪問
  • 後端接口返回是否正確
  • 後端接口是否對入參校驗
  • 前端訪問是否正確

結果內容

  • 接口訪問是否正常
  • 接口響應耗時
  • 訪問不正常前端緣由
  • 響應不正常後端緣由

資料

http狀態碼

1 消息express

▪ 100 Continue
▪ 101 Switching Protocols
▪ 102 Processing

2 成功json

▪ 200 OK
▪ 201 Created
▪ 202 Accepted
▪ 203 Non-Authoritative Information
▪ 204 No Content
▪ 205 Reset Content
▪ 206 Partial Content
▪ 207 Multi-Status

3 重定向後端

▪ 300 Multiple Choices
▪ 301 Moved Permanently
▪ 302 Move temporarily
▪ 303 See Other
▪ 304 Not Modified
▪ 305 Use Proxy
▪ 306 Switch Proxy
▪ 307 Temporary Redirect

4 請求錯誤api

▪ 400 Bad Request
▪ 401 Unauthorized
▪ 402 Payment Required
▪ 403 Forbidden
▪ 404 Not Found
▪ 405 Method Not Allowed
▪ 406 Not Acceptable
▪ 407 Proxy Authentication Required
▪ 408 Request Timeout
▪ 409 Conflict
▪ 410 Gone
▪ 411 Length Required
▪ 412 Precondition Failed
▪ 413 Request Entity Too Large
▪ 414 Request-URI Too Long
▪ 415 Unsupported Media Type
▪ 416 Requested Range Not Satisfiable
▪ 417 Expectation Failed
▪ 421 too many connections
▪ 422 Unprocessable Entity
▪ 423 Locked
▪ 424 Failed Dependency
▪ 425 Unordered Collection
▪ 426 Upgrade Required
▪ 449 Retry With
▪ 451 Unavailable For Legal Reasons

5 服務器錯誤數組

▪ 500 Internal Server Error
▪ 501 Not Implemented
▪ 502 Bad Gateway
▪ 503 Service Unavailable
▪ 504 Gateway Timeout
▪ 505 HTTP Version Not Supported
▪ 506 Variant Also Negotiates
▪ 507 Insufficient Storage
▪ 509 Bandwidth Limit Exceeded
▪ 510 Not Extended
▪ 600 Unparseable Response Headers

swagger

image

openapi

image

- openapi (string)
- info (Info Object)
    - title (string)
    - description (string)
    - termsOfService (string)
    - contact (Contact Object)
        - name (string)
        - url (string)
        - email (string)
    - license (License Object)
        - name (string)
        - url (string)
    - version (string)
- servers ([Server Object])
    - url (string)
    - description (string)
    - variables (Map[string, Server Variable Object])
        - enum ([string])
        - default (string)
        - description (string)
- paths ([Paths Object])
    - /{path} (Path Item Object)
        - $ref (string)
        - summary (string)
        - description (string)
        - get (Operation Object)
            - tags ([string])
            - summary (string)
            - description (string)
            - externalDocs (External Documentation Object)
                - description (string)
                - url (string)
            - operationId (string)
            - parameters ([Parameter Object|Reference Object])
                - name (string)
                - in (string:"query","header","path","cookie") 
                - description (string)
                - required (boolean)
                - deprecated (boolean)
                - allowEmptyValue (boolean)
                - style (string:more)
                - explode (boolean)
                - allowReserved (boolean)
                - schema (Schema Object | Reference Object)
                - example (Any)
                - examples (Map[ string, Example Object | Reference Object])
                    - summary (string)
                    - description (string)
                    - value (Any)
                    - externalValue (string)
                - content (Map[string, Media Type Object])
            - requestBody (Request Body Object|Reference Object)
                - description (string)
                - content (Map[string, Media Type Object])
                    - schema (Schema Object | Reference Object)
                    - example (Any)
                    - examples (Map[ string, Example Object | Reference Object])
                    - encoding (Map[string, Encoding Object])
                        - contentType (string)
                        - headers (Map[string, Header Object | Reference Object])
                        - style (string)
                        - explode (boolean)
                        - allowReserved (boolean)
                - required (boolean)
            - responses (Responses Object)
                - default|HTTP Status Code (Response Object | Reference Object)
                    - description (string)
                    - headers (Map[string, Header Object | Reference Object])
                    - content (Map[string, Media Type Object])
                    - links (Map[string, Link Object | Reference Object])
                        - operationRef (string)
                        - operationId (string)
                        - parameters (Map[string, Any | {expression}])
                        - requestBody (Any | {expression})
                        - description (string)
                        - server (Server Object)
            - callbacks (Map[string, Callback Object|Reference Object])
                - {expression} (Path Item Object)
            - deprecated (boolean)
            - security ([Security Requirement Object])
                - type (string)
                - description (string)
                - name (string)
                - in (string)
                - scheme  (string)
                - bearerFormat  (string)
                - flows (OAuth Flows Object)
                    - implicit (OAuth Flow Object)
                        - authorizationUrl (string)
                        - tokenUrl (string)
                        - refreshUrl (string)
                        - scopes (Map[string, string])
                    - password (OAuth Flow Object)
                    - clientCredentials (OAuth Flow Object)
                    - authorizationCode (OAuth Flow Object)
                - openIdConnectUrl  (string)
            - servers ([Server Object])
        - put (Operation Object)
        - post (Operation Object)
        - delete (Operation Object)
        - options (Operation Object)
        - head (Operation Object)
        - patch (Operation Object)
        - trace (Operation Object)
        - servers [Server Object]
        - parameters [Parameter Object | Reference Object]
- components (Components Object)
    - schemas (Map[string,Schema Object|Reference Object])
        - nullable (boolean)
        - discriminator (Discriminator Object)
            - propertyName (string)
            -  mapping (Map[string, string])
        - readOnly (boolean)
        - writeOnly (boolean)
        - xml (XML Object)
            - name (string)
            - namespace (string)
            - prefix (string)
            - attribute (boolean)
            - wrapped (boolean)
        - externalDocs (External Documentation Object)
        - example (Any)
        - deprecated (boolean)
    - responses (Map[string,Response Object|Reference Object])
    - parameters (Map[string,Parameter Object|Reference Object])
    - examples (Map[string,Example Object|Reference Object])
    - requestBodies (Map[string,Request Body Object|Reference Object])
    - headers (Map[string,Header Object|Reference Object])
    - securitySchemes (Map[string,Security Scheme Object|Reference Object])
    - links (Map[string,Link Object|Reference Object])
    - callbacks (Map[string,Callback Object|Reference Object])
- security ([Security Requirement Object])
- tags ([Tag Object])
    - name
    - description
    - externalDocs (External Documentation Object)
- externalDocs (External Documentation Object)

Header Object follows the structure of the Parameter Object服務器

相關文章
相關標籤/搜索