如何準(zhǔn)備測(cè)試數(shù)據(jù)?

文章內(nèi)容來(lái)源于《軟件測(cè)試52講》

測(cè)試數(shù)據(jù)的準(zhǔn)備是軟件測(cè)試過(guò)程中非常重要的一個(gè)環(huán)節(jié),無(wú)論是手工測(cè)試,還是自動(dòng)化測(cè)試,無(wú)論是 GUI 測(cè)試,還是 API 測(cè)試,無(wú)論是功能測(cè)試,還是性能測(cè)試,都避不開(kāi)測(cè)試數(shù)據(jù)準(zhǔn)備的工作。

從創(chuàng)建測(cè)試數(shù)據(jù)的維度來(lái)看,測(cè)試數(shù)據(jù)準(zhǔn)備方法主要可以分為四類:

一、基于 GUI 操作生成測(cè)試數(shù)據(jù)

最原始的創(chuàng)建測(cè)試數(shù)據(jù)的方法,采用 E2E(end 2 end) 的方式來(lái)執(zhí)行業(yè)務(wù)場(chǎng)景,然后生成數(shù)據(jù)的方法。

比如,想要測(cè)試用戶登錄功能,那么首先就要準(zhǔn)備一個(gè)已經(jīng)注冊(cè)的用戶

方法:直接通過(guò) GUI 界面來(lái)注冊(cè)一個(gè)新用戶,然后用這個(gè)新創(chuàng)建的用戶完成用戶登錄功能的測(cè)試。

優(yōu)點(diǎn):簡(jiǎn)單直接,在技術(shù)上沒(méi)有任何復(fù)雜性,而且所創(chuàng)建的數(shù)據(jù)完全來(lái)自于真實(shí)的業(yè)務(wù)流程,可以最大程度保證數(shù)據(jù)的正確性。

缺點(diǎn):
1、創(chuàng)建測(cè)試數(shù)據(jù)的效率非常低

  • 每次執(zhí)行 GUI 業(yè)務(wù)操作都只能創(chuàng)建一條數(shù)據(jù)
  • 基于 GUI 操作的執(zhí)行過(guò)程比較耗時(shí)

2、基于 GUI 的測(cè)試數(shù)據(jù)創(chuàng)建方法不適合封裝成測(cè)試數(shù)據(jù)工具
由于測(cè)試數(shù)據(jù)的創(chuàng)建是通過(guò) GUI 操作實(shí)現(xiàn)的,所以把這種數(shù)據(jù)創(chuàng)建方法封裝成測(cè)試數(shù)據(jù)準(zhǔn)備工具的過(guò)程,其實(shí)就是在開(kāi)發(fā) GUI 自動(dòng)化測(cè)試用例。
無(wú)論是從開(kāi)發(fā)工作量,還是從執(zhí)行效率來(lái)講,把基于 GUI 操作的測(cè)試數(shù)據(jù)創(chuàng)建方法封裝成測(cè)試數(shù)據(jù)準(zhǔn)備工具都不是最佳的選擇。

3、測(cè)試數(shù)據(jù)成功創(chuàng)建的概率不會(huì)太高
測(cè)試數(shù)據(jù)準(zhǔn)備的成功率受限于 GUI 自動(dòng)化執(zhí)行的穩(wěn)定性,而且任何界面的變更都有可能引發(fā)測(cè)試數(shù)據(jù)創(chuàng)建的失敗。

4、會(huì)引入不必要的測(cè)試依賴
比如,被測(cè)對(duì)象是用戶登錄功能,通過(guò) GUI 頁(yè)面操作準(zhǔn)備這個(gè)已經(jīng)注冊(cè)的用戶,就首先要保證用戶注冊(cè)功能沒(méi)有問(wèn)題,而這顯然是不合理的。

應(yīng)用場(chǎng)景:
幫助我們找到創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)的過(guò)程中,后端調(diào)用了哪些 API,以及修改了哪些數(shù)據(jù)庫(kù)的業(yè)務(wù)表,是“通過(guò) API 調(diào)用生成測(cè)試數(shù)據(jù)”,以及“通過(guò)數(shù)據(jù)庫(kù)操作生成測(cè)試數(shù)據(jù)”這兩種方法的基礎(chǔ)。

二、通過(guò) API 調(diào)用生成測(cè)試數(shù)據(jù)

目前主流的測(cè)試數(shù)據(jù)生成方法

其實(shí),當(dāng)我們通過(guò)操作 GUI 界面生成測(cè)試數(shù)據(jù)時(shí),實(shí)際的業(yè)務(wù)操作往往是由后端的 API 調(diào)用完成的。所以,我們完全可以通過(guò)直接調(diào)用后端 API 生成測(cè)試數(shù)據(jù)。

還是以用戶登錄功能的測(cè)試為例,我們通過(guò) GUI 界面注冊(cè)新用戶時(shí),實(shí)際上就是調(diào)用了 createUser 這個(gè) API。
既然知道了具體要調(diào)用哪個(gè) API,那么我們就可以跳過(guò)在 GUI 界面的操作,直接調(diào)用 createUser 生成“已經(jīng)注冊(cè)的用戶”這個(gè)測(cè)試數(shù)據(jù)了。

為了規(guī)避在創(chuàng)建測(cè)試數(shù)據(jù)時(shí)過(guò)于在乎實(shí)現(xiàn)細(xì)節(jié)的問(wèn)題,在實(shí)際工程實(shí)踐中,我們往往會(huì)把調(diào)用 API 生成測(cè)試數(shù)據(jù)的過(guò)程封裝成測(cè)試數(shù)據(jù)準(zhǔn)備函數(shù)。

那么問(wèn)題來(lái)了,怎么才能知道前端新用戶注冊(cè)這個(gè)操作到底調(diào)用了哪些后端 API 呢?推薦三種方式:

  • 直接詢問(wèn)開(kāi)發(fā)人員(最直接)
  • 如果有一定的代碼基礎(chǔ),可以直接閱讀源代碼(作為直接詢問(wèn)方法的補(bǔ)充)
  • 在一個(gè)你可以獨(dú)占的環(huán)境上執(zhí)行 GUI 操作創(chuàng)建測(cè)試數(shù)據(jù),與此同時(shí)監(jiān)控服務(wù)器端的調(diào)用日志,分析這個(gè)過(guò)程到底調(diào)用了哪些 API

優(yōu)點(diǎn):

  • 可以保證創(chuàng)建的測(cè)試數(shù)據(jù)的準(zhǔn)確性(使用了和 GUI 操作同樣的 API 調(diào)用)
  • 測(cè)試數(shù)據(jù)準(zhǔn)備的執(zhí)行效率更高(該方法跳過(guò)了耗時(shí)的 GUI 操作)
  • 把創(chuàng)建測(cè)試數(shù)據(jù)的 API 調(diào)用過(guò)程,封裝成測(cè)試數(shù)據(jù)函數(shù)更方便(這個(gè)調(diào)用過(guò)程的代碼邏輯非常清晰)
  • 測(cè)試數(shù)據(jù)的創(chuàng)建可以完全依賴于 API 調(diào)用
    當(dāng)創(chuàng)建測(cè)試數(shù)據(jù)的內(nèi)部邏輯有變更時(shí),由于此時(shí) API 內(nèi)部的實(shí)現(xiàn)邏輯也會(huì)由開(kāi)發(fā)人員同步更新,所以我們依舊可以通過(guò)調(diào)用 API 來(lái)得到邏輯變更后的測(cè)試數(shù)據(jù),而這個(gè)過(guò)程對(duì)使用來(lái)說(shuō)是完全透明的。

缺點(diǎn):

  • 并不是所有的測(cè)試數(shù)據(jù)創(chuàng)建都有對(duì)應(yīng)的 API 支持。
    也就是說(shuō),并不是所有的數(shù)據(jù)都可以通過(guò) API 調(diào)用的方式創(chuàng)建,有些操作還是必須依賴于數(shù)據(jù)庫(kù)的 CRUD 操作。那么,這時(shí),我們就不得不在測(cè)試數(shù)據(jù)準(zhǔn)備函數(shù)中加入數(shù)據(jù)庫(kù)的 CRUD 操作生成測(cè)試數(shù)據(jù)了。
  • 有時(shí),創(chuàng)建一條業(yè)務(wù)線上的測(cè)試數(shù)據(jù),往往需要按一定的順序依次調(diào)用多個(gè) API,并且會(huì)在多個(gè) API 調(diào)用之間傳遞數(shù)據(jù),這也無(wú)形中增加了測(cè)試數(shù)據(jù)準(zhǔn)備函數(shù)的復(fù)雜性。
  • 雖然相比于 GUI 操作方式,基于 API 調(diào)用的方式在執(zhí)行速度上已經(jīng)得到了大幅提升,并且還可以很方便地實(shí)現(xiàn)并發(fā)執(zhí)行(比如,使用 JMeter 或者 Locust),但是對(duì)于需要批量創(chuàng)建海量數(shù)據(jù)的場(chǎng)景,還是會(huì)力不從心。

三、通過(guò)數(shù)據(jù)庫(kù)操作生成測(cè)試數(shù)據(jù)

目前主流的測(cè)試數(shù)據(jù)生成方法

常見(jiàn)的做法是,將創(chuàng)建數(shù)據(jù)需要用到的 SQL 語(yǔ)句封裝成一個(gè)個(gè)的測(cè)試數(shù)據(jù)準(zhǔn)備函數(shù),當(dāng)我們需要?jiǎng)?chuàng)建數(shù)據(jù)時(shí),直接調(diào)用這些封裝好的函數(shù)即可。

還是以用戶登錄功能測(cè)試為例,當(dāng)我們通過(guò) GUI 界面注冊(cè)新用戶時(shí),實(shí)際上是在后端調(diào)用了 createUser 這個(gè) API,而這個(gè) API 的內(nèi)部實(shí)現(xiàn)邏輯是,將用戶的詳細(xì)信息插入到了 userTable 和 userRoleTable 這兩張業(yè)務(wù)表中。

那么此時(shí),我們就可以直接在 userTable 和 userRoleTable 這兩張業(yè)務(wù)表中插入數(shù)據(jù),然后完成這個(gè)新用戶的注冊(cè)工作。

這樣做的前提是:需要知道前端用戶通過(guò) GUI 操作注冊(cè)新用戶時(shí),到底修改了哪些數(shù)據(jù)庫(kù)的業(yè)務(wù)表
推薦三種方式:

  • 直接向開(kāi)發(fā)人員索要使用到的 SQL 語(yǔ)句;
  • 直接閱讀產(chǎn)品源代碼;
  • 在一個(gè)你可以獨(dú)占的環(huán)境上執(zhí)行 GUI 操作產(chǎn)生測(cè)試數(shù)據(jù),與此同時(shí),監(jiān)控獨(dú)占環(huán)境的數(shù)據(jù)庫(kù)端業(yè)務(wù)表的變化,找到哪些業(yè)務(wù)表發(fā)生了變化。

優(yōu)點(diǎn):
測(cè)試數(shù)據(jù)的生成效率非常高,可以在較短的時(shí)間內(nèi)創(chuàng)建大批量的測(cè)試數(shù)據(jù)。

缺點(diǎn):

  • 很多時(shí)候,一個(gè)前端操作引發(fā)的數(shù)據(jù)創(chuàng)建,往往會(huì)修改很多張表,因此封裝的數(shù)據(jù)準(zhǔn)備函數(shù)的維護(hù)成本要高得多
    數(shù)據(jù)庫(kù),大部分業(yè)務(wù)的數(shù)據(jù)庫(kù)表都是關(guān)聯(lián)的,如果改不好,可能定位問(wèn)題就需要很長(zhǎng)時(shí)間
  • 容易出現(xiàn)數(shù)據(jù)不完整的情況
    比如一個(gè)業(yè)務(wù)操作,實(shí)際上在一張主表和一張附表中插入了記錄,但是基于數(shù)據(jù)庫(kù)操作的數(shù)據(jù)創(chuàng)建可能只在主表中插入了記錄,這種錯(cuò)誤一般都會(huì)比較隱蔽,往往只在一些特定的操作下才會(huì)發(fā)生異常;
  • 當(dāng)業(yè)務(wù)邏輯發(fā)生變化時(shí),即 SQL 語(yǔ)句有變化時(shí),需要維護(hù)和更新已經(jīng)封裝的數(shù)據(jù)準(zhǔn)備函數(shù)。

四、綜合運(yùn)用 API 和數(shù)據(jù)庫(kù)的方式生成測(cè)試數(shù)據(jù)

目前,在實(shí)際的工程實(shí)踐中,很少使用單一的方法生成測(cè)試數(shù)據(jù),基本都是采用 API 和數(shù)據(jù)庫(kù)相結(jié)合的方式。

最典型的應(yīng)用場(chǎng)景是,先通過(guò) API 調(diào)用生成基礎(chǔ)的測(cè)試數(shù)據(jù),然后使用數(shù)據(jù)庫(kù)的 CRUD 操作生成符合特殊測(cè)試需求的數(shù)據(jù)

以創(chuàng)建用戶為例:
假設(shè),我們需要封裝一個(gè)創(chuàng)建用戶的函數(shù),這個(gè)函數(shù)需要對(duì)外暴露“用戶國(guó)家”和“支付方式”這兩個(gè)參數(shù)。由于實(shí)際創(chuàng)建用戶是通過(guò)后臺(tái) createUser API 完成的,但是這個(gè) API 并不支持指定“用戶國(guó)家”和“支付方式”,所以我們就需要自己封裝一個(gè)創(chuàng)建用戶的函數(shù)。

思路:
1、調(diào)用 createUser API 完成基本用戶的創(chuàng)建
2、調(diào)用 paymentMethod API 實(shí)現(xiàn)用戶對(duì)于不同支付方式的綁定
(其中 paymentMethod API 使用的 userID 就是上一步中 createUser API 產(chǎn)生的用戶 ID)
3、通過(guò)數(shù)據(jù)庫(kù)的 SQL 語(yǔ)句更新“用戶國(guó)家”。

注:在這個(gè)例子中,createUser API 和 paymentMethod API 只是為了說(shuō)明如何綜合運(yùn)用 API 的順序調(diào)用

延伸:
目前,我們需要?jiǎng)?chuàng)建的測(cè)試數(shù)據(jù)并不僅僅局限于數(shù)據(jù)庫(kù),很多時(shí)候還需要?jiǎng)?chuàng)建消息隊(duì)列里面的數(shù)據(jù)。

?著作權(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)容

  • 本文章轉(zhuǎn)載于搜狗測(cè)試 首先 什么是測(cè)試數(shù)據(jù)? 測(cè)試數(shù)據(jù)是為手動(dòng)測(cè)試腳本中的變量提供現(xiàn)實(shí)數(shù)據(jù)值的相關(guān)數(shù)據(jù)記錄的集合。...
    夜境閱讀 2,844評(píng)論 0 0
  • 自動(dòng)化測(cè)試如何準(zhǔn)備測(cè)試數(shù)據(jù) 其實(shí)大部分類型的測(cè)試都需要去準(zhǔn)備測(cè)試數(shù)據(jù)。 手工測(cè)試:一些基礎(chǔ)數(shù)據(jù),比如配置數(shù)據(jù)等等是...
    易水寒2018閱讀 678評(píng)論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,689評(píng)論 1 32
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 6,026評(píng)論 0 9
  • 你是要“性”,還是要“命”? 初級(jí)的快樂(lè)是肉體的快樂(lè),那是飽、暖、物、欲。 中級(jí)的快樂(lè)是精神的快樂(lè),那是詩(shī)詞歌賦、...
    靖葶閱讀 458評(píng)論 0 0

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