一、Hook引入背景
若接口在測試前后需要進行特殊處理,如執行前的初始化操作、執行完成后的等待操作。類似於 unittest 中的 setUp() 和 tearDown() 方法,HttpRunner中的Hook功能也支持此類操作。
setup_hooks:在HTTP請求發送前執行hook函數,主要用於准備工作;也可實現對請求的request內容進行預處理
teardown_hooks:在HTTP請求發送后執行hook函數,主要用於測試后的清理工作;也可實現對響應的response 進行修改,例如進行加解密等處理
二、實踐案例
案例描述:設置接口請求之后如果響應狀態碼為200,就等待100ms;否則就按照自定義設定的時間進行等待
測試接口:http://httpbin.org/get
請求類型:GET
1.編輯debugtalk.py代碼,創建輔助函數sleep()
debugtalk.py import hashlib import time # 定義獲取sign的方法,傳遞用戶名和密碼參數 def getSign(user,passwd): str = user+passwd # 拼接用戶名+密碼的字符串 md5 = hashlib.md5() # 調用hashlib模塊的md5()方法 md5.update(str.encode(encoding='utf-8')) # 對str進行utf-8格式編碼,然后用md5加密 sign = md5.hexdigest() # md5加密,並以16進制的字符串進行存儲到sign變量 return sign # 根據給定的 [用戶名+密碼] 生成md5加密的摘要信息,並返回sign的結果 print(getSign('admin','123456')) def sleep(response,t): if response.status_code==200: time.sleep(0.1) else: time.sleep(t) # 根據t值,延遲設定的時間
(PS:getSign() 方法為上文所用到的md5加密函數,本文可暫時不調用該函數)
2.創建用例,引用輔助函數
新建用例test_get_request_hook,本次在非200狀態碼時自定義延遲2s響應時間,則在其中設置引用輔助函數 ${sleep($response,2)}
hooks中引用輔助函數:
操作:variables/parameters --> add hooks --> teardown_hooks:填寫引用的輔助函數

對響應狀態碼(status_code)設置斷言:
操作:extract/validate --> add validate --> validate:設置斷言所檢查的響應字段、邏輯關系、字符類型、預期值

執行用例:
200狀態,延遲0.1s響應時間

構造非200響應狀態,如404狀態。修改接口地址為:http://httpbin.org/getaaa
404狀態,延遲2s響應時間