UI自動化面試題

 UI自動化測試工作開展:
   適合做UI自動化的場景
     1)回歸驗證
     2)巡檢
     3)移動端的埋點測試
         最典型的就是移動端的埋點測試,傳統(tǒng)的測試方法,就是在手機上操作,
         觸發(fā)埋點上報,然后通過手機抓包,獲取埋點數(shù)據(jù),然后再依據(jù)埋點文檔,去對每個字段進行一一人工校驗。
     
一、UI自動化測試流程
前提條件:框架已經(jīng)部署ok

 編寫用例
 1.需求分析(業(yè)務(wù)流程)
     二次的需求分析 
         進行自動化測試前,肯定是手工測試已經(jīng)進行了測試,并且功能穩(wěn)定沒有bug
 2.用例設(shè)計:提供什么參數(shù)以及數(shù)據(jù),測試步驟
         手工測試用例編寫
         自動化測試用例代碼編寫(用例設(shè)計點)
 3.用例評審,組內(nèi)評審
 4.編寫代碼
     4.1根據(jù)編寫的測試用例,進行代碼編寫,如登錄功能
         步驟:
         輸入登錄url:https://v4.ketangpai.com/Home/User/login.html
         輸入用戶名:aaa  name="account"
         輸入密碼:123  name="pass"
         點擊登錄按鈕:class="btn-btn" (雖然找到兩個相同元素,但fide_element只取第一個,正好我們需要的是第一個)
         進行斷言
     4.2優(yōu)化代碼
         優(yōu)化方向:
         更好用
         更易懂
         維護代碼方便
         更通用
         擴展性
        優(yōu)化點:
         隔離測試數(shù)據(jù),當需要添加或修改數(shù)據(jù)時,可以在單獨的模塊中進行修改
         瀏覽器管理可以重復使用,所以可以進行單獨封裝
         需要把驅(qū)動進行隔離管理:1.可以存儲多個瀏覽器驅(qū)動,2.想用哪個用哪個
         base url域名ip
         登錄操作可以重復使用(項目通用)
         登錄操作:已經(jīng)登錄過了,不需要重新再登錄,記住用戶登錄狀態(tài)
         
        PO模式
         發(fā)現(xiàn)更多的新缺陷應(yīng)該是手工測試的主要目的,不能期望自動化測試去發(fā)現(xiàn)更多新缺陷。
         事實上,自動化測試主要用于發(fā)現(xiàn)原來的缺陷。自動化測試用于回歸測試,而大量的新業(yè)務(wù)測試更多地還是依賴手工測試。
         如果沒有建立一個正確的軟件測試自動化的觀念,認為測試自動化可以完全代替手工測試,
         或者認為測試自動化可以發(fā)現(xiàn)大量新缺陷,或者不愿在初期投入比較大的開支等,則自動化測試一定會讓我們大失所望。

UI自動化測試:面試題

 1.如何把自動化測試在公司中實施起來的?
     1.選擇長期的有穩(wěn)定模塊的項目
     2.項目組調(diào)研選擇自動化工具并開會演示demo案例
     3.輸出自動化的方案,跟項目負責人確認
 2.自動化測試用例如何編寫?
     自動化測試主要用于回歸測試,因此自動化用例來源于我們編寫的功能用例,不管是接口的還是業(yè)務(wù)測試的用例;
     所以我們會從原有用例中進行篩選,篩選出需要實現(xiàn)自動化測試的,但是這個實現(xiàn)過程并不是按部就班;
     需要根據(jù)原有用例進行自動化用例設(shè)計,比如修改名稱這樣的功能,自動化用例中需要實現(xiàn)每次修改都和上一次不一樣,否則無法驗證修改是否正確。
     增加了這樣的設(shè)計之后再按照使用腳本來實現(xiàn)自動操作的過程,并實現(xiàn)結(jié)果判斷,也就是斷言
 3.自動化測試發(fā)現(xiàn)BUG多嗎?不多
    那么自動化測試的價值是什么 ? 怎么證明它不是偽需求 ?
     1.比起發(fā)現(xiàn)bug,自動化測試更擅長保持舊有的功能沒有bug出現(xiàn)
     2.引用自動化測試之后,能代替大量繁瑣的回歸測試工作,把業(yè)務(wù)測試人員解放出來,既而讓業(yè)務(wù)測試人員把精力集中在復雜的業(yè)務(wù)功能模塊上
     3.一般來說相對穩(wěn)定的功能更適合自動化
     4.功能自動化盡可能用接口\驗收自動化則使用端到端
     5.回歸測試效率和頻次的提升
 4.自動化中有哪三類等待?他們有什么特點?
     1.線程等待(強制等待)如:time.sleep(2):線程強制休眠2秒鐘,2秒過后,再執(zhí)行后續(xù)的代碼。建議少用。
     2.imlicitlyWait(隱式等待)會在指定的時間范圍內(nèi)不斷的查找元素,
         直到找到元素或超時,是一種全局性設(shè)置,可以隨時更改,并且只針對查找元素生效
     3.WebDriverWait(顯式等待)通常是我們自定義的一個函數(shù)代碼,這段代碼用來等待某個元素加載完成,
         再繼續(xù)執(zhí)行后續(xù)的代碼,可以針對js彈框、iframe、新窗口等進行實施
 5.selenium*中的定位方式
     1.id:根據(jù)id來獲取元素,返回單個元素,id值一般是唯一的;
     2.name:根據(jù)元素的name屬性定位;
     3.tagName:根據(jù)元素的標簽名定位;
     4.className:根據(jù)元素的樣式class值定位;
     5.linkText:  根據(jù)超鏈接的文本值定位;
     6.partialLinkText:根據(jù)超鏈接的部分文本值定位;
     7.cssSelector:css選擇器定位;
     8.xpath:通過元素的路徑來定位;
    優(yōu)先級最高:ID
    優(yōu)先級其次:name
    優(yōu)先級再次:CSS selector
    優(yōu)先級再次:Xpath
 6.xpath和css定位都比較強大,那他們之間有什么區(qū)別?
      1.CSS 比XPath 速度快,因為css是配合html來工作,它實現(xiàn)的原理是匹配對象的原理,而
         xpath是配合xml工作的,它實現(xiàn)的原理是遍歷的原理,所以兩者在設(shè)計上,css性能更優(yōu)秀
      2.Xpath對于class跟普通屬性一致
      3.xpath可匹配祖先元素,css不可以
      4.查找兄弟元素, Css只能查找元素后面(弟弟妹妹)的元素,不能向前找(哥哥姐姐)
 7.寫的測試腳本能在不同瀏覽器上運行嗎?
     當然可以,我寫的用例可以在在IE,火狐和谷歌這三種瀏覽器上運行,
    實現(xiàn)的思路是封裝一個方法,分別傳入一個瀏覽器的字符串,如果傳入IE就使用IE,如果傳入FireFox就使用FireFox,如果傳入Chrome就使用Chrome瀏覽器;
    并且使用什么瀏覽器可以在總的ini配置文件中進行配置。需要注意的是每個瀏覽器使用的驅(qū)動不一樣。
    
 8.什么是PO模式,為什么要使用它
     說在前邊:PO模式是一種設(shè)計思想,在實際編碼的時候可以有若干種實現(xiàn)方式。實際上,也建議
     大家根據(jù)自己項目的情況來動態(tài)的編碼。具體來說,常見的PO模式有:
         1)三層:對象庫層+case層+page層
         2)四層:對象庫層+case層+page層+公共類
    簡單的說下PO模式的設(shè)計思想?
        所謂的PO吧,就是Page Object頁面對象,利用面向?qū)ο蟮乃季S來封裝我們的UI自動化測試用例。
     PO模式就是把我們測試過程中每個頁面都當做對象,在我們的UI自動化測試框架中,每個頁面都有一個獨立的封裝py文件,
     分為三層來管理:
         第一層是對象庫層,將測試用例在該頁面所有用到的元素對象統(tǒng)一找到并進行管理,
         第二層操作層:基于每個元素定義好其對應(yīng)的操作方法,
         第三層:業(yè)務(wù)層,組裝多個操作方法即可形成完整的業(yè)務(wù)操作。
    例如:
     登錄頁面:
         對象庫層找到用戶名、密碼等元素,
         操作層封裝用戶名輸入、密碼輸入等方法,
         業(yè)務(wù)層連續(xù)調(diào)用操作層方法,那調(diào)用業(yè)務(wù)層的登錄方法傳遞輸入?yún)?shù)即可完成登錄。
        這樣無論哪個測試用例需要進行登錄,都只需要調(diào)用該頁面py文件業(yè)務(wù)層的登錄方法,即可完成登錄。
        這樣整個UI自動化測試代碼中,對應(yīng)的元素定位代碼只會存在一份了,方便了維護,也減少了代碼的冗余。
 9. Jmeter工具如何做接口之間的關(guān)聯(lián),簡述?
      接口關(guān)聯(lián)指的就是一個接口要使用另一個接口的返回值作為參數(shù),這種我們在jmeter中叫做關(guān)聯(lián)。
    關(guān)聯(lián)的實現(xiàn)方式有多種:
         1.使用正則表達式提取器獲取上一個請求的響應(yīng)結(jié)果中的某個值,儲存在某個變量中,然后下一個接口使用變量進行引用
         2.使用json提取器獲取上一個請求的響應(yīng)結(jié)果中的某個值,儲存在某個變量中,然后下一個接口使用變量進行引用
         3.使用beanshell后置處理器,解析響應(yīng)結(jié)果存儲在變量中,然后下一個接口使用變量進行引用
           跨線程組關(guān)聯(lián)則需要將關(guān)聯(lián)字段設(shè)置為全局屬性
 10.cookie 和 session 的區(qū)別?
     會話(Session)跟蹤是Web程序中常用的技術(shù),用來跟蹤用戶的整個會話
     Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務(wù)器端記錄信息確定用戶身份
    區(qū)別:
         1.數(shù)據(jù)存放位置不同:
             cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上
         2.安全程度不同:
             cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙,考慮到安全應(yīng)當使用session
         3.性能使用程度不同:
             session會在一定時間內(nèi)保存在服務(wù)器上。當訪問增多,會比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面,應(yīng)當使用cookie
         4.數(shù)據(jù)存儲大小不同:
             單個cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie,而session則存儲與服務(wù)端,瀏覽器對其沒有限制
 11.自動化測試中用例依賴的數(shù)據(jù)如何構(gòu)造
        不管是接口自動化還是ui自動化都會存在自動化case依賴數(shù)據(jù)如何構(gòu)造的問題,可以從三個方面去考慮,
          第一個是在測試前采用接口去構(gòu)造需要的數(shù)據(jù);
          第二個是使用初始化sql去初始化數(shù)據(jù),但是如果說表結(jié)構(gòu)復雜的話,sql編碼同學寫也是比較大的工作量;
        第三個方式是提前準備好一套數(shù)據(jù)(拿測試環(huán)境的數(shù)據(jù)),并且將該數(shù)據(jù)對應(yīng)的數(shù)據(jù)庫進行備份,在之后每次執(zhí)行測試前先備份當前數(shù)據(jù)庫數(shù)據(jù),
          再導入之前的測試數(shù)據(jù),再執(zhí)行測試,測試執(zhí)行完后再恢復原有的數(shù)據(jù)
 12.如何提高Selenium腳本的執(zhí)行速度?
         1.在設(shè)置等待時間的時候,可以sleep固定的時間,也可以檢測某個元素出現(xiàn)后中斷等待也可以提高速度
         2.配置實現(xiàn)多線程,在編寫測試用例的時候,一定要實現(xiàn)松耦合,然后在服務(wù)器允許的情況下,盡量設(shè)置多線程運行,提高執(zhí)行速度
         3.中斷頁面加載,如果頁面加載的內(nèi)容過多,我們可以查看一下加載慢的原因,如果加載的內(nèi)容不影響我們 測試,就設(shè)置超時時間
         4.優(yōu)化等待時間:使用 WebDriverWait 智能等待來代替線程等待 sleep 和 隱式等待 implicityWait
 13.一個元素明明定位到了,點擊無效(也沒報錯),如何解決?
         使用js點擊,selenium有時候點擊元素是會失效
 14.你會封裝自動化測試框架嗎?
         當然可以,自動化框架主要的核心框架就是分層+PO模式:
         分別為:基礎(chǔ)封裝層BasePage,PO頁面對象層,TestCase測試用例層;
         然后再加上日志處理模塊,ini配置文件讀取模塊,unittest+ddt數(shù)據(jù)驅(qū)動模塊,jenkins持續(xù)集成模式組成;
 15.關(guān)閉瀏覽器中quit和close的區(qū)別
         簡單來說,兩個都可以實現(xiàn)退出瀏覽器session功能,
         close是關(guān)閉你當前聚焦的tab頁面;而quit是關(guān)閉全部瀏覽器tab頁面,并退出瀏覽器session。
         知道這兩個區(qū)別,我們就知道quit一般用在結(jié)束測試之前的操作,close用在執(zhí)行用例過程中關(guān)閉某一個頁面的操作。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容