AI 測試也瘋狂揽涮?一文講解 Applitools

前言

激動(dòng)人心的 AI 測試系列終于來了,聽過那么多國外有名的 AI 測試工具阴幌,那么你有沒有真的去實(shí)踐學(xué)習(xí)一下呢勺阐?

此號(hào)的初衷就是為了探索 AI 賦能測試,這也同樣是讓我繼續(xù)做測試相關(guān)工作的理由矛双。不過為了避免走彎路浪費(fèi)時(shí)間渊抽,同時(shí)也是抱著學(xué)習(xí)的目的,接下來我會(huì)帶領(lǐng)大家一起體驗(yàn)所有已經(jīng)比較著名的议忽、現(xiàn)成的 AI 測試工具腰吟,做出總結(jié),最后打造出屬于我們的 AI 測試。希望大家多多支持毛雇。

相信最后所有機(jī)械的測試任務(wù)都能夠被 AI 所完全取代嫉称,這也是 AI 的魅力所在。

正文

什么是 Applitools

簡單來說灵疮,Applitools 是一個(gè) AI 賦能的測試工具织阅,通過視覺 AI 進(jìn)行智能功能和視覺測試,幫助企業(yè)以更低的成本更快地發(fā)布項(xiàng)目震捣。

閑話不多說荔棉,我們進(jìn)入實(shí)踐環(huán)節(jié)。

最佳實(shí)踐

進(jìn)入官網(wǎng)后蒿赢,眼前一亮后我們點(diǎn)擊頁面右上角的 GET STARTED 按鈕润樱。

![004.png](https://upload-images.jianshu.io/upload_images/18344821-3136de716ba32acd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

然后使用 GITHUB 賬號(hào)授權(quán)后來到了這個(gè)頁面。

![003.png](https://upload-images.jianshu.io/upload_images/18344821-3293588676431742.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

這個(gè)時(shí)候我們需要點(diǎn)擊右上角頭像中的 My API key 獲取 Api 秘鑰羡棵。

保存好秘鑰后新建個(gè)項(xiàng)目壹若,安裝依賴包:

pip install selenium
pip install eyes-selenium

然后我們需要新建一個(gè) python 文件并寫入以下代碼:

from selenium import webdriver
from applitools.selenium import Eyes, Target


class HelloWorld:

    eyes = Eyes()

    # 這里填寫你保存的秘鑰
    eyes.api_key = 'xxxx'

    try:

        # Open a Chrome browser.
        driver = webdriver.Chrome()

        # Start the test and set the browser's viewport size to 800x600.
        eyes.open(driver, "Test app", "First test", {'width': 800, 'height': 600})

        # Navigate the browser to the "hello world!" web-site.
        driver.get('https://demo.applitools.com')

        # Visual checkpoint #1.
        eyes.check("Login Window test", Target.window())

        # End the test.
        results = eyes.close(False)

        print(results)

    finally:

        # Close the browser.
        driver.quit()

        # If the test was aborted before eyes.close was called, ends the test as aborted.
        eyes.abort()

運(yùn)行代碼成功后可以看到如下輸出:

New test [TestResults(steps=1, matches=0, mismatches=0, missing=0, url='https://eyes.applitools.com/app/batches/xxxxxxxxxxxxxx/xxxxxxxxxxxxxxx?accountId=xxxxxxxxxxxxxxxxx~~')]

Process finished with exit code 0

這時(shí)候回到之前的 Web 頁面即可看到測試結(jié)果。

004.png

嗯皂冰,很神奇(才沒有)店展,至此我們完成了一個(gè)小的 Demo ,下面將揭露 Applitools 智能在何處秃流。

Baseline

在 applitools 中有個(gè)特殊的概念赂蕴,叫做 Baseline。什么是 Baseline 呢舶胀?其實(shí)很簡單概说,我們可以把他當(dāng)作是一條 UI 測試流程的基準(zhǔn)線。打個(gè)比方嚣伐,一段 UI 主流程的測試代碼中對應(yīng)了三個(gè)不同的頁面:登錄頁面糖赔、錯(cuò)誤密碼登錄后的提示頁面,正確密碼登錄成功后跳轉(zhuǎn)的頁面纤控。那么我們就可以把這個(gè)流程當(dāng)作基準(zhǔn)線挂捻,分別在三個(gè)不同的頁面中添加 Checkpoint(驗(yàn)證點(diǎn))碉纺,當(dāng)設(shè)定好 Baseline 之后船万,下一次的測試執(zhí)行將會(huì)對比當(dāng)前測試流程與 Baseline 之間 Checkpoint 中圖像的差異,并做出通過或者失敗的斷言骨田。

最佳實(shí)踐

我們按照慣例拿百度首頁做試驗(yàn):

from selenium import webdriver
from applitools.selenium import Eyes, Target


class HelloWorld:

    eyes = Eyes()

    # 這里填寫你保存的秘鑰
    eyes.api_key = 'XXX'

    try:

        # Open a Chrome browser.
        driver = webdriver.Chrome()

        # Start the test and set the browser's viewport size to 800x600.
        eyes.open(driver, "Test", "Baidu", {'width': 800, 'height': 600})

        # 訪問百度首頁
        driver.get('https://www.baidu.com')

        # Visual checkpoint #1.
        eyes.check("Baidu Homepage Test", Target.window())

        # End the test.
        results = eyes.close(False)

        print(results)

    finally:

        # Close the browser.
        driver.quit()

        # If the test was aborted before eyes.close was called, ends the test as aborted.
        eyes.abort()

代碼運(yùn)行完畢后返回 applitools 的 Web 頁面耿导,可以看到已經(jīng)新增了一條 Baseline:

001.png

這時(shí)候我們可以檢驗(yàn)一下 Baseline 中的 Checkpoint 是否生效,再次運(yùn)行相同代碼后返回 Web 頁面:

![003.png](https://upload-images.jianshu.io/upload_images/18344821-232b2ce0e4fe7a5e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

咦态贤,這是怎么回事舱呻,怎么沒有 PASS?于是我們點(diǎn)進(jìn)去一看:

003.png

哈哈,原來這張 checkpoint 中識(shí)別出了百度搜索框中的光標(biāo)箱吕,而 Baseline 中沒有......

那么這種問題要怎么解決呢芥驳?

如何解決判斷圖像差異帶來的后遺癥?

當(dāng) applitools 使用 AI 技術(shù)幫助我們對比當(dāng)前測試與 Baseline 之間 checkpoint 的圖像差異時(shí)茬高,如果發(fā)現(xiàn)了有不同之處兆旬,將會(huì)把當(dāng)前測試打上一個(gè) Unresolved(未解決) 標(biāo)簽。這是因?yàn)?AI 并不知道這個(gè)圖像差異是由新功能導(dǎo)致的還是確實(shí)是個(gè) Bug怎栽。

而這個(gè)時(shí)候丽猬,我們可以人工去給這個(gè)測試結(jié)果打標(biāo)簽(通過 / 不通過)。如果打上了通過的標(biāo)簽熏瞄,下一次測試則會(huì)忽略這個(gè)差異并判斷為通過脚祟。如果打上了失敗的標(biāo)簽,下一次測試中如果出現(xiàn)了同樣的差異將會(huì)自動(dòng)判斷為不通過强饮。

最佳實(shí)踐

我們回到 Web 頁面中給之前 Unresolved 的測試用例點(diǎn)個(gè)贊(打上通過的標(biāo)簽)由桌。

001.png

這個(gè)時(shí)候新的 checkpoint 將會(huì)覆蓋原來的 checkpoint,并且當(dāng)前這個(gè)用例將會(huì)判斷為通過胡陪。

002.png

以圖像識(shí)別差異的方式去判斷 UI 測試通過與否確實(shí)是有一定的價(jià)值的沥寥,但是其中也有不少的漏洞存在,下面來講解如何解決這個(gè)問題

設(shè)置 Checkpoint 圖像忽略區(qū)域

我們回到之前的 Web 頁面中柠座,在最后的測試結(jié)果的 ANNOTATIONS 標(biāo)簽欄中選擇 ignore regions(可忽略區(qū)域)邑雅,然后我們選中輸入框光標(biāo)所屬區(qū)域,最后點(diǎn)擊保存妈经,如圖所示:

![004.png](https://upload-images.jianshu.io/upload_images/18344821-ad52582d7a7c8825.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

這時(shí)候我們再次運(yùn)行代碼:

from selenium import webdriver
from applitools.selenium import Eyes, Target


class HelloWorld:

    eyes = Eyes()

    # 這里填寫你保存的秘鑰
    eyes.api_key = 'XXX'

    try:

        # Open a Chrome browser.
        driver = webdriver.Chrome()

        # Start the test and set the browser's viewport size to 800x600.
        eyes.open(driver, "Test", "Baidu", {'width': 800, 'height': 600})

        # 訪問百度首頁
        driver.get('https://www.baidu.com')

        # Visual checkpoint #1.
        eyes.check("Baidu Homepage Test", Target.window())

        # End the test.
        results = eyes.close(False)

        print(results)

    finally:

        # Close the browser.
        driver.quit()

        # If the test was aborted before eyes.close was called, ends the test as aborted.
        eyes.abort()

運(yùn)行完畢后回到 applitools 的 Web主頁面中淮野,發(fā)現(xiàn)多了一條測試通過的用例:

003.png

點(diǎn)進(jìn)去后發(fā)現(xiàn) Baseline 與 當(dāng)前測試結(jié)果并不相同,但是由于我們選定了可忽略的區(qū)域吹泡,所以輸入框光標(biāo)存在與否并不會(huì)影響測試結(jié)果:

004.png

于是我們完美的解決了之前遇到的問題骤星。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市爆哑,隨后出現(xiàn)的幾起案子洞难,更是在濱河造成了極大的恐慌,老刑警劉巖揭朝,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队贱,死亡現(xiàn)場離奇詭異,居然都是意外死亡潭袱,警方通過查閱死者的電腦和手機(jī)柱嫌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屯换,“玉大人编丘,你說我怎么就攤上這事。” “怎么了嘉抓?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵索守,是天一觀的道長。 經(jīng)常有香客問我抑片,道長蕾盯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任蓝丙,我火速辦了婚禮级遭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渺尘。我一直安慰自己挫鸽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布鸥跟。 她就那樣靜靜地躺著丢郊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪医咨。 梳的紋絲不亂的頭發(fā)上枫匾,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音拟淮,去河邊找鬼干茉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛很泊,可吹牛的內(nèi)容都是我干的角虫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼委造,長吁一口氣:“原來是場噩夢啊……” “哼戳鹅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昏兆,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枫虏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后爬虱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隶债,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年饮潦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了燃异。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片携狭。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡继蜡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稀并,我是刑警寧澤仅颇,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站碘举,受9級特大地震影響忘瓦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜引颈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一耕皮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝙场,春花似錦凌停、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至完箩,卻和暖如春赐俗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弊知。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工阻逮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秩彤。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓夺鲜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呐舔。 傳聞我的和親對象是個(gè)殘疾皇子币励,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359