測(cè)試那些事兒(一)- 同步和異步

網(wǎng)絡(luò)編程中同步和異步的定義:

同步:就是發(fā)起一個(gè)功能調(diào)用時(shí),在這個(gè)調(diào)用沒(méi)有得到結(jié)果之前,該調(diào)用就不返回或調(diào)用者不繼續(xù)執(zhí)行后續(xù)操作。
異步:異步與同步相對(duì),當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者在沒(méi)有得到結(jié)果之前,就可以繼續(xù)執(zhí)行后續(xù)操作。當(dāng)這個(gè)調(diào)用完成后,一般通過(guò)狀態(tài)(輪詢)、通知(消息)和回調(diào)來(lái)通知調(diào)用者。對(duì)于異步調(diào)用,調(diào)用的返回并不受調(diào)用者控制。

從上面的定義中我們可以看出,同步和異步可以由調(diào)用者控制,也可以由被調(diào)用者控制。以下我們就暫認(rèn)為調(diào)用者是客戶端,被調(diào)用者是服務(wù)端。

客戶端在調(diào)用服務(wù)端接口后,如果需要等服務(wù)端的返回結(jié)果才進(jìn)行下一步操作,那就是同步。如果不需要,無(wú)論服務(wù)端返回什么,客戶端都會(huì)進(jìn)行下一步操作,那就是異步。
服務(wù)端本身也可以控制同步和異步。對(duì)于一個(gè)需要長(zhǎng)時(shí)間計(jì)算的功能,服務(wù)端會(huì)將它做成異步的,在客戶端請(qǐng)求后立即返回個(gè)結(jié)果給客戶端,這個(gè)結(jié)果沒(méi)有任何實(shí)際意義,只是說(shuō)明服務(wù)端接收到了請(qǐng)求。對(duì)于一個(gè)很快就能得到結(jié)果的請(qǐng)求,那就使用同步好了,返回結(jié)果中包含了本次請(qǐng)求需要得到的數(shù)據(jù)。

那同步和異步測(cè)試需要注意什么呢?

1. 用戶體驗(yàn)

現(xiàn)在有很多的app都有審核的功能,需要用戶們提供各種資料完成相應(yīng)的認(rèn)證。這些審核有自動(dòng)審核、人工審核等等。自動(dòng)審核一般較快,因?yàn)樾枰獙?duì)比的數(shù)據(jù)都存在服務(wù)端,直接程序比對(duì)即可。人工審核就慢了,快的話幾分鐘,如果趕上個(gè)周末,2-3天都不一定。所以,針對(duì)自動(dòng)審核和人工審核,就需要合理的運(yùn)用同步和異步,達(dá)到最好的用戶體驗(yàn)。
自動(dòng)審核快,用戶在提交自己的資料后,稍事等待應(yīng)該就能得到結(jié)果,在客戶端上最多也不會(huì)等待超過(guò)5秒,看到個(gè)loading等一會(huì)就好了。在這種情況下,使用同步就很合適,客戶端在沒(méi)有得到服務(wù)端的結(jié)果時(shí)就等待,直到審核結(jié)果回傳過(guò)來(lái)立即展示在客戶端上,用戶的體驗(yàn)會(huì)很好,畢竟很快得到了答案。
而人工審核,我們不能寄希望于總有一個(gè)人一直在那里審核,就算有,快的話也要幾分鐘吧,畢竟查數(shù)據(jù)什么的都是人工。用戶在這種情況下是等不了的,也不可能一直在這個(gè)頁(yè)面上等著。所以異步就派上了用場(chǎng),客戶端發(fā)出審核的請(qǐng)求,服務(wù)端接收到后立即告訴客戶端我收到了,但不可能給出結(jié)果。客戶端不論有沒(méi)有接收到服務(wù)端的請(qǐng)求,都會(huì)告訴用戶請(qǐng)等待XX時(shí)間后查看結(jié)果,用戶不需要一直在這個(gè)頁(yè)面等著。直到服務(wù)端計(jì)算完成,再通過(guò)推送消息的方式通知到客戶端,或者用戶再一次進(jìn)入認(rèn)證頁(yè)進(jìn)行認(rèn)證結(jié)果請(qǐng)求,才會(huì)得知自己的認(rèn)證結(jié)果。

對(duì)于測(cè)試來(lái)說(shuō),如果遇到需要很長(zhǎng)時(shí)間才能得到結(jié)果的接口,就要建議客戶端使用異步方式請(qǐng)求,減少用戶差的體驗(yàn)

2. 功能實(shí)現(xiàn)

試想一下,如果一個(gè)功能需要兩個(gè)接口配合才能完成,有可能存在什么問(wèn)題呢?我們從本次同步和異步的主題考慮來(lái)舉個(gè)例子:
有一個(gè)新建聯(lián)系人的功能,能夠新建聯(lián)系人的入口有很多,假設(shè)其中一個(gè)入口是通過(guò)上傳照片創(chuàng)建聯(lián)系人。這個(gè)入口要是想完成新建就需要調(diào)用兩個(gè)接口,一個(gè)是上傳照片接口(A),另一個(gè)是創(chuàng)建聯(lián)系人接口(B)。試想一下,如果A是客戶端異步調(diào)用的,那是不是有可能會(huì)出現(xiàn)B調(diào)用完成后A還沒(méi)有調(diào)用完成的情況?如果是那樣,那本次創(chuàng)建的聯(lián)系人就無(wú)法實(shí)時(shí)關(guān)聯(lián)A接口上傳的照片,輕則用戶體驗(yàn)有問(wèn)題(客戶端可以使用輪詢拉照片等),重則就會(huì)出現(xiàn)創(chuàng)建了聯(lián)系人卻沒(méi)有照片的BUG。

測(cè)試人需關(guān)注

對(duì)于測(cè)試來(lái)說(shuō),如果一個(gè)功能需要>=2個(gè)接口的配合,一定要考慮這些接口是同步還是異步的,無(wú)論調(diào)用者還是被調(diào)用者。否則就會(huì)出現(xiàn)接口間本該有的聯(lián)系卻沒(méi)有的情況

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 點(diǎn)擊查看原文 Web SDK 開(kāi)發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 14,299評(píng)論 0 15
  • 聊聊阻塞與非阻塞、同步與異步、I/O 模型 來(lái)源:huangguisu 鏈接:http://blog.csdn.n...
    meng_philip123閱讀 1,741評(píng)論 1 13
  • 一、簡(jiǎn)歷準(zhǔn)備 1、個(gè)人技能 (1)自定義控件、UI設(shè)計(jì)、常用動(dòng)畫特效 自定義控件 ①為什么要自定義控件? Andr...
    lucas777閱讀 5,378評(píng)論 2 54
  • 夕空漸黃,陽(yáng)光在云間吞吞吐吐,能清晰地看見(jiàn)細(xì)小的灰塵浮浮沉沉。手機(jī)里揚(yáng)起的是中孝介的夏夕空。 空氣很干燥,呼吸的話...
    野渡百川閱讀 350評(píng)論 6 4
  • 伊人 戴著我為你編織的 花的王冠 披著我為你裁下的 云的霓裳 抱著我為你截下的 風(fēng)的流淌 緩緩進(jìn)入情的夢(mèng)鄉(xiāng) 愛(ài)的海洋
    陽(yáng)光山上摩云居閱讀 181評(píng)論 0 0

友情鏈接更多精彩內(nèi)容