Robot framework測(cè)試腳本編寫(xiě)思考

基于Robot Framework框架使用經(jīng)驗(yàn),總結(jié)下測(cè)試腳本的設(shè)計(jì)思路。

這里所謂的設(shè)計(jì)思路,其實(shí)就是編寫(xiě)測(cè)試腳本時(shí)應(yīng)該關(guān)注的點(diǎn)。在工作中,我有根據(jù)自己的經(jīng)驗(yàn),整理了針對(duì)實(shí)際工作內(nèi)容的腳本編寫(xiě)規(guī)范,并逐步優(yōu)化腳本編寫(xiě)規(guī)范以及測(cè)試腳本的模板。

個(gè)人以為,在編寫(xiě)測(cè)試腳本時(shí),需要關(guān)注以下幾點(diǎn):規(guī)范性、簡(jiǎn)潔性、時(shí)效性、結(jié)構(gòu)性、穩(wěn)定性、可讀性。

一、規(guī)范性

規(guī)范性有多重要呢?大家都遵循相同的規(guī)范,那么在看別人的腳本時(shí),就容易找得著北。

  • 腳本名稱

    • 腳本命名要求能體現(xiàn)功能名稱,也就是見(jiàn)名知意。如果團(tuán)隊(duì)需要維護(hù)多個(gè)測(cè)試組件的測(cè)試工程集,那么建議腳本命名規(guī)則:組件名稱-功能名稱;
    • 全部使用小寫(xiě)字母;
    • 使用英文描述,描述需簡(jiǎn)潔,禁止使用拼音和特殊字符;
    • 英文單詞之間用"-"符合隔開(kāi)。
  • 用例名稱

    • 名稱格式為:序號(hào)-英文名稱,如"01-Test point";
    • 簡(jiǎn)潔明了,可體現(xiàn)case要測(cè)試什么;
    • 單詞之間可使用英文空格隔開(kāi)或者"-"隔開(kāi);
    • 名稱不使用特殊字符,如@,/等;
    • 英文名稱部分,首字母大寫(xiě),其他均小寫(xiě);
  • 配置文件命名

    • 全部使用小寫(xiě)字母;
    • 使用阿拉伯?dāng)?shù)字+組件名稱以表示用例的序號(hào);
    • 每個(gè)用例對(duì)應(yīng)一個(gè)配置文件,如果一個(gè)用例使用多個(gè)配置文件,則配置文件的命名格式采用劃線后緊跟阿拉數(shù)字再緊跟下劃線最后緊跟阿拉伯?dāng)?shù)字;
  • 變量定義
    在腳本中多次(2次以上)使用的一些值,可定義為變量值,以簡(jiǎn)化腳本編寫(xiě)及后期維護(hù)的工作量。
    Robot Framework是不區(qū)分大小寫(xiě)的,但我們習(xí)慣將全局變量用大寫(xiě),局部(臨時(shí))變量用小寫(xiě);單詞之間用空格隔開(kāi),不要使用特殊字符。

  • 自定義關(guān)鍵字的命名
    腳本語(yǔ)句超過(guò)2句及以上并且在2個(gè)及以上地方被調(diào)用,建議自定義關(guān)鍵字實(shí)現(xiàn)。

    • 名稱一律使用英文,要求簡(jiǎn)潔明了,可體現(xiàn)關(guān)鍵字實(shí)現(xiàn)的功能;
    • 單詞之間使用英文空格隔開(kāi);
    • 名稱不要使用特殊字符,如@,/等;
    • 名稱英文部分首字母為大寫(xiě),其他均小寫(xiě);
    • 功能復(fù)雜,需要Documentation用描述;
    • 關(guān)鍵字要求具有通用性,功能相近盡量使用一個(gè)關(guān)鍵字實(shí)現(xiàn);
  • CaseTags
    case tags用于匹配不同序號(hào)的用例,方便對(duì)每個(gè)測(cè)試用例單獨(dú)測(cè)試。
    標(biāo)簽固定格式為"_case+序號(hào)",序號(hào)對(duì)應(yīng)測(cè)試用例編號(hào)。

  • Suite Documentation
    這是針對(duì)整個(gè)腳本的描述,位于腳本名稱下的Settings下??稍诖颂幪砑庸δ苊Q、需求鏈接、版本號(hào)、研發(fā)人員、測(cè)試人員等信息。
    通常我還會(huì)把該測(cè)試腳本所覆蓋的測(cè)試點(diǎn),按照測(cè)試用例的順序,在此處羅列,讓腳本所覆蓋的測(cè)試點(diǎn)一目了然。

  • Case Documentation
    這是針對(duì)每個(gè)用例的描述,位于每個(gè)用例的Settings下。
    case documentation用于描述測(cè)試用例,包括用例標(biāo)題、配置、步驟和預(yù)期結(jié)果。

  • case獨(dú)立性
    每個(gè)case之間不能有任何的依賴關(guān)系,需要保持各自測(cè)試的獨(dú)立性,各自均可獨(dú)立運(yùn)行。

  • 功能單一性
    盡量保持用例功能的單一性。所謂單一性并非一個(gè)case只能測(cè)試一個(gè)測(cè)試點(diǎn),可包括幾個(gè)有關(guān)聯(lián)并且可連續(xù)的測(cè)試點(diǎn),但不可隨意穿插其他測(cè)試點(diǎn)。

二、簡(jiǎn)潔性

測(cè)試腳本應(yīng)該保持精簡(jiǎn)。精是一種修煉,簡(jiǎn)是一種風(fēng)格。如何保持簡(jiǎn)潔性?最基礎(chǔ)的就是不要冗余。

  • 不要有冗余的變量;
  • 不要有冗余的自定義關(guān)鍵字;
  • 不要有冗余的操作;
  • 不要有冗余的注釋注解;
  • 配置文件中不要有除了配置模板以外的冗余配置;

三、時(shí)效性

腳本時(shí)效性的重要性,大家知道得不徹底。為什么說(shuō)不徹底呢?因?yàn)楣ぷ鬟^(guò)程中有發(fā)現(xiàn)挺多測(cè)試人員有個(gè)錯(cuò)誤的觀念:我一個(gè)suite/case多花一兩秒、幾秒或十幾秒,有什么關(guān)系呢?
有什么關(guān)系呢?整個(gè)測(cè)試工程集有幾千個(gè)case,每個(gè)case要是多花一秒,積少成多就是幾千秒了。按照我們現(xiàn)有的case量,一次回歸就得至少多花兩小時(shí)。
對(duì)一個(gè)初級(jí)的腳本編寫(xiě)者來(lái)說(shuō),關(guān)注腳本時(shí)效性可以考慮以下幾點(diǎn):

  • 謹(jǐn)慎使用sleep;
  • 操作的必要性;
  • 盡量請(qǐng)求小文件;
  • 響應(yīng)時(shí)間
  • 系統(tǒng)時(shí)間
  • 能在suite層一次操作的,不要在case層多次操作;(舉個(gè)例子:我們工作過(guò)程中,使用lighttpd模擬源站。如果腳本中的所有用例都使用同一份lighttpd配置文件啟動(dòng),那么我們一般把lighttpd的啟停放在suite setup/teardown,而不是放在 case setup/teardown中多次啟停。)

更進(jìn)一步來(lái)說(shuō),腳本時(shí)效性和測(cè)試點(diǎn)、測(cè)試用例的組織,脫離不開(kāi)關(guān)系。30個(gè)測(cè)試點(diǎn)組織成10個(gè)case和30個(gè)測(cè)試點(diǎn)組織成8個(gè)case,腳本的運(yùn)行時(shí)效性是不一樣的。時(shí)效性差多少,就和腳本運(yùn)行的每個(gè)操作有關(guān)系了。

清楚地知道每個(gè)常用操作的運(yùn)行耗時(shí),能幫助我們寫(xiě)出時(shí)效性更強(qiáng)的腳本。如何知道每個(gè)操作的運(yùn)行耗時(shí)呢?看腳本運(yùn)行結(jié)束后生成的log.html即可。

四、結(jié)構(gòu)性

清晰的腳本結(jié)構(gòu),包括用例集的初始化和結(jié)束(Suite setup/teardown)、用例的初始化和結(jié)束(Case setup/teardown)。

  • Suite Setup
    執(zhí)行測(cè)試腳本前進(jìn)行環(huán)境初始化操作。如關(guān)閉會(huì)影響本腳本的應(yīng)用程序,釋放端口,源文件拷貝,配置準(zhǔn)備等。
  • Suite Teardown
    執(zhí)行完測(cè)試腳本后恢復(fù)測(cè)試環(huán)境。如關(guān)閉腳本啟用的應(yīng)用程序,刪除suite setup中拷貝的源文件和配置,刪除腳本產(chǎn)生的臨時(shí)文件,系統(tǒng)時(shí)間恢復(fù)等。
  • Setup
    執(zhí)行測(cè)試用例前先關(guān)閉某些程序,清除某些可能會(huì)影響用例正常執(zhí)行的文件。
  • Teardown
    用例執(zhí)行后判斷是否存在core文件。也可以像Case setup一樣關(guān)閉某些應(yīng)用程序和刪除文件。但是操作不能和Case setup重復(fù),避免浪費(fèi)時(shí)間。

五、穩(wěn)定性

穩(wěn)定的腳本可以降低自動(dòng)化維護(hù)成本。
常見(jiàn)的腳本穩(wěn)定性的問(wèn)題有:

  • 程序啟動(dòng)失敗
    程序要監(jiān)聽(tīng)的端口被占用,導(dǎo)致啟動(dòng)失敗。應(yīng)當(dāng)在Suite setup/Case setup中釋放要監(jiān)聽(tīng)的端口。

  • tcpflow抓包失敗

    • 一種是沒(méi)抓到數(shù)據(jù)
      這種失敗是因?yàn)閠cpflow抓包命令后后臺(tái)執(zhí)行,但還沒(méi)執(zhí)行時(shí),請(qǐng)求命令就已經(jīng)結(jié)束,導(dǎo)致抓不到數(shù)據(jù)。
      解決這種問(wèn)題,我一般在tcpflow抓包命令后臺(tái)執(zhí)行后,sleep 0.3s;
    • 另一種是抓到數(shù)據(jù)但讀不到
      這種失敗是抓包數(shù)據(jù)來(lái)不及寫(xiě)入臨時(shí)文件導(dǎo)致從臨時(shí)文件獲取數(shù)據(jù)失敗。
      解決這種問(wèn)題,可以先把tcpflow命令結(jié)束掉(會(huì)被緩沖區(qū)的數(shù)據(jù)寫(xiě)入臨時(shí)文件)再執(zhí)行從臨時(shí)文件獲取數(shù)據(jù)的操作。
  • 內(nèi)部測(cè)試依賴外部資源
    原則上內(nèi)部測(cè)試不用使用外部資源,必須在內(nèi)網(wǎng)搭建環(huán)境。

  • 路徑問(wèn)題
    由于自動(dòng)化平臺(tái)運(yùn)行腳本并不是在腳本的當(dāng)前路徑下執(zhí)行的,所以,腳本中的配置文件都要指定路徑,特別是當(dāng)前路徑的情況下,要加${CURDIR}/,以免自動(dòng)化平臺(tái)運(yùn)行時(shí)找不到指定的配置文件而導(dǎo)致腳本運(yùn)行失敗。

六、可讀性

可讀性好的腳本,可以降低他人學(xué)習(xí)和維護(hù)該腳本的成本。

良好的用例編寫(xiě)習(xí)慣可以讓他人更容易看懂你的測(cè)試用例和測(cè)試腳本。Case Documentation中要有完整清晰準(zhǔn)確的測(cè)試用例。

測(cè)試腳本中,也可以增加適當(dāng)?shù)淖⑨屖鼓_本更易于理解。
注釋有Comment和"#"兩種。前者注釋的內(nèi)容會(huì)體現(xiàn)在報(bào)告中,后者注釋的內(nèi)容不會(huì)顯示在報(bào)告中。建議在腳本中使用Comment進(jìn)行注釋,并用"Comment step-n"把腳本步驟和用例步驟進(jìn)行一一對(duì)應(yīng)。

實(shí)際工作中,建議持續(xù)維護(hù)配置文件模板和測(cè)試腳本模板。模板既是對(duì)工作的優(yōu)化固化,又可以降低腳本編寫(xiě)調(diào)試、學(xué)習(xí)維護(hù)的成本。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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