30道python自動化測試面試題與答案匯總
1、什么項(xiàng)目適合做自動化測試?
關(guān)鍵字:不變的、重復(fù)的、規(guī)范的
1)任務(wù)測試明確,需求不會頻繁變動
2)項(xiàng)目周期要足夠長
3)自動化測試腳本可重復(fù)使用,比如:比較頻繁的回歸測試
4)被測軟件系統(tǒng)開發(fā)比較規(guī)范,能夠保證系統(tǒng)的可測試性
5)軟件系統(tǒng)界面穩(wěn)定,變動少
6)項(xiàng)目進(jìn)度壓力不太大
2、什么是 PO 模式?
是指把一個具體的頁面轉(zhuǎn)化為編程語言當(dāng)中的一個對象,頁面特性轉(zhuǎn)化成對象屬性,頁面操作轉(zhuǎn)化為對象方法。
1)通俗來講把每個頁面當(dāng)成一個對象,頁面層寫定位元素方法和頁面操作方法
2)用例層從頁面層調(diào)用操作方法,寫成用例
3)可以做到定位元素與腳本的分離
4)主要用來實(shí)現(xiàn)對頁面操作和測試邏輯的一個分離
3、PO 模式的封裝原則有哪些?
1)要封裝頁面中的功能或服務(wù),比如點(diǎn)擊頁面元素,可以進(jìn)入到新的頁面,則可為這個服務(wù)封裝方法"進(jìn)入新頁面"
2)封裝細(xì)節(jié),對外只提供方法名或者接口,盡量不要暴露頁面的內(nèi)部
3)封裝的操作細(xì)節(jié)中不要使用斷言,把斷言放到單獨(dú)的模塊中,
4)點(diǎn)擊一個按鈕會開啟新的頁面,可以用return方法跳轉(zhuǎn),比如return MainPage()表示跳轉(zhuǎn)到主頁
5)整個 PO 你不需要封裝整個頁面的行為,用到什么邏輯就封裝什么
6)一個動作可能產(chǎn)生不同結(jié)果,比如點(diǎn)擊按鈕后,可能成功,也可能失敗,為兩種結(jié)果封裝兩個方法:click_success和click_error
4、 Python 中 *args 和 **kwargs 的作用?
都是不定長參數(shù),解決參數(shù)不固定問題。
args是非關(guān)鍵字參數(shù),用于元組;kwargs是關(guān)鍵字參數(shù) (字典)
也就是說args表示任何多個無名參數(shù),然而kwags表示一個有著對應(yīng)關(guān)系的關(guān)鍵字參數(shù)。
在使用的時候需要注意,*args要在**kwags之前,不然會發(fā)生語法錯誤。
5、Python 中的垃圾回收機(jī)制是什么?
垃圾回收機(jī)制(Garbage Collection),簡稱GC,是Python解釋器自帶的機(jī)制,專門用來進(jìn)行垃圾回收。
在定義一個變量時,會申請內(nèi)存空間,當(dāng)該變量使用完畢,也應(yīng)該釋放掉該變量所占用的內(nèi)存空間,Python則由GC機(jī)制進(jìn)行回收。
無論何種垃圾回收機(jī)制,一般都分為兩個階段:垃圾檢測和垃圾回收。
垃圾檢測,就是區(qū)分已分配內(nèi)存中的“可回收”和“不可回收”內(nèi)存。
垃圾回收,則是使操作系統(tǒng)重新掌握垃圾檢測階段所標(biāo)識出來的可回收內(nèi)存塊。
所謂垃圾回收,并不是直接把這塊內(nèi)存的數(shù)據(jù)直接清空了,而是將使用權(quán)重新交給了操作系統(tǒng),不會應(yīng)用程序霸占了。
什么是垃圾
1)當(dāng)一個變量調(diào)用完畢,且后續(xù)不再需要時,便是垃圾。
2)當(dāng)指向該變量地址的變量名指向另一個地址時,原變量內(nèi)存地址無法被訪問,此時該變量也是垃圾。
6、selenium中隱藏元素如何定位?
首先selenium是無法操作隱藏元素的(但是能正常定位到),本身這個框架就是設(shè)計(jì)如此,如果非要去操作隱藏元素,那就用js的方法去操作,selenium提供了一個入口可以執(zhí)行js腳本。
元素的屬性隱藏和顯示,主要是 type="hidden"和style="display: none;"屬性來控制的。
7、關(guān)閉瀏覽器中quit和close的區(qū)別
簡單來說,兩個都可以實(shí)現(xiàn)退出瀏覽器session功能。
close只會關(guān)閉瀏覽器,而quit關(guān)閉全部瀏覽器的同時,也會殺掉驅(qū)動進(jìn)程
8、舉例一下你遇到過那些異常
- ElementNotSelectableException :元素不能選擇異常
- ElementNotVisibleException :元素不可見異常
- NoSuchAttributeException :沒有這樣屬性異常
- NoSuchElementException:沒有該元素異常
- NoSuchFrameException :沒有該frame異常
- TimeoutException : 超時異常
- Element not visible at this point :在當(dāng)前點(diǎn)元素不可見
9 、如何處理alert彈窗?
1)先用switch_to_alert()方法切換到alert彈出框上
2)可以用text方法獲取彈出的文本 信息
3)通過accept()點(diǎn)擊確認(rèn)按鈕
4)通過dismiss()點(diǎn)擊取消按鈕,取消彈出框
5)通過text()獲得彈出窗口的文本
10、在selenium中如何處理多窗口?
句柄:窗口的唯一標(biāo)識
1)先獲取當(dāng)前窗口的句柄driver.current_window_handle
2)再獲取所有的的窗口句柄driver.window_handle
3)循環(huán)判斷是否是想要操作的窗口,如果是就可以對窗口進(jìn)行操作;如果不是就使用driver.switch_to_window方法跳轉(zhuǎn)到新的窗口。
11、selenium中如何判斷元素是否存在?
Selenium中沒有提供原生的方法判斷元素是否存在,一般我們可以通過定位元素+異常捕獲的方式判斷。
12、自動化中有哪三類等待?他們有什么特點(diǎn)?
1)線程等待(強(qiáng)制等待)如time.sleep(2):線程強(qiáng)制休眠2秒鐘,2秒過后,再執(zhí)行后續(xù)的代碼。建議少用。
2)imlicitlyWait(隱式等待)會在指定的時間范圍內(nèi)不斷的查找元素,直到找到元素或超時,特點(diǎn)是必須等待整個頁面加載完成。
3)WebDriverWait(顯式等待)通常是我們自定義的一個函數(shù)代碼,這段代碼用來等待某個元素加載完成,再繼續(xù)執(zhí)行后續(xù)的代碼。
13、selenium中如何保證操作元素的成功率?也就是說如何保證點(diǎn)擊的元素一定是可以點(diǎn)擊的?
1)使用WebDriverWait()顯性等待,等待元素加載出來后,再進(jìn)行元素操作。
2)盡量減少不必要的操作:可以直接訪問頁面的,不要通過點(diǎn)擊操作訪問
3)有些頁面加載時間過長,可以考慮中斷加載
4)開發(fā)人員規(guī)范開發(fā)習(xí)慣,如給頁面元素加上唯一的name、id等。
14、如何提高selenium腳本的執(zhí)行速度?
1)使用顯性等待,減少強(qiáng)制等待或隱性等待的使用。
2)減少不必要的操作步驟。
3)如果頁面加載的內(nèi)容過多,就設(shè)置超時時間,中斷頁面加載。
15、用例在運(yùn)行過程中經(jīng)常會出現(xiàn)不穩(wěn)定的情況,也就是說這次可以通過,下次就沒辦法通過了,如何去提升用例的穩(wěn)定性?
1)在經(jīng)常檢測失敗的元素前盡量加上顯式等待時間,等要操作的元素出現(xiàn)之后再執(zhí)行下面的操作。
2)多用 try 捕捉,處理異常
3)盡量使用測試專用環(huán)境,避免其他類型的測試同時進(jìn)行,對數(shù)據(jù)造成干擾
16、你的自動化用例的執(zhí)行策略是什么?
自動化測試用例的執(zhí)行策略是要看自動化測試的目的,通常有如下幾種策略:
1)自動化測試用例是用來監(jiān)控的,在此目的下,可以把自動化測試用例設(shè)置成定時執(zhí)行的,如果每五分鐘或一個小時執(zhí)行一次,在jenkins上創(chuàng)建一個定時任務(wù)即可。
2)必須回歸的用例。把測試用例設(shè)置成觸發(fā)式執(zhí)行,在jenkins上將自動化測試任務(wù)綁定到開發(fā)的build任務(wù)上。當(dāng)開發(fā)人員在仿真環(huán)境上部代碼的時候,自動化測試用例就會被觸發(fā)執(zhí)行。
3)不需要經(jīng)常執(zhí)行的測試用例。像全量測試用例,沒必要一直回歸執(zhí)行,有些非主要業(yè)務(wù)線也不需要時時回歸。這類測試用例采用人工執(zhí)行,在jenkins創(chuàng)建一個任務(wù),需要執(zhí)行的時候人工去構(gòu)建即可。
17、什么是持續(xù)集成?
持續(xù)集成是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常將代碼集成到主干,也就意味著每天可能會發(fā)生多次集成。
它的好處主要有兩個:
1)快速發(fā)現(xiàn)錯誤。每完成一點(diǎn)更新,就集成到主干,可以快速發(fā)現(xiàn)錯誤,定位錯誤也比較容易。
2)防止分支大幅偏離主干。如果不是經(jīng)常集成,主干又在不斷更新,會導(dǎo)致以后集成的難度變大,甚至難以集成。
目的:
持續(xù)集成的目的,就是讓產(chǎn)品可以快速迭代,同時還能保持高質(zhì)量。它的核心措施是,代碼集成到主干之前,必須通過自動化測試。只要有一個測試用例失敗,就不能集成。
18、自動化測試的時候是不是需要連接數(shù)據(jù)庫做數(shù)據(jù)校驗(yàn)?
接口測試需要,UI自動化不需要
19、有幾種元素常用定位方式,分別是?你最偏愛哪一種,為什么?
8 種,分別是:id、name、class name、tag name、link text、partial link text、xpath、css
我最常用的是 xpath(或 CssSelector)
因?yàn)楹芏嗲闆r下,html 標(biāo)簽的屬性不夠規(guī)范,無法通過單一的屬性定位,這個時候就只能使用 xpath 可以去重實(shí)現(xiàn)定位唯一element
事實(shí)上定位最快的是Id,因?yàn)閕d是唯一的,然而大多數(shù)開發(fā)并沒有設(shè)置id。
20、如何去定位頁面上動態(tài)加載的元素?
屬性動態(tài)變化是指該 element 沒有固定的屬性值,所以只能通過相對位置定位比如通過 xpath 的軸,找到該元素的父節(jié)點(diǎn)或者子節(jié)點(diǎn)等方式
21、點(diǎn)擊鏈接以后,selenium是否會自動等待該頁面加載完畢?
不會的。
所以有的時候,當(dāng)selenium并未加載完一個頁面時,去請求頁面資源,則會誤報(bào)不存在此元素。
所以首先我們應(yīng)該考慮判斷,selenium是否加載完此頁面。其次再通過函數(shù)查找該元素。(使用顯示等待,等待頁面加載后再去操作元素)
22、webdriver client的原理是什么?
在selenium啟動以后,driver充當(dāng)了服務(wù)器的角色,跟client和瀏覽器通信,client根據(jù)webdriver協(xié)議發(fā)送請求給driver。driver解析請求,并在瀏覽器上執(zhí)行相應(yīng)的操作,并把執(zhí)行結(jié)果返回給client。
23、webdriver的協(xié)議是什么?
The WebDriver Wire Protocol
24、啟動瀏覽器的時候用到的是哪個webdriver協(xié)議?
http協(xié)議
25、怎樣去選擇一個下拉框中的value=xx的option?
1)select類里面提供的方法:select_by_value(“xxx”)
2)xpath的語法也可以定位到
26、Python 中常見的可變參數(shù)類型和不可變參數(shù)類型,都有哪些?
不可變的數(shù)據(jù)類型包括:整數(shù)、浮點(diǎn)數(shù)、負(fù)數(shù)、布爾值、字符串、元組
可變參數(shù)類型包括:字典、列表、集合
27、如何在定位元素后高亮元素(以調(diào)試為目的)?
重置元素屬性,給定位的元素加背景、邊框
28、什么是斷言?
assert,判斷測試結(jié)果與期望結(jié)果是否一致
目的為了表示與驗(yàn)證軟件開發(fā)者預(yù)期的結(jié)果——當(dāng)程序執(zhí)行到斷言的位置時,對應(yīng)的斷言應(yīng)該為真。若斷言不為真時,程序會中止執(zhí)行,并給出錯誤信息。
29/自動化測試過程中,你遇到了哪些問題,是如何解決的?
1)頻繁地變更頁面,經(jīng)常要修改頁面對象類里面的代碼
2)自動化測試偶爾出現(xiàn)過誤報(bào)
3)自動化測試結(jié)果出現(xiàn)覆蓋的情況:Jenkins根據(jù)時間建立文件夾
4)自動化測試代碼維護(hù)比較麻煩
5)自動化測試進(jìn)行數(shù)據(jù)庫對比數(shù)據(jù)
30、如何模擬瀏覽器的前進(jìn)、后退、刷新操作
- driver. navigate().forward() //前進(jìn)
- driver.navigate().back() //后退
- driver.navigate0.efresh() //刷新
總結(jié)
到此這篇關(guān)于30道python自動化測試面試題與答案匯總的文章就介紹到這了,更多相關(guān)python自動化測試面試題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
地圖可視化神器kepler.gl python接口的使用方法
這篇文章主要介紹了python 地圖可視化神器kepler.gl近期重要更新的的相關(guān)資料,幫助大家利用python實(shí)現(xiàn)地圖可視化,感興趣的朋友可以了解下2020-12-12Python語言實(shí)現(xiàn)機(jī)器學(xué)習(xí)的K-近鄰算法
今天學(xué)習(xí)的算法是KNN近鄰算法。KNN算法是一個監(jiān)督學(xué)習(xí)分類器類別的算法。下面我們來詳細(xì)的探討下2015-06-06使用Python創(chuàng)建簡單的HTTP服務(wù)器的方法步驟
這篇文章主要介紹了使用Python創(chuàng)建簡單的HTTP服務(wù)器的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Pandas實(shí)現(xiàn)Dataframe的重排和旋轉(zhuǎn)
使用Pandas的pivot方法可以將DF進(jìn)行旋轉(zhuǎn)變換,本文將會詳細(xì)講解pivot的秘密,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06Flask web開發(fā)處理POST請求實(shí)現(xiàn)(登錄案例)
這篇文章主要介紹了Flask web開發(fā)處理POST請求實(shí)現(xiàn)(登錄案例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07解決Mac下首次安裝pycharm無project interpreter的問題
今天小編就為大家分享一篇解決Mac下首次安裝pycharm無project interpreter的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10