<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一站式接口文檔及測(cè)試工具yapi介紹

          共 5746字,需瀏覽 12分鐘

           ·

          2020-08-28 03:09


          我們部門正在使用yapi做接口文檔的管理,較之之前純手工寫接口注釋的方式確實(shí)方便了不少。

          功能介紹

          稍微看了一下,發(fā)現(xiàn)yapi除了做接口文檔的可視化管理之外,還有不少的功能。

          按照官方說(shuō)法,YApi 是一個(gè)可本地部署的、打通前后端及QA的、可視化的接口管理平臺(tái)。

          YApi 是高效、易用、功能強(qiáng)大的 api 管理平臺(tái),旨在為開(kāi)發(fā)、產(chǎn)品、測(cè)試人員提供更優(yōu)雅的接口管理服務(wù)。可以幫助開(kāi)發(fā)者輕松創(chuàng)建、發(fā)布、維護(hù) API,YApi 還為用戶提供了優(yōu)秀的交互體驗(yàn),開(kāi)發(fā)人員只需利用平臺(tái)提供的接口數(shù)據(jù)寫入工具以及簡(jiǎn)單的點(diǎn)擊操作就可以實(shí)現(xiàn)接口的管理。

          • 基于 Json5 和 Mockjs 定義接口返回?cái)?shù)據(jù)的結(jié)構(gòu)和文檔,效率提升多倍
          • 扁平化權(quán)限設(shè)計(jì),即保證了大型企業(yè)級(jí)項(xiàng)目的管理,又保證了易用性
          • 類似 postman 的接口調(diào)試
          • 自動(dòng)化測(cè)試, 支持對(duì) Response 斷言
          • MockServer 除支持普通的隨機(jī) mock 外,還增加了 Mock 期望功能,根據(jù)設(shè)置的請(qǐng)求過(guò)濾規(guī)則,返回期望數(shù)據(jù)
          • 支持 postman, har, swagger 數(shù)據(jù)導(dǎo)入
          • 免費(fèi)開(kāi)源,內(nèi)網(wǎng)部署,信息再也不怕泄露了

          亮點(diǎn)是支持類似于postman的接口調(diào)試方式,這對(duì)測(cè)試同學(xué)會(huì)比較友好;另外還支持自動(dòng)化測(cè)試,支持response的斷言。

          自動(dòng)化測(cè)試

          那么yapi如何做自動(dòng)化測(cè)試的呢?

          yapi定義了包含測(cè)試集、Pre-Script 、Test-Script 三方面。

          • 測(cè)試集: 在平時(shí)的開(kāi)發(fā)過(guò)程中,經(jīng)常遇到的一個(gè)問(wèn)題是每次調(diào)試接口都需要重新填寫參數(shù),YApi測(cè)試集能夠保存之前填寫的參數(shù),方便下次的調(diào)試。每個(gè)的請(qǐng)求參數(shù)還可以通過(guò)前面已請(qǐng)求的接口數(shù)據(jù)讀取,或填寫mock隨機(jī)字符串,通過(guò)設(shè)置斷言腳本驗(yàn)證返回?cái)?shù)據(jù)的正確性。

          • Pre-Script:Pre-Script 包括請(qǐng)求參數(shù)處理腳本和響應(yīng)數(shù)據(jù)處理腳本兩部分。通過(guò)自定義 js 腳本方式改變請(qǐng)求的參數(shù)和返回的 response 數(shù)據(jù)。他的使用場(chǎng)景如下:(1)接口請(qǐng)求參數(shù)需要加密及返回 response 解密;(2)接口請(qǐng)求參數(shù)需要添加計(jì)算 token

          • Test-Script (測(cè)試腳本): 通過(guò)自定義腳本斷言接口參數(shù)或返回 response 數(shù)據(jù),在接口用例頁(yè)面點(diǎn)擊 Test 編輯。

          具體示例:


          assert.equal(body.errcode, 0)assert.equal(body.data.group_name, 'testGroup')assert.equal(status, 200)

          總的來(lái)看跟postman支持的測(cè)試能力差不多。

          插件

          yapi支持如下的一些插件

          • yapi sso 登錄插件
          • yapi cas 登錄插件 By wsfe
          • yapi gitlab集成插件
          • oauth2.0登錄
          • rap平臺(tái)數(shù)據(jù)導(dǎo)入
          • dingding 釘釘機(jī)器人推送插件
          • export-docx-data 數(shù)據(jù)導(dǎo)出docx文檔
          • interface-oauth-token 定時(shí)自動(dòng)獲取鑒權(quán)token的插件
          • import-swagger-customize 導(dǎo)入指定swagger接口

          其中oauth和swagger插件是相當(dāng)實(shí)用的。

          安裝和部署

          yapi的后端是用nodejs實(shí)現(xiàn)的,所以安裝方式無(wú)非就是先裝nodejs,再npm install,最后加個(gè)pm2做服務(wù)管理。

          使用我們提供的 yapi-cli 工具,部署 YApi 平臺(tái)是非常容易的。執(zhí)行 yapi server 啟動(dòng)可視化部署程序,輸入相應(yīng)的配置和點(diǎn)擊開(kāi)始部署,就能完成整個(gè)網(wǎng)站的部署。部署完成之后,可按照提示信息,執(zhí)行 node/{網(wǎng)站路徑/server/app.js} 啟動(dòng)服務(wù)器。在瀏覽器打開(kāi)指定url, 點(diǎn)擊登錄輸入您剛才設(shè)置的管理員郵箱,默認(rèn)密碼為 ymfe.org 登錄系統(tǒng)(默認(rèn)密碼可在個(gè)人中心修改)。

          npm install -g yapi-cli --registry https://registry.npm.taobao.org
          yapi server

          利用pm2方便服務(wù)管理維護(hù)。

          npm install pm2 -g  //安裝pm2
          cd {項(xiàng)目目錄}
          pm2 start "vendors/server/app.js" --name yapi //pm2管理yapi服務(wù)
          pm2 info yapi //查看服務(wù)信息
          pm2 stop yapi //停止服務(wù)
          pm2 restart yapi //重啟服務(wù)

          代碼實(shí)現(xiàn)

          隨便看了一眼yapi的代碼,對(duì)于這種前后端分離的項(xiàng)目,我建議大家可以先看后端的具體實(shí)體實(shí)現(xiàn),也就是model層。

          第一個(gè)實(shí)體是interface,看名字盲猜代表的是接口的意思。

          getSchema() {   return {     title: { type: String, required: true },     uid: { type: Number, required: true },     path: { type: String, required: true },     method: { type: String, required: true },     project_id: { type: Number, required: true },     catid: { type: Number, required: true },     edit_uid: { type: Number, default: 0 },     status: { type: String, enum: ['undone', 'done'], default: 'undone' },     desc: String,     markdown: String,     add_time: Number,     up_time: Number,     type: { type: String, enum: ['static', 'var'], default: 'static' },     query_path: {       path: String,       params: [         {           name: String,           value: String         }       ]     },     req_query: [       {         name: String,         value: String,         example: String,         desc: String,         required: {           type: String,           enum: ['1', '0'],           default: '1'         }       }     ],     req_headers: [       {         name: String,         value: String,         example: String,         desc: String,         required: {           type: String,           enum: ['1', '0'],           default: '1'         }       }     ],     req_params: [       {         name: String,         desc: String,         example: String       }     ],     req_body_type: {       type: String,       enum: ['form', 'json', 'text', 'file', 'raw']     },     req_body_is_json_schema: { type: Boolean, default: false },     req_body_form: [       {         name: String,         type: { type: String, enum: ['text', 'file'] },         example: String,         value: String,         desc: String,         required: {           type: String,           enum: ['1', '0'],           default: '1'         }       }     ],     req_body_other: String,     res_body_type: {       type: String,       enum: ['json', 'text', 'xml', 'raw', 'json-schema']     },     res_body: String,     res_body_is_json_schema: { type: Boolean, default: false },     custom_field_value: String,     field2: String,     field3: String,     api_opened: { type: Boolean, default: false },     index: { type: Number, default: 0 },     tag: Array   }; }

          看了一下schema,果然不出所料,基本上一個(gè)接口的方方面面都定義到了。

          再看interfaceCase.js,繼續(xù)盲猜這個(gè)類用來(lái)表示接口測(cè)試用例。

          getSchema() {   return {     casename: { type: String, required: true },     uid: { type: Number, required: true },     col_id: { type: Number, required: true },     index: { type: Number, default: 0 },     project_id: { type: Number, required: true },     interface_id: { type: Number, required: true },     add_time: Number,     up_time: Number,     case_env: { type: String },     req_params: [       {         name: String,         value: String       }     ],     req_headers: [       {         name: String,         value: String       }     ],     req_query: [       {         name: String,         value: String,         enable: { type: Boolean, default: true }       }     ],
          req_body_form: [ { name: String, value: String, enable: { type: Boolean, default: true } } ], req_body_other: String, test_res_body: String, test_status: { type: String, enum: ['ok', 'invalid', 'error', ''] }, test_res_header: Schema.Types.Mixed, mock_verify: { type: Boolean, default: false }, enable_script: { type: Boolean, default: false }, test_script: String }; }

          梅開(kāi)二度,這里有個(gè)字段是test_script,沒(méi)仔細(xì)追代碼了,不過(guò)估計(jì)測(cè)試的斷言都以代碼的形式存在里面。

          根據(jù)思路,大家可以把model文件全部讀一遍,這樣就應(yīng)該可以大致了解yapi的持久化層實(shí)現(xiàn)了。

          功能實(shí)現(xiàn)層大家可以去讀controller里的代碼,ui層可以讀client里的代碼。

          思考

          總而言之,yapi基本上就是我們很多測(cè)試開(kāi)發(fā)同學(xué)所開(kāi)發(fā)的接口測(cè)試平臺(tái),支持接口文檔查看,簡(jiǎn)單的接口自動(dòng)化和mock等。

          有志于從事測(cè)試開(kāi)發(fā)的同學(xué)可以精讀一下代碼,相信會(huì)有不少收獲。

          需要搭建內(nèi)部接口測(cè)試平臺(tái)的同學(xué)可以直接私有化部署,用docker compose的話安裝體驗(yàn)更佳。

          (本文來(lái)自測(cè)試圈TC,作者乙醇)

          - End -

          掃一掃下面的二維碼
          免費(fèi)領(lǐng)取10G的Python學(xué)習(xí)資料哦~


          “掃一掃,領(lǐng)取Python學(xué)習(xí)資料”


          瀏覽 58
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美一级黄色大片 | 操BA片| 人人插人人操人人摸 | 亚洲v日本v欧美v久久精品 | 人人草免费公开视频 |