基于Cypress的一個API小工具

這個工具你照著操作一遍,應(yīng)該就能夠使用Cypres進(jìn)行最基本的API測試了;再根據(jù)實(shí)際情況豐富一下,應(yīng)該就成為你自己的工具了。

這個工具來源的背景是:

  • 項(xiàng)目上的一個產(chǎn)品購買流程,購買過程中依賴另一個團(tuán)隊登錄模塊的功能。但是呢,這個團(tuán)隊往往會在你不知情的情況下,把登錄模式改了(這里就不糾結(jié)是不是因?yàn)闃I(yè)務(wù)需求而產(chǎn)生的改動了),時不時變成雙認(rèn)證模式(給你的郵箱或者手機(jī)發(fā)一個6位數(shù)字的code)。測試嘛,你知道的,輸入的一些郵箱啊,手機(jī)號啊,很多時候都是假的,怎么可能查到相應(yīng)的認(rèn)證code。
  • 然后呢,slack里各種@對方的人,反復(fù)聊“這里又出現(xiàn)雙認(rèn)證了 -> 改動是業(yè)務(wù)需求的嗎 -> 是代碼改壞導(dǎo)致的嗎 -> 是測試需要,臨時改了配置嗎 -> 麻煩幫助改好(或者改回去吧)-> 下回有變動能給我們只知會一聲不 -> 謝謝啊(不太情愿地)”。
  • 我們的BA經(jīng)常來找我:“我用我賬號,一直出來這個雙認(rèn)證,你能試試你的看有沒有嗎?”。其實(shí),他只是為了新feature,想去下游flow截張圖,但是經(jīng)常逃不過雙認(rèn)證這一劫……然后就又要返回上述聊天模式聊一遍……

(故事情節(jié)寫多了,主要怕以后我也忘了為什么要寫這個工具……)

不想看上邊羅里吧嗦的描述的同學(xué),可以直接移步下邊的內(nèi)容!

我把整個購買流程過程中涉及到的API,調(diào)用API的時機(jī),以及他們之間的關(guān)系捋了一遍,基本的流程是:

用戶是否注冊校驗(yàn) (是否有guid返回) ->
登錄(guid有value返回的時候)或注冊(guid返回null的時候)->
創(chuàng)建聯(lián)系人信息(這里需要用到guid,會生成一個CONTACT_ID)->
創(chuàng)建使用人信息(這里需要用到CONTACT_ID,生成CLIENT_ID)->
創(chuàng)建支付信息(這里需要用到CONTACT_IDCLIENT_ID,生成PAYMENTPROFILE_ID)->
創(chuàng)建訂單(這里需要用到guidCLIENT_ID,生成PRODUCT_IDORDER_ID

這個過程中所有生成的信息,我都給它保存到一個文本里,因?yàn)榭梢酝ㄟ^任意一個在數(shù)據(jù)庫里查到相關(guān)信息。

下邊進(jìn)入正題,結(jié)構(gòu)是什么?一些關(guān)鍵的地方是如何處理的?

結(jié)構(gòu)
  • fixtures文件夾
    無論是request url里需要的params,還是request里要用到的body,都放這里了,格式均為Json。

    fixtures里的json文件名

    Json里的內(nèi)容,要用啥,就寫啥。
    json文件里的內(nèi)容示例

  • integration文件夾
    測試用例。

    測試用例文件

解讀一下用例里邊稍微特殊一點(diǎn)的地方(按紅色標(biāo)號順序)。


測試用例文件里的內(nèi)容
  1. 這里想自動生成一些自定義部分的value,用了faker來實(shí)現(xiàn);同時,在名字里加上了當(dāng)前時間,用來表明是什么時間創(chuàng)建的,用了JavaScript日期處理庫類(moment.js)來達(dá)到目的。
  2. 這里填寫的是在fixtures文件夾里定義的.json文件名稱。
  3. 這里將/signup的一個返回值定義為變量guid,后續(xù)會用到。
  4. 這里使用了之前拿到的guid,使用方法為this.guid
  5. 這里將/contacts的返回值id定義為變量contact_id,后續(xù)會用到。
  6. /accounts里使用了之前拿到的contact_id,使用方法為直接調(diào)用contact_id
    為什么都是調(diào)用響應(yīng)數(shù)據(jù),4this.guid,而6直接用contact_id呢?
    -- 4是使用.as() 別名保存響應(yīng)數(shù)據(jù),可以在共享測試上下文中使用,使用方法為this.xxx
    -- 6是使用關(guān)聯(lián)接口的返回響應(yīng)數(shù)據(jù),直接調(diào)用就行。
  • common文件夾
    util.js里寫了個保存數(shù)據(jù)的方法,用來存放用例執(zhí)行過程中生成的重要信息(主要是想通過這些信息,在相應(yīng)的系統(tǒng)或者數(shù)據(jù)庫里查找對應(yīng)數(shù)據(jù))。
    執(zhí)行之后會生成一個名叫message.txt的文件。

    util.js

  • scripts文件夾
    包含一個執(zhí)行測試的文件。
    整個場景區(qū)分老用戶新用戶,integration文件夾里的測試用例用existingUsernonExistingUser來區(qū)分,執(zhí)行的時候通過傳入userType定位到對應(yīng)的integration文件夾里的測試文件。

    測試用例文件

    run.js

  • cypress.json
    沒有太特殊的配置。

    cypress.json

  • package.json
    主要是一些執(zhí)行命令的定義。

    package.json

  • 執(zhí)行命令
    npm run new-user-purchase
    npm run existing-user-purchase
    (這里多說一句,如果你想用npm run purchase,你需要在run.js里加個邏輯判斷,即process.env.userType為空時,spec的value是什么,否則會報錯。)

  • message.txt
    這里邊的數(shù)據(jù),可以支持在相應(yīng)的系統(tǒng)或者數(shù)據(jù)庫里查詢?nèi)魏蜗氩榈男畔ⅰ?br>

    message.txt

最后

其實(shí)這個工具不難,就是依據(jù)API之間的邏輯關(guān)系,給它湊到一塊兒,同時還發(fā)現(xiàn),直接通過API走這套流程盡然不需要二次認(rèn)證。(即使需要的話,我想我們可以通過創(chuàng)建一個專門用于自動化的二次認(rèn)證code,條條大路通羅馬,總能想到解決的辦法~)

后來想想,這個工具可以有多個用途:

  1. 解決BA的后顧之憂。
  2. 拋開測試其本身功能的話,可以幫助快速創(chuàng)建測試數(shù)據(jù),用于測試基于它的其他功能,比通過頁面完成整個過程要來的快。
  3. 加一些校驗(yàn)在里邊的話,還可以作為接口自動化測試,用作smoke test或者regression test均可。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內(nèi)容