接口測試自動化之Robot Framework


接口測試的目標方向:

  • 1、執行完以后,case都是一個結果,每個用例數據代表一個用例,返回的結果不同。
  • 2、斷言結果的確定,正向+逆向的一個斷言,看一下開發的代碼,接口的一個思路,初步判斷斷言結果
  • 3、登錄的接口,獲取token,作為一個全局變量進行傳遞。
  • 4、連數據庫【比如達夢】,database暫時不支持達夢
  • 5、生成自動化報告,不要手動去填寫
  • 6、針對過程的一個呈現,接口自動化報告針對的是結果的一個呈現。
  • 7、統計人員的趨勢圖,結果呈現
  • 8、RF+JENKINS集成
  • 9、接口流程測試[接口依賴]

1.接口測試疑問?

  接口測試其實基本知識已經學習了很久,但是只限於對基礎的學習,以前總覺得一涉及到代碼編寫,定制開發就是遙不可及的目標,總不願意多踏出去一步,其實在部門同事的升級替代下,有了更進一步的深入了解,發現寫代碼也是一項很愉快的事情,只要你多進一步,就會發現自己是可以去做的。

  今年初給自己的目標是必須完成對代碼編寫的恐懼,已經掌握了大量的理論知識,只差一步的實踐必須進行實踐。自己的想法首先是在博客園了解測試圈大神們的博客,了解了接口測試可以通過哪些方式進行實現。比如主流的接口測試框架:RobotFramework、Jmeter、BDD、HttpRunner、gauge、Unittest+Request+HTMLRunner【推薦】。

  具體的可以參考蟲師的博文:https://www.cnblogs.com/fnng/p/9919803.html

2.接口測試需求來源?

我們做接口測試就是為了能更好的把項目管起來,可以實現系統化,而不是為了增加人力。接口文檔是接口測試來源的依據,接口文檔主要包括的內容:

  1. 接口名稱
  2. 接口類型
  3. 輸入參數:參數名、參數類型、業務含義、是否可控、字段長度、單位
  4. 輸出結果:參數名、參數類型、業務含義、是否可控、單位、返回狀態的取值范圍及業務含義

3.接口測試能發現哪些錯誤?

接口測試經常遇到的bug和問題:

  1. 傳入參數處理不當,導致程序crash
  2. 類型溢出,導致數據讀書和寫入不一致
  3. 因對象權限未進行校驗,可以訪問其他用戶敏感信息
  4. 狀態處理不當,導致邏輯出現錯亂
  5. 邏輯校驗不完善,可利用漏洞獲取非正當利益等

4.接口測試框架RobotFramework自定義設計

首先需要認識RF的一些基本語法,我們常用的代碼都是有限的,所以我們需要先清楚代碼的本身意思。

4.1第一步基本技能:RF的基本概念與用法

  • 變量和常量的使用:${var}(單值變量)、@{listvar}(多值變量)、%(環境變量)、字符串連接、字符串截取等。
  • Keyword關鍵字的創建和使用:主要包括setting內的arguments、return value、具體內容的編寫【涉及到邏輯編寫】。
  • 循環和分支:循環有3種模式,分支可以通過關鍵字run keyword進行實現。
  • RF內代碼框架
  • 標准庫Builtin中提供了最基本的關鍵字來實現打印、screenshot庫提供了截圖關鍵字、Datatime庫提供了關於時間庫的關鍵字。各種庫的提供使我們在操作的時候需要對特定的庫有個初步了解,能為我們做什么提供關鍵字支撐。比如接口庫:robotframework-requests(RequestsLibrary)
1.測試用例編寫案例
*** Settings ***        //用於引用庫、資源
Library           DatabaseLibrary
Library           RequestsLibrary
Resource          公共資源.robot
Library           ExcelLibrary
Library           Collections

*** Test Cases ***   //用於編寫測試用例
新增資源樹節點           //用於編寫測試用例名稱
    log    robot framework   //關鍵字、字符串之間間距為四個空格、前面為4個空格
Output: C:\Users\output.xml   //XML格式記錄測試結果
Log: C:\Users\log.html        //測試日志,記錄每一步的執行情況
Report: C:\Users\...\AppData\Local\Temp\report.html    //偏向測試報告,總體展示測試用例的執行情況
keyword關鍵字:
settiong 部分:參數arguments 是形參,在調用該關鍵字的時候可以傳入對應的實際參數;
return value值是關鍵字返回的值,調用關鍵字時可以使用變量來調用該返回值;

2.循環有3種模式: :FOR 循環變量 IN RANGE end; :FOR 循環變量 IN RANGE start end [step]; :FOR 循環變量 IN a[b,c,d.....] eg: :FOR ${i} IN RANGE 10; :FOR ${i} IN RANGE 1 10 2; :FOR ${i} IN 1,2,3,4,5 退出循環: EXIT FOR LOOP 3.分支:分支主要是通過關鍵字實現 run keyword if...ELSE(ELSE是另外必須大寫,RF不區分大小寫) RUN KEYWORD if 條件1 do action1 ...  ELSE IF 條件2 do action2 ...  ELSE IF 條件x do actionx ...  ELSE do action N
#字符串截取
${val2[2]}      //截取變量的第三個字符
${val2[0:3]}   //截取變量的第一個到第三個字符
@{val}[0] //截取列表中的第一個值
#變量運算用Evaluate ${val2} Evaluate ${val1}+1 #list變量,獲取值有2種方式:@{變量名}[index] 、${變量名[index]} #一維list @{list} create list a b c log @{list}[1] log ${list[1]} #二維list @{listA} create list 1 2 @{listB} create list 3 4 @{listC} create list ${listA} ${listB} 5 log @{listC[1]}[1] log ${list[1][1]}

4.2 第二步整體架構:RF接口自動化測試框架

RF接口自動化測試的核心就是關鍵字開發。在做接口自動化測試的時候,最重要的是數據與業務分離,實現測試腳本參數化,提高測試腳本的可重用性。

 

 

4.3 第三步編碼實現:RF接口自動化測試實例

  在開始編寫代碼時,基本的接口測試腳本開發思想已經實現。數據與腳本分離,我們如何獲取數據?如何進行用例編寫?可以進行拆分一一進行編寫。

  在進行RF接口自動化測試的時候,我們會把集中開始編寫的用例先統一進行編寫。比如測試數據准備的數據獲取。一個接口有很多測試用例,如何進行單個用例執行?如果進行單接口的測試用例執行?如何連接數據庫?這些都是在編寫邏輯時所有接口都可以用到的,所以我們可以單獨提取出來作為公共資源進行關鍵字自定義編寫。

數據准備:

  Excel用例數據里,一個sheet對應一個接口,sheet內容里包括用例名稱、是否執行、斷言內容、執行結果、是否通過、參數名稱。

  1. 用例名稱:清晰明確本條用例驗證點,便於后期維護。
  2. 是否執行:Y代表執行,N代表忽略。
  3. 斷言內容:每條用例都有對應的斷言內容,可以准確判斷本條用例執行是否成功。
  4. 執行結果:執行用例后,手動記錄用例的執行結果。---》修改為自動。
  5. 是否通過:執行用例后,手動記錄用例執行的通過情況。--->修改為自動。
  6. 參數名:該接口對應的所有參數名稱。

  用例數據一行代表一個用例。一個接口可以分正向用例和逆向用例,把一些常用的接口用例進行設置。(根據自己的實際情況進行編寫)

Excel中的數據准備: 

  需求數據:本次測試的是分頁查詢的功能,不需要進行參數編寫

  查詢用例編寫分2個方向進行編寫:一個是正向流程,一個是逆向流程。

  查詢結果:就是驗證查詢結果是否能返回正確的數據。

 數據准備腳本編寫:

  • 數據准確我們最重要的如何從excel中拿到數據?
  • 如何獲取到表頭標題(用例名稱、是否執行、斷言內容、執行結果、是否通過)和入參標題(就是參數名稱)?
  • 如何獲取到表頭標題對對應的值和入參標題對應的值?

  RF針對Excel有個庫ExcelLibrary庫,通過操作數據文件實現數據與腳本的分離,引入ExcelLibary庫,操作Excel文件。可以通過2個腳本實現獲取表頭標題和入參標題、表頭標題對應的值和入參標題對應的值。

 excellibrary安裝:pip install robotframework-excellibrary
Excellibrary庫常用關鍵字:
  • Open Excel 打開Excel文件
  • Get Row Count 獲取行數
  • Get Column Count 獲取列數
  • Get Column Values 獲取某一列的值
  • Get row Values 獲取某一行的值
  • Read Cell Data By Coordinates 通過列行編號獲取值
  • Read Cell Data By Name 按名稱讀取單元格數據
Excellibrary使用注意事項:
  excel文件的后綴為.xls結尾

獲取表頭標題
 (用例名稱、是否執行、斷言內容、執行結果、是否通過)和入參標題(就是參數名稱):
腳本最終實現的目的:
  @{confParaName}列表用於保存前5個固定的標題,包括用例名稱,是否執行,斷言內容,執行結果,是否通過。
  @{confDataName}列表用於保存接口的入參名。
 
#獲取表頭標題(用例名稱、是否執行、斷言內容、執行結果、是否通過)和入參標題(就是參數名稱):
*** Settings *** Library ExcelLibrary Library RequestsLibrary Library Collections Library requests Library DatabaseLibrary Library String *** Variables *** ${host} http://10.100.xx.xxxx:18292

#打開excel文件 open excel E:\\test.xls #通過行列坐標獲取xcel內的值,比如這里的取值是第一行第二列的值. ${uri} Read Cell Data By Coordinates test 1 0 set global variable ${uri} #獲取行數統計,比如有多少行. ${rowCount} Get Row Count test #獲取列數統計,比如有多少列. ${columnCount} Get Column Count test set global variable ${rowCount} set global variable ${columnCount} @{confParaName} create list @{confDataName} create list set global variable @{confParaName} set global variable @{confDataName} : FOR ${colun} IN RANGE 5 ${TEMP1} Read Cell Data By Coordinates test ${colun} 1 Append to list ${confParaName} ${TEMP1} : FOR ${colun} IN RANGE 5 ${columnCount} ${TEMP2} Read Cell Data By Coordinates test ${colun} 1 Append to list ${confDataName} ${TEMP2}log

結果顯示:

獲取表頭標題對應的值和入參標題對應的值:

 

腳本最終實現的目的:
  &{ConfParaDict} 列表用於保存標題下對應的數據。
  &{ConfDataDict}列表用於保存接口的入參名下對應的數據。
 //通過字典的方式用於存儲實際數據  
    &{ConfParaDict}    Create Dictionary
    &{ConfDataDict}    Create Dictionary
    @{ConfPara}    Create List
    @{ConfData}    Create List
    Set Global Variable    &{ConfParaDict}
    Set Global Variable    &{ConfDataDict}
    Set Global Variable    @{ConfPara}
    Set Global Variable    @{ConfData}
    : FOR    ${colun}    IN RANGE    5
    \    ${TEMP3}    Read Cell Data By Coordinates    test    ${colun}    2
    \    Append to list    ${ConfPara}    ${TEMP3}
    \    set to Dictionary    ${ConfParaDict}    @{confParaName}[${colun}]    ${TEMP3}
    log    ${ConfPara}
    log    ${ConfParaDict}
    : FOR    ${colun}    IN RANGE    5    ${columnCount}
    \    ${col}    Evaluate    ${colun}-5
    \    ${TEMP4}    Read Cell Data By Coordinates    test    ${colun}    2
    \    Append to list    ${ConfData}    ${TEMP4}
    \    set to Dictionary    ${confDataDict}    ${confDataName[${col}]}    ${TEMP4}
    log    ${ConfData}
    log    ${confDataDict}

 

 

 實現層和斷言層:

 

 

 

接口冒煙測試方法

https://www.ituring.com.cn/article/273457

https://www.jianshu.com/p/c3a9d20db4e5

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM