> 本文節(jié)選自霍格沃茲測(cè)試學(xué)院內(nèi)部教材
斷言是 UI 自動(dòng)化測(cè)試的三要素之一,是 UI
自動(dòng)化不可或缺的部分砂缩。我們使用定位器定位到元素后泵额,通過(guò)腳本進(jìn)行業(yè)務(wù)操作的交互迫悠,想要驗(yàn)證交互過(guò)程中的正確性就需要用到斷言。
常規(guī)的UI自動(dòng)化斷言??
分析正確的輸出結(jié)果于购,常規(guī)的斷言一般包含以下的幾個(gè)情形:
? * 比較大小
? * 包含或者不包含
? * 驗(yàn)證布爾值
示例代碼:
? *? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*?
? ? #比較大小price = driver.find_element(? ? By.XPATH,'//*[contains(@resource-id="current_price")]').textassert float(price) >=170??
? ? #包含驗(yàn)證name = driver.find_element(? ? By.XPATH,'//*[contains(@resource-id="stockName")]').textassert "BABA" in name??
? ? #布爾值驗(yàn)證def check():? name = driver.find_elements(By.XPATH,'//*[contains(@resource-id="stockName")]')? ? if len(name)!=0:? ? ? ? return True? ? else:? ? ? ? return Falseassert check()
上面的示例可以看出袍睡,Python 的 assert 是用來(lái)判斷一個(gè)條件是否為真,如果它為真价涝,就繼續(xù)執(zhí)行女蜈,如果為假,則拋出 AssertError
并且包含錯(cuò)誤信息色瘩。斷言可以在條件不滿(mǎn)足程序運(yùn)行的情況下直接返回錯(cuò)誤。
Hamcrest斷言??
###??
###??
Hamcrest
是一個(gè)以測(cè)試為目的逸寓,能組合成靈活表達(dá)式的匹配器類(lèi)庫(kù)居兆,用于編寫(xiě)斷言的框架,使用這個(gè)框架編寫(xiě)斷言竹伸,可以提高可讀性以及開(kāi)發(fā)測(cè)試的效率泥栖。Hamcrest
提供了大量被稱(chēng)為“匹配器”的方法。每個(gè)匹配器都設(shè)計(jì)用于執(zhí)行特定的比較操作勋篓。Hamcrest 的可擴(kuò)展性強(qiáng)吧享,允許你創(chuàng)建自定義的匹配器,并支持多種語(yǔ)言譬嚣。
Hamcrest使用方法??
###??
###??
?**安裝**??
? *?
? ? ?pip install pyhamcrest
?**導(dǎo)入**
? *?
? ? ?from hamcrest import *
Hamcrest 提供了一個(gè)全新的斷言語(yǔ)法(assert_that)钢颂,可以只使用 assert_that 一個(gè)斷言語(yǔ)句,結(jié)合 Hamcrest
提供的匹配符拜银,就可以完成各種斷言場(chǎng)景殊鞭。
?**常用方法 API**
?**??
**
1.比較兩個(gè)字符串可以使用“equal_to”方法,示例代碼如下:
? *?
? ? ?assert_that("this is a string",equal_to("this is a string"))
2.數(shù)值匹配尼桶,比較兩個(gè)值是否接近操灿,可以使用“close_to”方法,用法:
`??
`
? *?
? ? assert_that(8,close_to(10,2))
解釋?zhuān)簲嘌?8 接近于 (8 ~ 12)這個(gè)范圍泵督。
3.包含某個(gè)字符趾盐,使用“contains_string”方法,示例代碼如下:
? *?
? ? assert_that('abc',contains_string('d'))
案例??
使用“雪球”應(yīng)用小腊,打開(kāi)雪球
APP救鲤,點(diǎn)擊頁(yè)面上的搜索輸入框輸入“alibaba”,然后在搜索聯(lián)想出來(lái)的列表里面點(diǎn)擊“阿里巴巴”溢豆,選擇股票分類(lèi)蜒简,獲取股票類(lèi)型為“09988”的股票價(jià)格,最后驗(yàn)證價(jià)格在預(yù)期價(jià)格的
10% 范圍浮動(dòng)漩仙。示例代碼片段如下:
? *? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*?
? ? from hamcrest import assert_that, close_to??
? ? def test_wait(self):? ? # 點(diǎn)擊搜索輸入框? ? self.driver.find_element_by_id(? ? ? ? "com.xueqiu.android:id/tv_search").click()? ? # 輸入 “alibaba”? ? self.driver.find_element_by_id(? ? ? ? "com.xueqiu.android:id/search_input_text"? ? ? ? ).send_keys("alibaba")? ? # 點(diǎn)擊“阿里巴巴”? ? self.driver.find_element_by_xpath("http://*[@text='阿里巴巴']").click()? ? # 點(diǎn)擊“股票”? ? self.driver.find_element_by_xpath(? ? ? ? "http://*[contains(@resource-id,'title_container')]//*[@text='股票']"? ? ? ? ).click()? ? # 獲取股票價(jià)格? ? locator = (MobileBy.XPATH,? ? "http://*[@text='09988']/../../..\? ? //*[@resource-id='com.xueqiu.android:id/current_price'")??
? ? ? ? ele = WebDriverWait(self.driver,10)\? ? .until(expected_conditions.element_to_be_clickable(locator))??
? ? ? ? print(ele.text)? ? current_price = float(ele.text)? ? expect_price = 170??
? ? ? ? # 使用 hamcrest 斷言來(lái)判斷股票價(jià)格浮動(dòng)在 10% 范圍內(nèi)? ? assert_that(current_price,? ? close_to(expect_price, expect_price*0.1))
上面的示例中搓茬,assert_that 是用于生成測(cè)試斷言的樣式化語(yǔ)句犹赖,比較兩個(gè)值(current_price 與
expect_price)是否接近,斷定實(shí)際值 current_price 在`expect_price-expect_price*0.1`
與`expect_price+expect_price*0.1` 范圍區(qū)間浮動(dòng)卷仑。
作為UI自動(dòng)化測(cè)試三要素之一的斷言峻村,大家學(xué)會(huì)了么?下一篇我們來(lái)分享參數(shù)化用例锡凝,有興趣的小伙伴可以關(guān)注一下哦粘昨!
?** _?
來(lái)霍格沃茲測(cè)試開(kāi)發(fā)學(xué)社,學(xué)習(xí)更多軟件測(cè)試與測(cè)試開(kāi)發(fā)的進(jìn)階技術(shù)窜锯,知識(shí)點(diǎn)涵蓋web自動(dòng)化測(cè)試 app自動(dòng)化測(cè)試张肾、接口自動(dòng)化測(cè)試、測(cè)試框架锚扎、性能測(cè)試吞瞪、安全測(cè)試、持續(xù)集成/持續(xù)交付/DevOps驾孔,測(cè)試左移芍秆、測(cè)試右移、精準(zhǔn)測(cè)試翠勉、測(cè)試平臺(tái)開(kāi)發(fā)妖啥、測(cè)試管理等內(nèi)容,課程技術(shù)涵蓋bash对碌、pytest荆虱、junit、selenium俭缓、appium克伊、postman、requests华坦、httprunner愿吹、jmeter、jenkins惜姐、docker犁跪、k8s、elk歹袁、sonarqube坷衍、jacoco、jvm-sandbox等相關(guān)技術(shù)条舔,全面提升測(cè)試開(kāi)發(fā)工程師的技術(shù)實(shí)力
QQ交流群:484590337
公眾號(hào) TestingStudio
視頻資料領(lǐng)确愣:https://qrcode.testing-studio.com/f?from=jianshu&url=https://ceshiren.com/t/topic/15844