引數替換的思路
為什麼替換引數:請求引數不一定全部都是寫死的,有可能存在介面之間的資料依賴
- 在Excel中寫入特殊標記(如#key#),說明寫了特殊標記的地方需要做替換處理
- 讀取Excel中的引數,透過正規表示式提取出來需要被替換的key,得到一個list
- 遍歷list,根據list中不同的引數,去不同的地方獲取對應的資料(如指令碼生成的資料、配置檔案來源的資料、預設從管全域性變數獲取資料)
- 獲取到需要替換資料的value,設定為全域性變數(透過類屬性實現)
- 遍歷list,透過字串的replace方法進行資料替換
- 替換完成後,將替換後的資料轉換成python物件
響應結果處理思路
為什麼處理響應結果:介面返回資料型別不一致,我們後續需要去響應結果中提取引數,解決引數依賴問題(使用jsonpath)
- 我們需要的是json資料,對於所有的返回資料我們進行二次封裝,封裝成固定的格式
- 傳入響應資料物件,透過json方式去獲取對應的body內容,如果不是json資料那就說明不是我們需要的型別,就會報錯,符合要求的資料,直接進行二次封裝處理
介面斷言思路
- 在Excel中新增一個欄位expected_data
- expected_data欄位用來存放期望結果(如:
{"code": "200"}
),可以寫多個key:value
鍵值對,期望結果資料是單獨請求結果或者檢視介面文件獲取到的 - 獲取期望結果資料,轉換成dict型別,再遍歷字典的key,然後去介面響應結果中透過key獲取對應的value,組成新的字典,這個新的欄位就是實際結果
- 透過TestCase類的斷言方法對希望結果和實際結果進行比對(直接比對字典)
- 因為字典資料是無序的,只要兩個字典中,key和value這樣的鍵值對是一樣的,則不管位置是否一致,我們都認為兩個字典是相等的
提取全域性變數的思路
- 在Excel中新增欄位extract_data
- 將extract_data欄位中,寫入需要提取的資料(如:{"token": "523452345234"})
- key標識要去響應結果中提取的key,value標是提取key的jsonpath表示式
- 獲取extract_data資料,轉換成dict型別,再遍歷字典的key和value,透過key和value(jsonpath表示式),從響應結果中提取對應key的值
- 提取出來資料後,透過類屬性設定為全域性變數(屬性的key就是剛才遍歷的key,屬性的值為透過jsonpath表示式提取出來的值)
鑑權思路
為什麼鑑權:一些介面需要登入之後才能夠請求(相當於是介面的前置條件)
- 將介面的前置條件放到該介面之前執行,執行後透過提取token的方式設定請求頭完成鑑權
- 提取登入介面響應資料中的token,設定為類屬性(全域性變數)
- 在請求所有介面之前,判斷一下類屬性是否有token屬性,如果有就將token按照要求放入請求頭中
- 後面的介面請求的時候就統一帶上有鑑權資訊的請求頭
傳送請求封裝的思路
- 傳送請求之前去呼叫鑑權處理的方法,獲取最新的請求頭資料
- 在Excel中,新增is_upload欄位,如果該欄位為1,則為檔案上傳介面,否則為普通介面
- 判斷介面是否是檔案上傳介面,如果是就呼叫檔案上傳方法,如果不是就走else邏輯傳送普通請求
- 在請求圖片上傳介面的時候,要對應修改請求欄位Content_Type: multipart/form-data; boundary=----WebKitFormBoundaryOavsXm2eeigLNDtG
- 為了跨平臺,放到jenkins上做持續整合,將需要上傳的圖片放到專案images目錄下(以iages為例,可隨意調整)
- 圖片上傳介面請求完成之後,要將請求頭修改為json格式,否則後續非圖片上傳的介面請求會報錯
資料庫斷言思路
- 把圖片上傳的返回的資料提取出來,設定為全域性變數
- 拿到全域性變數去資料庫查詢(連結資料庫+拼接sql語句)
- 在Excel中新增assert_db欄位存放資料庫斷言的期望結果和實際結果獲取需要執行的sql語句
- 先判斷是否需要替換sql的資料,如果要替換,先替換sql語句再執行sql語句,接著斷言
- sql語句從哈訊的資料返回是元組,如果是設定了返回值為字典資料,需要取值出來
sql語句替換的思路
- 獲取sql語句
- 透過正規表示式判斷是否有資料需要替換(有無特殊標記),返回list
- 檢查list是否有值,有值說明需要替換sql
- 替換sql語句都是從全域性變數中獲取的
- 連線資料庫
- 替換sql語句
- 執行sql語句
未註冊的手機號生成處理思路(註冊)
- 透過faker生成一個隨機手機號
- 去資料庫去校驗是否已註冊,已註冊了就重新走第1步和第2步
- 如果未重複,直接返回未註冊的手機號
url地址中引數替換的處理
- 在發請求之前把url地址中的引數替換好就行
- url地址中引數的來源,介面響應的結果,提取到全域性變數了
- 透過re表示式獲取需要替換的key_list
- 遍歷key_list,從全域性變數中獲取對應的資料對url地址進行替換
日誌收集
- 日誌要還原使用者的行為(還原測試用例執行的全過程)
- 需要輸出日誌的地方:方法的入參、出引數據型別、資料轉換(jsonstr 轉 python物件)
- 需要輸出日誌的地方:測試過程的邏輯選擇
為什麼要做資料隔離,資料隔離怎麼處理
需求:資料驅動,每個sheet都是一個場景,或者是一個介面,場景和介面之間為了不影響執行結果,儘量要做到資料隔離.
如何做資料隔離:
- 每次執行sheet裡面的測試用例的時候,都清掉全域性屬性中所有自己設定的屬性
具體步驟: - 讀取測試用例資料(所有的sheet,迴圈讀取,迴圈執行用例)