關於 pytest Case 遇到重試的問題
起因
pytest 驅動測試套件 執行內容不詳,但是用例可以定義執行重試次數,一般需要 2-3 次才會執行成功。
來分析這個問題:
1.Ui 自動化來說,多重試會是把測試用例執行總時長拉長的元兇。
2.重試次數更多是用來 python 棧來完成對於介面冪等性問題驗證和應答次數驗證等。
冪等性問題 是多次請求結果一致。
一次性請求,後面多次發的失敗結果一致,並且後端接收一次。
應答次數比如打點次數>3 次,用這個 pytest 外掛化行為觸發 3 次或者大於 3 次都是良選。
所以初步判斷是健壯性不足(檢查點不夠良好和關鍵節點上文驗證條件在下文執行前沒有驗證)
UI 檢查點不夠良好
PS:注意這個問答本身不考慮建設一套完善記錄上下場景關係的回退處理異常和復位 Case 內部變數初始值等,也不會對 pytest 外掛本身進行改造和新增監聽器等條件,所以檢查點設定尤其重要。
從業務角度去改的,可以一步步改造得框架比較完善。
eg1:
登入頁面,賬號密碼驗證都 pass,點選登入,到達二級頁面。
因為網路問題和首次登入請求資料會較多,登入時會出現轉圈圈圖和提示登入中的文字,導致登入有可能會失敗。
這個場景執行次數設定多次 Ok,檢查點應該設定為登入後的場景內容,如果還是設定在登入頁面,會遇到接下來的 case 批次失敗。
那麼設定這個登入後場景內容是否足夠良好?
其實並不良好,因為預設了登入時會出現轉圈圈圖和提示登入中的文字。
透過業務分析,轉圈圈是動圖,提示登入文字是靜態的。
也就是在重式的時候,檢查點需要先判斷是否出現過登入文字。
到達二級目標頁面失敗,首要判斷條件是是否出現過登入文字,然後才判斷是否包含二級頁面的元素是否存在。
寫法上 xxxx_ele =find_element_ByXXX("值") 先判斷物件是否存在,判斷物件可操作屬性。
這樣一旦出現錯誤也可以快速判斷問題出現在哪裡。
eg2:
每個頁面有個重要得標記圖,每次進入頁面這個標記圖不一定是同一張會在固定幾張內切換(假定我們不能設定其他檢查點去繞開它)
如果是圖或者元素,action_click 不是單純用顯式等待,但可以定義檢索頻率。
# Demo程式碼,座標是在需要判斷得case得邏輯程式碼下面,abc是3個物件,都是透過dr.定位器查詢方式找到的。這個while找不到可以繼續找,f定義了一個執行次數,每次找不到f-=1,當f等於0就while自己退出了。
while(a or b or c or f):
if action_click(a):
print(f"操作的是{a}")
break
elif action_click(b):
print(f"操作的是{b}")
break
elif action_click(c):
print(f"操作的是{c}")
break
f-=1
這樣就能知道你目前記錄的是哪張圖,並且用例也具備擴充套件性。
判斷上文條件
上文就是你的操作上文,哪怕每個用例類物件的檔案都解耦了,還是會有源頭部分的。
面對這塊,最簡單是用資料庫(頻繁請求的 nosql 型別,比如 redis,固定存一次 mysql),不想用資料庫用記憶體形式如下:
caseB 上文是 caseA,如果 caseB 和 caseA 在一個檔案的同一個類裡面,在 caseA 邏輯程式碼開始的時候,臨時申請一個 self.上文標記物件=False(不用在類變數裡面先宣告在定義一個 None),在 caseA 關鍵位置,修改 self.上文標記物件 =True,caseB 邏輯程式碼開始得地方判斷這個類變數是 True 還是 False,在對用例進行不計算執行正確失敗計算和 return
caseB 上文是 caseA,如果不在一個檔案內,可以用一個全域性變數 只定義一個,這個全域性變數在 caseA 結尾修改,caseB 開頭時使用。
PS:內建函式 setup 屬於第一種,如果需要多個,就不夠靈活,所有檔案都需要用,就等於每個檔案都要寫。
pytest skip 函式有缺點,往往是一開始就決定了,可以用到對用例內容定義標籤,滿足這個標籤得進行執行。
如果這段看不明白,建議去補下語言結構基礎,不補還堅持寫 就和燒菜燒得不好堅持開餐館一樣,自己為難自己沒意思。
是否在同一個控制代碼內
每次出現開啟新窗體的把窗體控制代碼記錄到一個字典表裡面,在這個控制代碼的操作也記錄在連結串列裡,如果關閉了介面就刪除這個字典的控制代碼號,那麼裡面控制代碼操作資訊的 value 也被刪除了。
元素引用失敗
需要對元素用過 dr.定位器找到後先儲存起來,然後再透過 element.isDisplayed 等等手段來檢查
介面問題
介面需要需要執行多次,後面幾次會成功的。
如果在前提條件充足的情況下,執行介面 case,個人是沒遇到,除非是傳送無效等價類,伺服器對你做了踢掉處理。這個時候需要寫一個處理重鏈的函式。
這個我看看是否拿到問題需求,然後在補充寫。
相關文章
- 關於MQTT 使用遇到問題MQQT
- 關於操作駁回遇到的問題
- 關於 Laravel 遷移遇到的問題Laravel
- 關於工作中遇到的問題
- 面試遇到的redis相關問題面試Redis
- 關於 dnmp 環境下,laravel 試用 swoole 遇到的問題Laravel
- 關於 pytest 外掛 pytest-rerunfailures 和 fixture 的相容性問題AI
- Java 面試題關於方法的重寫Java面試題
- 關於ubuntu安裝中過程遇到問題Ubuntu
- 關於動態表單遇到的一些問題
- 關於PCA降維中遇到的python問題小結PCAPython
- 關於Java中分層中遇到的一些問題Java
- 【求助各位大佬】【急】pytest 動態引數化遇到的問題
- 關於使用雲伺服器遇到的問題記錄(一)伺服器
- 答讀者問:關於隱式 id 重複的問題
- 關於Integer面試的一個問題面試
- 關於Android studio中遇到Library has broken以及mac遇到clean消失問題AndroidMac
- 迴歸測試遇到的問題求助
- 關於時間 PHP 處理包遇到的問題時間序列化差值問題PHP
- 橫趟!面試中遇到的 ZooKeeper 問題面試
- 面試中遇到的一些問題面試
- 關於this指向的問題
- 關於軟體測試的7個核心問題
- 關於 App 啟動時間測試的問題APP
- 關於BGE-M3接入LangChain時遇到的問題與解決方法LangChain
- [Python3] 關於Bytes與String 寫檔案遇到的編碼問題Python
- 關於Room資料庫,拼寫模糊查詢語句遇到的問題OOM資料庫
- Python關於使用subprocess.Popen時遇到的一個小問題記錄Python
- JackJson遇到的問題JSON
- mysql 遇到的問題MySql
- WangEditor遇到的問題
- Homestead 遇到的問題
- sudo 遇到的問題
- linux遇到的問題Linux
- Vagrant 遇到的問題
- 關於 Puerts 的效能問題
- 關於DrawerLayout的小問題
- 關於javascript的this指向問題JavaScript