日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

HTTP Server Mock 从手工到平台的演变(二)

發(fā)布時(shí)間:2025/4/5 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP Server Mock 从手工到平台的演变(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

大家都知道,不管是 Web 系統(tǒng)、還是移動(dòng) APP,各自在與內(nèi)部、外部系統(tǒng)之間進(jìn)行數(shù)據(jù)交互時(shí),大多數(shù)情況下都是依賴(lài)接口。在基于接口約定開(kāi)發(fā)的模式下,依賴(lài)接口的產(chǎn)出時(shí)間如果延遲,將直接影響了整個(gè)研發(fā)調(diào)試的效率;如果不能對(duì)接口進(jìn)行及早測(cè)試,那發(fā)現(xiàn)問(wèn)題的時(shí)間就要被推遲了。既然雙方約定了接口格式,為何不按照這個(gè)規(guī)范直接測(cè)試,何必在乎依賴(lài)接口什么時(shí)候產(chǎn)出,優(yōu)先做到及早自測(cè),后續(xù)只要替換接口聯(lián)調(diào)通過(guò)即可。下面主要講解基于 HTTP 協(xié)議的 API 接口模擬,從手工 Mock 到平臺(tái)的演變過(guò)程。

遇到的問(wèn)題

曾經(jīng)遇到的困擾:在研發(fā)過(guò)程中接口調(diào)試對(duì)接難的問(wèn)題:

場(chǎng)景一:

【需求階段】Portal 前、后端約定基于接口開(kāi)發(fā)

【開(kāi)發(fā)階段】前端開(kāi)發(fā)完畢,后端接口尚未開(kāi)發(fā)完畢,前端只能硬編碼數(shù)據(jù)進(jìn)行測(cè)試,造成接口對(duì)接調(diào)試延后,而且每次進(jìn)行更多場(chǎng)景的數(shù)據(jù)調(diào)試,需要頻繁重啟服務(wù)、本地部署;

研發(fā)自測(cè)階段無(wú)法及早開(kāi)展,依賴(lài)接口約束大。

場(chǎng)景二:

【需求階段】新功能開(kāi)發(fā),Portal 依賴(lài)計(jì)費(fèi)的接口,雙方約定基于接口開(kāi)發(fā)(內(nèi)部、外部依賴(lài)接口場(chǎng)景均通用)

【開(kāi)發(fā)階段】Portal 在開(kāi)發(fā)進(jìn)行中,計(jì)費(fèi)尚未開(kāi)發(fā)完畢,Portal 遲遲不能與計(jì)費(fèi)對(duì)接調(diào)試(也有可能版本迭代步伐不一致的情況),測(cè)試階段一直被推遲;

另外,即使計(jì)費(fèi)接口開(kāi)發(fā)完畢,Portal 需要修改計(jì)費(fèi)約定的接口數(shù)據(jù)進(jìn)行調(diào)試,當(dāng)發(fā)現(xiàn)沒(méi)有對(duì)方接口權(quán)限或者計(jì)費(fèi)沒(méi)有過(guò)多人力資源來(lái)配合時(shí),也無(wú)法進(jìn)入更豐富的數(shù)據(jù)細(xì)節(jié)調(diào)試;

【測(cè)試階段】測(cè)試人員無(wú)法及早介入到調(diào)試階段進(jìn)行接口測(cè)試,造成發(fā)現(xiàn)缺陷的最佳時(shí)期被推遲;

場(chǎng)景三:

【需求階段】移動(dòng) APP 項(xiàng)目依賴(lài)后端獲取帶寬數(shù)據(jù)的接口

【開(kāi)發(fā)階段】移動(dòng) APP 端通過(guò)后端系統(tǒng) API 獲取帶寬數(shù)據(jù),繪制帶寬圖,APP 端繪圖工具開(kāi)發(fā)完畢,后端 API 帶寬接口尚未開(kāi)發(fā)完畢,移動(dòng) APP 端只能硬編碼數(shù)據(jù)進(jìn)行測(cè)試,造成對(duì)接延后,每次進(jìn)行更豐富的數(shù)據(jù)調(diào)試,需要頻繁重啟服務(wù)、本地部署;

研發(fā)自測(cè)階段無(wú)法及早開(kāi)展,依賴(lài)接口約束大。

總而言之,如圖所示:

依賴(lài)接口開(kāi)發(fā)完畢,才能夠進(jìn)入到接口聯(lián)調(diào)測(cè)試階段,即使 Portal 的功能開(kāi)發(fā)已經(jīng)完成,也無(wú)法進(jìn)行自測(cè)聯(lián)調(diào),消耗的等待時(shí)間代價(jià)是不可估量的,效率低,。

圖 -1- 傳統(tǒng)的接口對(duì)接調(diào)試流程

手工作坊 -Nginx 反向代理

要解決在研發(fā)過(guò)程中接口對(duì)接調(diào)試難的問(wèn)題,無(wú)非是所需即所有,減少等待時(shí)間,增加研發(fā)自測(cè)環(huán)節(jié),同時(shí)也讓測(cè)試及早參與進(jìn)來(lái),因此需要能夠把依賴(lài)接口模擬出來(lái)(白盒方面的 Mock 有許多解決方案,這里主要講的是基于 HTTP 請(qǐng)求的 API Server Mock),以便提高生產(chǎn)效率,改進(jìn)流程如圖所示:

圖 -2- 改進(jìn)的接口對(duì)接調(diào)試流程

當(dāng)前最簡(jiǎn)單的想法是要解決:基于 HTTP 請(qǐng)求、固定 url、能夠正則匹配,在這個(gè)需求的驅(qū)動(dòng)下,通過(guò) Nginx 的反向代理能夠解決問(wèn)題。

匹配具體路徑下某 html 文件

location ~ ^/live/(.*)\.html$ {root /home/htmlfile/ms; } location ~ ^/live/([A-Z0-9]+)$ { }

定義具體返回碼

location ~ ^/schedule/.*\.(json)$ { error_page 404 /404.html;}

定義其它狀態(tài)碼也是同樣道理:

error_page 403 /error/403.html; error_page 500 501 502 503 504 /error/500.html;</pre>

俗話(huà)說(shuō):術(shù)業(yè)有專(zhuān)攻,Nginx 并不擅長(zhǎng)做 Mock API 的工具,在管理配置文件即使可以通過(guò) svn 進(jìn)行管理,依然是維護(hù)比較困難,對(duì)于不熟悉 Nginx 的測(cè)試工程師,也有一定的學(xué)習(xí)成本。

拿來(lái)主義:不重復(fù)造輪子 - 開(kāi)源 WireMock

經(jīng)歷了 Nginx 的配置繁瑣,決定另尋新路,有開(kāi)源的 WireMock(http://wiremock.org/):

? WireMock 是一個(gè)靈活的庫(kù),用于 Web 服務(wù)測(cè)試,和其他測(cè)試工具不同的是:WireMock 創(chuàng)建一個(gè)實(shí)際的 HTTP 服務(wù)器來(lái)運(yùn)行你的 Web 服務(wù)以方便測(cè)試;

? 支持 HTTP 響應(yīng)存根、請(qǐng)求驗(yàn)證、代理 / 攔截、記錄和回放;

創(chuàng)建一個(gè)基于 WireMock 的 JavaProject(運(yùn)行在 tomcat 下管理):

圖 -3-ServerMock Project

web.xml 配置如下:

<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9"version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <listener> <display-name>wiremock-startup-listener</display-name> <listener-class>com.github.tomakehurst.wiremock.servlet.WireMockWebContextListener</listener-class> <description>Loads WireMock and populates the servletcontext with its services</description> </listener> <context-param> <param-name>WireMockFileSourceRoot</param-name> <param-value>/WEB-INF/wiremock</param-value> </context-param> //如果對(duì)軟件測(cè)試、接口測(cè)試、自動(dòng)化測(cè)試、性能測(cè)試、LR腳本開(kāi)發(fā)、面試經(jīng)驗(yàn)交流。<context-param> //感興趣可以175317069,群內(nèi)會(huì)有不定期的發(fā)放免費(fèi)的資料鏈接,這些資料<param-name>verboseLoggingEnabled</param-name> //都是從各個(gè)技術(shù)網(wǎng)站搜集、整理出來(lái)的<param-value>false</param-value> //如果你有好的學(xué)習(xí)資料可以私聊發(fā)我,我會(huì)注明出處之后</context-param> //分享給大家。<servlet> <servlet-name>wiremock-mock-service-handler-servlet</servlet-name> <servlet-class>com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet</servlet-class> <init-param> <param-name>RequestHandlerClass</param-name> <param-value>com.github.tomakehurst.wiremock.http.StubRequestHandler</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>wiremock-mock-service-handler-servlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>wiremock-admin-handler-servlet</servlet-name> <servlet-class>com.github.tomakehurst.wiremock.jetty6\. Jetty6HandlerDispatchingServlet</servlet-class> <init-param> <param-name>RequestHandlerClass</param-name> <param-value>com.github.tomakehurst.wiremock.http.AdminRequestHandler</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>wiremock-admin-handler-servlet</servlet-name> <url-pattern>/__admin/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.json</welcome-file> <welcome-file>index.xml</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.txt</welcome-file> </welcome-file-list> <mime-mapping> <extension>json</extension> <mime-type>application/json</mime-type> </mime-mapping> <mime-mapping> <extension>xml</extension> <mime-type>application/xml</mime-type> </mime-mapping> <mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type> </mime-mapping> <mime-mapping> <extension>txt</extension> <mime-type>text/plain</mime-type> </mime-mapping> </web-app>

web.xml 的這項(xiàng)配置可以改變?cè)次募恢?/p> <context-param> <param-name>WireMockFileSourceRoot</param-name> <param-value>/WEB-INF/wiremock</param-value> </context-param>

使用 Maven 管理依賴(lài),配置如下:

<dependency><groupId>com.github.tomakehurst</groupId><artifactId>wiremock</artifactId><version>1.53</version><!-- Include everything below here if you have dependency conflicts --><classifier>standalone</classifier><exclusions><exclusion><groupId>org.mortbay.jetty</groupId><artifactId>jetty</artifactId></exclusion><exclusion><groupId>com.google.guava</groupId><artifactId>guava</artifactId></exclusion><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId></exclusion><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId></exclusion><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion><exclusion><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId></exclusion><exclusion><groupId>org.skyscreamer</groupId><artifactId>jsonassert</artifactId></exclusion><exclusion><groupId>xmlunit</groupId><artifactId>xmlunit</artifactId></exclusion><exclusion><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId></exclusion><exclusion><groupId>net.sf.jopt-simple</groupId><artifactId>jopt-simple</artifactId></exclusion></exclusions></dependency>

具體的部署這里就不介紹了,說(shuō)說(shuō) WireMock 的配置:

? WireMock 的文件目錄

如圖所示:

mappings: 存放映射描述的文件

__files: 存放映射匹配結(jié)果的文件

圖 -4-WireMock 的文件目錄

WireMock 的匹配規(guī)則示例

分兩種:完整 Url 匹配和正則 UrlPattern

Url:完全匹配

mappings:cities-mapping.json

{ "request": { "method": "GET", "url": "/cities"}, "response": { "status": 200, "bodyFileName": "/cities.json","headers": {"Content-Type": "application/json","Cache-Control": "max-age=86400"}} }

__files:cities.json

{"cityName": "公司操作間","shortname": "WS","provinceName": "北京","provinceNameEn": "BeiJing City","code": "0001","cityNameEn": "Workshop"}

UrlPattern:正則匹配任何 6 位數(shù)的,例如:/customer/123456/

mappings:cities-mapping.json

{ "request": { "method": "GET", "urlPattern": "/customer/[0-9]{6}/"}, "response": { "status": 200, "bodyFileName": "/customer.json","headers": {"Content-Type": "application/json","Cache-Control": "max-age=86400"}} }

__files:customer.json

{"channels": [],"code": "781","companyName": "","enable": true,"name": "163","password": "CC@ne.com","userState": "COMMERCIAL" }

高效平臺(tái)化

使用 WireMock 通過(guò) mappings 和 __files 文件夾可以有效管理映射和返回內(nèi)容文件,但是所有文件的有部分可抽取未固定模板,而這些部分目前是手動(dòng)編輯,關(guān)注這些部分會(huì)分散業(yè)務(wù)的精力,如果可以做成平臺(tái)化管理,所有接口通過(guò)創(chuàng)建完成,文件命名規(guī)則全部由系統(tǒng)進(jìn)行管理,將節(jié)省的時(shí)間更多投入業(yè)務(wù)關(guān)注和及早進(jìn)行自測(cè),這樣子的收益將會(huì)更大。

那怎么樣的平臺(tái)才算能夠滿(mǎn)足當(dāng)前需求呢?

  • 基于 HTTP 協(xié)議
  • 支持 Url、UrlPattern 匹配
  • 支持?jǐn)?shù)據(jù)存儲(chǔ)
  • API 接口規(guī)范化管理
  • 提交表單即可生成 mapping 和 __files 所需文件
  • 不同項(xiàng)目接口有不同的前綴
  • 能夠返回指定格式(json|xml|文本)內(nèi)容

圖 -4-ServerMock-v1.0- 架構(gòu)圖

根據(jù)架構(gòu)圖,做了總體規(guī)劃如下:

圖 -5-ServerMock-v1.0 規(guī)劃

如果對(duì)軟件測(cè)試、接口測(cè)試、自動(dòng)化測(cè)試、性能測(cè)試、LR腳本開(kāi)發(fā)、面試經(jīng)驗(yàn)交流。感興趣可以175317069,群內(nèi)會(huì)有不定期的發(fā)放免費(fèi)的資料鏈接,這些資料都是從各個(gè)技術(shù)網(wǎng)站搜集、整理出來(lái)的,如果你有好的學(xué)習(xí)資料可以私聊發(fā)我,我會(huì)注明出處之后分享給大家。

技術(shù)選型

由于原來(lái)的測(cè)試平臺(tái)使用 Python 編寫(xiě),為了保持風(fēng)格一致,從界面錄入到文件生成處理依然采用 Python,后臺(tái)工具使用 WireMock 的 standalone 模式,通過(guò) shell 腳本進(jìn)行一鍵啟停管理,以及實(shí)時(shí)刷新 url、mapping 映射;

HTTP API Mock 項(xiàng)目管理 Web 前臺(tái)

使用 Python+Django+MySQL 進(jìn)行開(kāi)發(fā),分為項(xiàng)目配置和接口配置兩大部分。

項(xiàng)目配置頁(yè)

介紹:配置協(xié)議、進(jìn)行 mock 服務(wù)器的重啟、重新加載(有新的接口文件生成系統(tǒng)會(huì)自動(dòng) reset 即可,當(dāng)然手工 reset 也可以,即時(shí)加載無(wú)須重啟服務(wù)等待)。

圖 -6- 項(xiàng)目配置頁(yè)

接口列表頁(yè)

介紹:展示列表,列出相關(guān) URL、方法、是否正則、返回碼、返回類(lèi)型。

圖 -7- 接口列表頁(yè)

接口配置頁(yè)

介紹:選擇方法、URL 類(lèi)型,填寫(xiě) URL(如果選擇 URL 類(lèi)型為 UrlPattern,則填寫(xiě)正則表達(dá)式),填寫(xiě)狀態(tài)碼、返回接口,以及返回頭,就可以完成一個(gè) mock 接口的創(chuàng)建。

圖 -8- 接口配置頁(yè)

接口配置有三種輸入形式:

直接輸入返回結(jié)果

圖 -9- 手工輸入

一般場(chǎng)景在返回結(jié)果 500k 以?xún)?nèi)的內(nèi)容,可以直接輸入,保存進(jìn)入數(shù)據(jù)庫(kù);

通過(guò) url 抓取返回結(jié)果

圖 -10-url 抓取

一般場(chǎng)景在返回結(jié)果超過(guò) 500k 以上內(nèi)容,目標(biāo) Mock 接口已經(jīng)存在,可以直接抓取生成文件;

通過(guò)文件上傳返回結(jié)果

圖 -11- 上傳文件

一般場(chǎng)景在返回結(jié)果比較大|目標(biāo) Mock 接口還未開(kāi)發(fā)完成,手工上傳返回內(nèi)容的文件即可。

以上三種靈活的保存返回內(nèi)容方式,最終保存的接口會(huì)按照以下格式生成 mapping 和 __files 所需文件:

圖 -12-mapping 和 __files 文件格式

Mock 項(xiàng)目管理 Server 后臺(tái)

使用 Java-WireMock 進(jìn)行后臺(tái)服務(wù),在項(xiàng)目配置頁(yè)通過(guò)按鈕:重啟、重新加載,調(diào)用后臺(tái)腳本:wiremock_controller.sh,僅供參考:

#!/bin/bash if [ "$#" = 0 ];thenecho "Usage: $0 (start|stop|restart|reset)"exit 1 fidirWiremock=`pwd` getCount=`ps -ef | grep "wiremock-1.53-standalone" | grep -v "grep" |wc -l` wiremock_jar=${dirWiremock}/wiremock-1.53-standalone.jar port=9999 wiremock_url=http://localhost:${port}stop(){count=${getCount}if [ 1==${count} ];thencurl -d log=aaa ${wiremock_url}/__admin/shutdownecho "Stop success!......"elseecho "Already stop"fi }start(){count=${getCount}if [ 0==${count} ];thennohup java -jar ${wiremock_jar} --verbose=true --port=${port} & echo "Start success!......"elseecho "Already start"fi }if [ "$1" = "restart" ];thencount=${getCount}if [ 1==${count} ];thenecho "Wiremock is running,wait for restarting! ...."stop echo "Start wiremock......"start elsestartfielif [ "$1" = "start" ];thenecho "Start wiremock......"startelif [ "$1" = "stop" ];thenecho "Stop wiremock......"stopelif [ "$1" = "reset" ];thencount=${getCount}if [ 0==${count} ];thenecho "Wiremock must be running before reset,wait for starting! ...."startficurl -d log=aaa ${wiremock_url}/__admin/mappings/resetecho "Reset success!......" fi

其中:

“nohup java -jar?{port} &”:在 linux 系統(tǒng)后臺(tái)運(yùn)行 WireMock;

“curl -d log=aaa ${wiremock_url}/__admin/mappings/reset”:是通過(guò)發(fā)送 POST 請(qǐng)求,重新加載新生成的配置文件,在 WireMock 的源碼中可以看到:reset 的作用:

public interface Admin {void addStubMapping(StubMapping stubMapping);ListStubMappingsResult listAllStubMappings();void saveMappings();void resetMappings();void resetScenarios();void resetToDefaultMappings();VerificationResult countRequestsMatching(RequestPattern requestPattern);FindRequestsResult findRequestsMatching(RequestPattern requestPattern);void updateGlobalSettings(GlobalSettings settings);void addSocketAcceptDelay(RequestDelaySpec spec);void shutdownServer(); }

通過(guò)一系列源碼追溯,可以找到重置:

@Overridepublic void reset() {mappings.clear();scenarioMap.clear();}

可以推測(cè)映射文件是存放到列表的:

public class SortedConcurrentMappingSet implements Iterable<StubMapping>{private AtomicLong insertionCount;private ConcurrentSkipListSet<StubMapping> mappingSet; ...... }

當(dāng) WireMock 啟動(dòng),日志有以下描述:

2015-02-12 11:38:37.844 Verbose logging enabled 2015-02-12 11:38:38.657:INFO::Logging to STDERR via wiremock.org.mortbay.log.StdErrLog 2015-02-12 11:38:38.664 Verbose logging enabled/$ /$ /$ /$ /$ /$ | $ /$ | $|__/ | $$ /$$ | $ | $ /$$| $ /$ /$$$ /$$$ | $$ /$$ /$$$ /$$$$| $ /$ | $/$ $ $| $ /$__ $ /$__ $| $ $/$ $ /$__ $ /$_____/| $ /$/ | $$_ $$| $| $ \__/| $$$$| $ $$| $| $ \ $| $ | $$$/ | $$/ \ $$| $| $ | $_____/| $\ $ | $| $ | $| $ | $_ $ | $/ \ $| $| $ | $$$$| $ \/ | $| $$$/| $$$$| $ \ $ |__/ \__/|__/|__/ \_______/|__/ |__/ \______/ \_______/|__/ \__/port: 9999 enable-browser-proxying: false no-request-journal: false verbose: true

如果對(duì)軟件測(cè)試、接口測(cè)試、自動(dòng)化測(cè)試、性能測(cè)試、LR腳本開(kāi)發(fā)、面試經(jīng)驗(yàn)交流。感興趣可以175317069,群內(nèi)會(huì)有不定期的發(fā)放免費(fèi)的資料鏈接,這些資料都是從各個(gè)技術(shù)網(wǎng)站搜集、整理出來(lái)的,如果你有好的學(xué)習(xí)資料可以私聊發(fā)我,我會(huì)注明出處之后分享給大家。

圖 -13-WireMock 啟動(dòng)

成功處理請(qǐng)求的日志:

2015-02-12 11:41:10.320 Received request: GET /test/today/dkfDF123/1234/ HTTP/1.1 Host: 192.168.32.55:9999 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: csrftoken=alXbvCtMyTBI1wnSnRoljguTaBnTDbPo; sessionid=tvoi9rzs66umnt1a26wsj36eqry2e2lo Connection: keep-alive

總結(jié)

HTTP API 接口測(cè)試痛點(diǎn)是什么?很多公司劃分不同研發(fā)組,各組系統(tǒng)之間的數(shù)據(jù)交互通過(guò)接口來(lái)實(shí)現(xiàn),那很多時(shí)候就是集中在接口開(kāi)發(fā)不同步,測(cè)試無(wú)法及早參與,對(duì)接調(diào)試難的問(wèn)題。或許很多團(tuán)隊(duì)遇到這種問(wèn)題,就是選擇同步開(kāi)發(fā)或者等待。當(dāng)你選擇等待的時(shí)候,你的產(chǎn)品質(zhì)量就得不到及時(shí)驗(yàn)證,因?yàn)楦緵](méi)有測(cè)試過(guò),在當(dāng)前快速迭代的開(kāi)發(fā)模式中,時(shí)間是最致命的要素,如果不能及時(shí)交付,交付的質(zhì)量又得不到保證,那是相當(dāng)被動(dòng)的局面,最后返工的成本比你當(dāng)時(shí)愿意追加測(cè)試的成本會(huì)來(lái)的更高。

遇到這類(lèi)問(wèn)題是想辦法解決,而不是回避,我們可以使用 Mockito 對(duì)依賴(lài)進(jìn)行 Mock,那同樣道理,使用 Mock 技術(shù)也可以對(duì) HTTP API 進(jìn)行 Mock,按照這個(gè)思路探索下去,看看有沒(méi)有開(kāi)源解決方案,是否能夠解決當(dāng)前問(wèn)題,如果可以就不用重復(fù)寫(xiě)一套解決方案;如果不行,那能否基于開(kāi)源的做二次開(kāi)發(fā)呢?當(dāng)團(tuán)隊(duì)經(jīng)歷過(guò)測(cè)試痛點(diǎn),調(diào)研收集了一定的數(shù)據(jù),這些問(wèn)題的答案就會(huì)浮出水面了。

或許有人要問(wèn),使用之后能夠提高多少效率呢?看回《圖 -2- 改進(jìn)的接口對(duì)接調(diào)試流程》,根據(jù)我們的經(jīng)驗(yàn),要統(tǒng)計(jì)當(dāng)前迭代中有多少 API 需要對(duì)接調(diào)試,如果對(duì)比舊的模式來(lái)說(shuō),API 接口調(diào)試效率提升至少有 10%;可想而知,迭代中全是依賴(lài) API 接口開(kāi)發(fā)的話(huà),那提升的效率就相當(dāng)可貴了。

轉(zhuǎn)載于:https://my.oschina.net/u/3942476/blog/2966728

總結(jié)

以上是生活随笔為你收集整理的HTTP Server Mock 从手工到平台的演变(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。