1. 程式人生 > >20181023軟體測試經驗分享-app的Ui自動化測試 使用unittest框架的斷言心得

20181023軟體測試經驗分享-app的Ui自動化測試 使用unittest框架的斷言心得

目前app自動化測試指令碼在用的是unittest單元測試框架,在基本完成用例設計後,開始考慮如何來做斷言,(雖然學習一段時間的自動化,但用例基本不做斷言,除了登入後的拿使用者名稱驗證登入的成功與否)。基礎知識我就不做分享,分享下我目前的經驗。

一)斷言某些元素的屬性值-assertEqual()

assertEqual:如兩個值相等,則pass assertEqual:如兩個值不相等,則fail

self.assertEqual(4 + 5,9,‘The result is False’)

self.assertEqual(self.xin_find_element(By.ID, self.name_id).get_attribute('name'), self.DY_name[1])

我這樣寫,是斷定 可以找到元素的!!!(為什麼這麼說,後面有分析)

二)斷言某些元素存在與否-assertTrue()

assertTrue:判斷bool值為True,則pass assertTrue:判斷bool值為False,則fail

self.assertTrue(4 + 5 == 9,“The result is False”)

但是網上有些教程推薦這兒來做 判斷元素存在與否,寫法:self.assertTrue(self.driver.find_elemnt_by_xx(‘xxxx’).XXXX) XXXX 是 isEnable()檢查元素是否被啟用 isDisplay()檢查元素是否可見

但是我不能保證 1.你斷言這個元素是否需要等待,時間太短沒來得及去找到 怎麼辦? 2.給個找不到的元素,實際這條用例的結果是 怎麼樣的?

答: 1.可以使用顯式等待來做智慧等待; 2.結果是 selenium.common.exceptions.NoSuchElementException。就是說你想要的元素沒找到,給的結果不是斷言的結果!!!

(個人理解)HTMLTestRunner生成的測試報告,有三個不同結果:通過(pass),失敗(fail),錯誤(error) 在這裡插入圖片描述

python unintest單元測試框架提供了一整套內建的斷言方法。

如果斷言失敗,則丟擲一個AssertionError,並標識該測試為失敗狀態

如果異常,則當做錯誤來處理 注意:以上兩種方式的區別

如果成功,則標識該測試為成功狀態

三)斷言:某些新介面的某元素是否存在,如果不存在就自動截圖,如果存在,就斷言通過


    def duanyan_chazhaoyuansu(self, by, locator):
        duanyan = True
        
        try:
            self.xin_find_element(by, locator)
            print('找到元素,斷言成功')
        except:
            self.driver.get_screenshot_as_file(
                r'D:\xxxxxx\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
            duanyan = False

        if duanyan is True:
            self.assertTrue(duanyan, '斷言錯了,沒找到元素')
        else:
            self.assertTrue(duanyan, '斷言失敗了,沒找到元素')
            

xin_find_elemnt()使用顯式等待;傳入的by是BY common的By類;

這樣寫的好處是 如果元素找到了,直接print(‘找到元素,斷言成功’),斷言通過;如果元素沒找到,自動截圖,沒能通過斷言,提示msg=‘斷言失敗了,沒找到元素’。

四)反面舉例:聊天記錄被清空,返回會話介面,查詢聊天記錄的元素,做斷言

    def test_03_d482k(self):
        """清空聊天記錄"""
        # 在設定裡面 清空聊天記錄 確定後 返回會話
        self.wodehuodong()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_id).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_id).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_qingkong_id).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_qingkong_queding_id).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_fanhui_id).click()
        
        duanyan = True
        try:
            self.xin_find_element(By.ID, 'message_chat_right_text_text')
            
            self.driver.get_screenshot_as_file(
                r'D:\xxxxx\ScreenShot\screenshot_' + time.strftime('%Y%m%d_%H%M%S') + '.png')
        except:
            duanyan = False
            print('沒找到元素,能清空聊天記錄,斷言成功了')

        if duanyan is True:
            self.assertFalse(duanyan, '斷言失敗了,找到元素,實際聊天記錄還有未清空掉的')
        else:
            self.assertFalse(duanyan, '居然找到元素了!!!')
        self.xin_print()
        

設定,選擇清空聊天記錄,確定後,返回聊天會話介面。

duanyan = True

try 去尋找元素(那個id是定位 聊天記錄)

如果查詢到,自動截圖,開始斷言,斷言失敗,msg=‘斷言失敗了,找到元素,實際聊天記錄還有未清空掉的’

如果沒找到,duanyan = False,直接print(‘沒找到元素,能清空聊天記錄,斷言成功了’),斷言成功

關於app的斷言,目前就是這些體會,交流技術 歡迎+QQ153132336 zy