獲取介面資料

2021-10-09 15:12:57 字數 2224 閱讀 2704

介面測試,第一步就是需要獲取介面資料。

目前已實現2個方案,可以獲取到線上環境使用者操作的介面資料:

方案一、通過和運維溝通,通過運維從後端取log日誌發過來,我這邊再寫乙個指令碼,從log檔案裡面取需要的url和parameter儲存下來。

方案二、呼叫es的介面,通過指令碼查詢拉取kibana上面對應的index的資料。

從方案暴露的問題作為切入點,記錄一下問題和實現的過程。

背景:因為需求不是很明確,一開始的想法是,只需要拿到線上環境的使用者操作的介面資料,通過指令碼去跑介面,得出乙份respond的資料作為版本前的標準資料就可以了。

但是,細想一下,這樣的標準資料是死的,方案一 就暴露了很大的不足:

1.很依賴運維什麼時候給的介面log,什麼時候才能更新這份版本前的資料。而且資料量巨大,0.5天的介面資料解壓出來有12gb,單單提取url和parameter的文字檔案有將近7gb。

2.如果版本更新後介面進行了cud,那麼,版本前介面沒cud的respond資料是沒有更新的,版本後,如果也還是用運維給的log的url和parameter去跑,這份respond的資料也是沒有更新的,即是版本前和版本後都沒有把已經cud的介面給加進去做對比,顯然,這是乙個很大的漏洞。

背景:顯然,方案一 存在不足,才會誕生方案

二、方案三  。。。

方案二針對方案一 的疼點,解決了以下問題:

1.介面資料依賴運維的問題,可解藕。

2.介面資料迭代麻煩的問題,可隨時更新介面資料,today,yesterday and so on ,只要需要,隨時可以取乙份新的介面資料下來。但,方案二 也有限制,因為面向的物件不是運維了,面對運維,可能說你要多少的資料,運維就給你發多少gb。而,方案二 是通過指令碼查詢去從es取想要的資料,物件導向就從運維變成elk了,方案二 的限制的根本,其實也在於es的限制,因為呼叫es的介面,es default就是一次最多只能返回10000條資料,當你想要取1000000條資料當時候,抱歉,報錯了:size shoud be < = 10000

但,10k的資料,很明顯是不夠的,中午高峰期的時候,10分鐘就有100k左右的資料:

所以,如果要取的話,大約取1000k應該就差不多了。

那怎麼辦,怎麼從10k變成1000k

換位思考下,如果這個是money呢,既然不能一次取那麼多錢,那麼分多次取,不就可以了嗎

1.date是自定義取那個時間的資料,精確到 %y-%m-%d %h:%m:%s

2.然後每一次取10k條資料,同時在當前設定的時間上增加5分鐘,也就是,乙個小時取12個5分鐘前面的10k條資料

3.如果range(100),10k*100 = 1000k,100次基本上可以覆蓋到一整天高峰時期的介面資料(10:00-18:00)

4.同時增加異常處理,報錯了,也會繼續跑下個5分鐘(可能偶爾會出現些不符合json格式的介面),目的是取介面資料,報錯不應該停止。

5.考慮到會給es的伺服器大的壓力,所以,每取完一次,等待10s再去執行下一次,盡量希望那邊的伺服器能扛住(心慌慌)

(如果不行,會考慮給30s等待時間)

problem:

雖然,這樣已經可以取到大量的介面資料了,但是,還有個問題就是,取的介面資料並不是連續的,1000k的資料都是取每個5分鐘前面的10k條,和運維給的log的檔案的連續的資料是有區別的。考慮到我們的需求是介面測試自動化對比,介面資料是否連續的應該是影響不大的,只要量夠大,是基本都覆蓋到了,而且,如果真的要連續的資料,半天就有7g的資料,覆蓋一天,就有十幾g,如此大的資料量,對於介面測試也是很大的壓力,所以選擇了指令碼實現的散點分布的大覆蓋實現方法。

(當然,需要取連續的資料在某些場景是需要的,有方法是改es的配置,但是,個人覺得這並不是最優解,es既然做了限制,自然會有它的道理,估計是不想給伺服器太大的壓力,所以這裡也為以後埋個伏筆)

php curl請求介面並獲取資料

當我們在做php開發的時候,很多時候需要對介面進行測試,或者更方便的呼叫一些已有模組的介面,取到結果並進行後續操作,我們可以通過curl進行模擬提交post和get請求,來去實現這些功能。下面是對curl的post和get的封裝 php created by phpstorm.user thinkp...

PHP curl請求介面並獲取資料 詳解

最近因為呼叫ping 支付的原因,可是把我給難為到了,主要還是自己自我解決問題的能力不太強,下面試報錯資訊 一般分為四步 step1 curl init 初始化 curl init string url 引數可以為空,單獨初始化乙個curl資源,要是有引數,則代表curl setopt 中的cutl...

php獲取api介面資料的方法

1 get方式請求api介面 file get contents函式 a file get contents 如果介面返回json格式的資料,則要轉為陣列re json deco de re json decode re jso nd e code a,true 2 post方式請求介面 curl擴...