測試同窗都應該知道的斷言知識...


👆對私有云感興趣能夠進入公衆號回覆「私有云」哦。python


前言


在編寫代碼的時候,咱們常常會作出一些假設,斷言的做用就是在代碼中捕捉這些假設微信

使用斷言的好處有不少,最明顯的幾點是:app

  • 能夠暴露調用者的錯誤編輯器

  • 便於調試單元測試

  • 對代碼沒有代價測試

而且斷言在單元測試代碼中很是重要,所以咱們很是建議在腳本里使用斷言語句,來斷定被測應用當前的狀態是不是咱們預期中的狀態flex

下文將詳細講解在Airtest和Airtest-selenium中提供的斷言接口。ui


Airtest的斷言語句


1. 驗證UI界面

Airtest給咱們提供了assert_existsassert_not_exists兩個接口,來斷言一張圖片存在或不存在於當前畫面中。url

這倆個接口都支持AndroidiOSWindows平臺,它們的參數以下:spa

  • v – 要檢查的目標

  • msg – 斷言的簡短描述,它將被記錄在報告中

好比,咱們以當前設備屏幕上存在天氣應用的icon,來判斷當前設備上存在天氣應用的app爲例,就能夠寫出以下的斷言:

assert_exists(Template(r"tpl1578970400453.png", record_pos=(-0.345, 0.142), resolution=(1080, 1920)), "存在天氣應用")

此刻的參數v是一張天氣應用的icon,填寫的msg也會在對應的斷言步驟上顯示出來。須要注意的是,目前只有airtest版本爲1.1.1時才支持顯示斷言信息,1.2.2版本的IDE內嵌的airtest版本並非1.1.1,因此暫不支持顯示斷言信息。

(該報告用命令行生成,本地airtest版本爲1.1.1)

2. 驗證數值

同時,airtest還提供了assert_equalassert_not_equal兩個接口,來斷言傳入的兩個值相等或者不相等。

跟上述的倆個接口同樣,這倆個接口也支持AndroidiOSWindows平臺。它們的參數以下:

  • first – 第一個值

  • second – 第二個值

  • msg – 斷言的簡短描述,它將被記錄在報告中

大多數狀況下,這倆個接口用於判斷控件的某個屬性值與預期值是否相等,例如:

# assert_equal("實際值", "預測值", "請填寫測試點.")

# 獲取控件的「text」屬性值
value = poco("com.miui.calculator:id/btn_8_s").attr("text")
assert_equal(value, "8", "按鈕值爲8")

如示例代碼所示,這裏經過poco獲取了一個控件的「text」屬性值,而後再經過斷言來判斷這個屬性值是否爲「8」。填寫的msg依舊會顯示在報告的斷言信息上。


Airtest-selenium的斷言語句


1. 斷言圖片存在於當前頁面

Airtest-Selenium給咱們提供了assert_template()接口,用於斷言目標存在於當前頁面中,它包含如下參數:

  • v - 一個圖片對象

  • msg - 斷言的簡短描述,它將被記錄在報告中

# 斷言當前頁面存在百度logo這張圖片
driver.assert_template(Template(r"tpl1578993813194.png", record_pos=(12.32, 3.915), resolution=(100, 100)), "成功打開百度網頁")

2. 斷言元素存在

assert_exist()接口用來斷言頁面存在某個元素,它的參數與其它斷言相比比較特殊:

  • param - 方法的參數

  • operation - 查找元素的方法

  • msg - 斷言的簡短描述,它將被記錄在報告中

# 斷言當前頁面存在「百度新聞」的頁面元素
driver.assert_exist("//a[@href='http://news.baidu.com']", "xpath", "存在百度新聞元素")

示例代碼中的參數"xpath"表明用"xpath"這個方法來查找頁面元素,該元素的"xpath"屬性值爲"//a[@href='http://news.baidu.com']"同理,還能夠用"id""name"等方法來查找元素。


斷言相關的知識


1. 處理斷言失敗

不管是airtest提供的斷言接口,仍是Airtest-selenium提供的斷言接口,若是斷言失敗,都會引起AssertionError,從而致使腳本執行終止;若是不想腳本由於一個斷言失敗就終止,能夠將斷言用try語句包起來

value = poco("com.miui.calculator:id/btn_8_s").attr("text")

try:
assert_equal(value, "8", "按鈕值爲8")
except AssertionError:
print("按鈕值斷言失敗")

poco("com.miui.calculator:id/btn_9_s").click()

這樣即便斷言失敗,後面的poco點擊語句仍是會正常執行:

不然斷言失敗時,腳本會直接報錯,終止運行:

2. assert_exists接口的超時時間和闕值

assert_existsassert_not_exists這兩個接口是用來驗證某個圖片是否存在於當前設備屏幕上,在查找圖片時,它們會有一個超時時間和闕值:

從源碼中能夠得知,這倆接口查找圖片的超時時間和闕值都是全局變量,timeout爲20s,threasold爲0.7,因此腳本只有在20s內找到置信度>0.7的結果,斷言纔會成功。

若是想要修改這倆個接口查找圖片的超時時間和闕值,把對應倆個全局變量的值修改便可。

往期精彩回顧
學會一招,輕輕鬆鬆提升遍歷pocoUI樹的效率
「多機協做」--微信互加好友案例分析
如何用python模擬鼠標和鍵盤的操做


本文分享自微信公衆號 - AirtestProject(AirtestProject)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索