接口測試的目標方向:
- 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.接口測試需求來源?
我們做接口測試就是為了能更好的把項目管起來,可以實現系統化,而不是為了增加人力。接口文檔是接口測試來源的依據,接口文檔主要包括的內容:
- 接口名稱
- 接口類型
- 輸入參數:參數名、參數類型、業務含義、是否可控、字段長度、單位
- 輸出結果:參數名、參數類型、業務含義、是否可控、單位、返回狀態的取值范圍及業務含義
3.接口測試能發現哪些錯誤?
接口測試經常遇到的bug和問題:
- 傳入參數處理不當,導致程序crash
- 類型溢出,導致數據讀書和寫入不一致
- 因對象權限未進行校驗,可以訪問其他用戶敏感信息
- 狀態處理不當,導致邏輯出現錯亂
- 邏輯校驗不完善,可利用漏洞獲取非正當利益等
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內容里包括用例名稱、是否執行、斷言內容、執行結果、是否通過、參數名稱。
- 用例名稱:清晰明確本條用例驗證點,便於后期維護。
- 是否執行:Y代表執行,N代表忽略。
- 斷言內容:每條用例都有對應的斷言內容,可以准確判斷本條用例執行是否成功。
- 執行結果:執行用例后,手動記錄用例的執行結果。---》修改為自動。
- 是否通過:執行用例后,手動記錄用例執行的通過情況。--->修改為自動。
- 參數名:該接口對應的所有參數名稱。
用例數據一行代表一個用例。一個接口可以分正向用例和逆向用例,把一些常用的接口用例進行設置。(根據自己的實際情況進行編寫)
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