自動化測試面試題及答案


1、你會封裝自動化測試框架嗎?

這個問得最多,甚至有很多公司直接寫在招聘要求中!

當然可以,自動化框架主要的核心框架就是分層+PO模式:分別為:基礎封裝層BasePage,PO頁面對象層,TestCase測試用例層。然后再加上日志處理模塊,ini配置文件讀取模塊,unittest+ddt數據驅動模塊,jenkins持續集成模式組成。

 

2、如何把自動化測試在公司中實施並推廣起來的?

1.項目組調研選擇自動化工具並開會演示demo案例,我們主要是演示selenium和robotframework兩種;

2.搭建自動化測試框架,在項目中逐步開展自動化;

3.把該項目的自動化流程、框架固化成文檔;

4.推廣到公司的其它項目組應用。

 

3、請描述一下自動化測試流程?

1.編寫自動化測試計划;

2.設計自動化測試用例;

3.編寫自動化測試框架和腳本;

4.調試並維護腳本;

5.無人值守測試;

6.后期腳本維護(添加用例、開發更新版本)。

 

4、自動化測試用例如何編寫?以下答案二選一即可:

1.用例是自動化測試工程師自己設計的,一般剛開始已基本業務流程為主(登錄--完成一個業務--退出);

2.從系統測試用例中進行篩選或由業務工程師提供。

 

5、上一個項目中自動化測試的執行策略?

上一個項目中是定時執行的,設置的執行時間是晚上12點,執行完畢后會自動發送郵件通知

 

6、自動化測試發現BUG多嗎?

不多,因為之前項目組是把已經測試通過的基本功能再進行自動化腳本編寫和在后續版本執行自動化測試,它主要是保證已經測試通過的功能在新版本更新后沒有問題。

 

7、你覺得自動化測試的價值在哪里?你們公司為什么要做自動化測試?

引用自動化測試之后,能代替大量繁瑣的回歸測試工作,把業務測試人員解放出來,既而讓業務測試人員把精力集中在復雜的業務功能模塊上,自動化測試一般是對穩定下來的功能進行自動化,保證不會因為產品的更新導致之前穩定下來的功能出現BUG。

 

8、自動化測試有誤報過bug嗎?產生誤報怎么辦?

有誤報過,有時候自動化測試報告中顯示發現了bug,實際去通過手工測試去確認又不存在該bug。

誤報原因一般是:

1.元素定位不穩定,需要盡量提高腳本的穩定性;

2.開發更新了頁面但是測試沒有及時更新維護!

 

9、自動化測試過程中,你遇到了哪些問題,是如何解決的?

1.頻繁地變更頁面,經常要修改頁面對象類里面的代碼;

2.自動化測試偶爾出現過誤報;

3.自動化測試結果出現覆蓋的情況:Jenkins根據時間建立文件夾;

4.自動化測試代碼維護比較麻煩;

5.自動化測試進行數據庫對比數據。

 

10、在上一家公司做自動化測試用的什么框架?

可以說出以下自己擅長的一種:

1.python+selenium+unittest+htmltestrunner

2.python+selenium+pytest+allure

3. robotframework+Selenium2Library

 

12、在selenium自動化測試中,你一般完成什么類型的測試?自動化覆蓋率?

主要是冒煙測試和回歸測試。回歸測試主要寫一些功能穩定的場景,通過自動化手段去實現,節約測試時間。因為自動化測試用例也是在不斷的更新和迭代,沒有刻意去統計,大概在30%-40%左右!

 

13、在執行腳本過程,如何實現當前元素高亮顯示?

這個其實就是利用javaScript去修改當前元素的邊框樣式來到達高亮顯示的效果。

 

14、如果一個元素無法定位,你一般會考慮哪些方面的原因?

1.頁面加載元素過慢,加等待時間;

2.頁面有frame框架頁,需要先跳轉入frame框架再定位;

3.可能該元素是動態元素,定位方式要優化,可以使用部分元素定位或通過父節點或兄弟節點定位;

4.可能識別了元素,但是不能操作,比如元素不可用,不可寫等。需要使用js先把前置的操作完成。

 

15、元素定位方法你熟悉的有哪些?

id name classname link_text css xpath

 

16、遇到frame框架頁面怎么處理?

先用driver.switch_to.frame()跳轉進去frame,

然后再操作頁面元素,

操作完后使用driver.swith_to.default_content()跳轉出來。

 

17、遇到alert彈出窗如何處理?

使用driver.switch_to.alert方法先跳轉到alert彈出窗口,

然后再通過accept點擊確定按鈕,通過dismiss點擊取消難,通過text()獲得彈出窗口的文本。

 

18、在selenium中如何處理多窗口?

這個多窗口之間跳轉處理,我們在項目中也經常遇到。就是,當你點擊一個鏈接,這個鏈接會在一個新的tab打開,然后你接下來要在新tab打開的頁面查找元素,

1.我們在點擊鏈接前使用driver.current_window_handle獲得當前窗口句柄;

2.再點擊鏈接。點擊后通過driver.window_handles獲得所有窗口的句柄;

3.然后再循環找到新窗口的句柄,然后再通過driver.switch_to.window()方法跳轉到新的窗口。

 

19、怎么驗證元素是enable/disabled/checked狀態?

定位元素后:分別通過isEnabled(),isSelected(),isDisplayed()三個方法進行判斷。

 

20、 如何處理下拉菜單?

在Selenium中有一個叫Select的類,這個類支持對下拉菜單進行操作。使用方法如下:

1.定位元素

2.把定位的元素轉化成Select對象。

sel = Select(定位的元素對象)

3.通過下標或者值或者文本選中下拉框。
sel.select_by_index(index);
sel.select_by_value(value);
sel.select_by_visible_text(text);

 

21、在日歷這種web 表單你是如何處理的?

首先要分析當前網頁試用日歷插件的前端代碼,看看能不能通過元素定位,點擊日期實現,如果不能,可能需要借助javascript。還有些日歷控件一個文本輸入框,可以直接sendKeys()方法來實現傳入一個時間的數據。

 

22、舉例一下說明一下你遇到過那些異常

常見的selenium異常有這些:

NoSuchElementException:沒有該元素異常
TimeoutException : 超時異常

ElementNotVisibleException :元素不可見異常
NoSuchAttributeException :沒有這樣屬性異常
NoSuchFrameException :沒有該frame異常

 

23、關閉瀏覽器中quit和close的區別

簡單來說,兩個都可以實現退出瀏覽器session功能,close是關閉你當前聚焦的tab頁面,而quit是關閉全部瀏覽器tab頁面,並退出瀏覽器session。知道這兩個區別,我們就知道quit一般用在結束測試之前的操作,close用在執行用例過程中關閉某一個頁面的操作。

 

24、在Selenium中如何實現截圖,如何實現用例執行失敗才截圖?

在Selenium中提供了一個get_screenshot_as_file()的方法來截圖的,一般結合try/except捕獲異常時使用,進行錯誤截圖。

 

25、如何實現文件上傳?

定位元素后,直接使用send_keys()方法設置就行,參數為需要上傳的文件的路徑。

 

26、自動化中有哪三類等待?他們有什么特點?

1.線程等待(強制等待)如time.sleep(2):線程強制休眠2秒鍾,2秒過后,再執行后續的代碼。建議少用。

2.imlicitlyWait(隱式等待)會在指定的時間范圍內不斷的查找元素,直到找到元素或超時,特點是必須等待整個頁面加載完成。

3.WebDriverWait(顯式等待)通常是我們自定義的一個函數代碼,這段代碼用來等待某個元素加載完成,再繼續執行后續的代碼。

 

27、你寫的測試腳本能在不同瀏覽器上運行嗎?

當然可以,我寫的用例可以在在IE,火狐和谷歌這三種瀏覽器上運行。實現的思路是封裝一個方法,分別傳入一個瀏覽器的字符串,如果傳入IE就使用IE,如果傳入FireFox就使用FireFox,如果傳入Chrome就使用Chrome瀏覽器,並且使用什么瀏覽器可以在總的ini配置文件中進行配置。需要注意的是每個瀏覽器使用的驅動不一樣。

 

28、什么是PO模式,為什么要使用它?

PO是Page Object 模式的簡稱,它是一種設計思想,意思是,把一個頁面,當做一個對象,頁面的元素和元素之間操作方法就是頁面對象的屬性和行為,PO模式一般使用三層架構,分別為:基礎封裝層BasePage,PO頁面對象層,TestCase測試用例層。

 

29.在Selenium中如何實現拖拽滾動條?

在Selenium中通過元素定位會自動幫你拖拽到對應位置,所以是沒有自帶的scoll方法。但是這個是有限制,例如當前頁面高度太長,默認是頁上半部分,你定位的元素在頁尾,這個時候可能就會報元素不可見的異常。我們就需要利用javaScript來實現拖拽頁面滾動條。

我們一般可以兩個方法去拖拽,一個是根據拖拽的坐標(像素單位),另外一個是根據拖拽到一個參考元素附件。

代碼舉例(根據元素坐標拖拽):
JavascriptExecutor jse= (JavascriptExecutor)driver;
jse.executeScript(“window.scrollBy(0,250)”, “”);

 

30.如何實現鼠標懸停,鍵盤事件和拖拽動作?

在Webdriver中,處理鍵盤事件和鼠標事件,一般使用Actions類提供的方法,包括鼠標懸停,拖拽和組合鍵輸入。

這里介紹幾個方法:

方法:clickAndHold()
使用場景:找到一個元素,點擊鼠標左鍵,不放手。自己可以點擊鼠標不松開試試這個場景。

方法:contentClick()
使用場景:模擬鼠標右鍵點擊,一般右鍵會帶出菜單來。

方法:doubelClick()
使用場景:模擬鼠標雙擊

方法:dragAndDrop(source,target)
使用場景:模擬從source這個位置,拖拽一個元素到target位置

鍵盤事件方法:keyDown(keys.ALT), keyUp(keys.SHIFT)
使用場景:點擊鍵盤事件,分為兩個動作,一個點擊鍵盤,第二個動作是釋放點擊(松開)

 

31.如何獲取頁面標題,懸浮文本和錯誤文本,並驗證?

標題,我們可以通過driver.getTitle()方法來得到一個字符串,然后使用字符串的containts方法或者equals方法去進行斷言。

懸浮文本(tooltip),一般是利用Actions類,然后鼠標懸停方法,然后通過getText()方法來得到這個tooltip字符串。

錯誤信息,直接把這個錯誤字段先進行定位,然后通過getText()方法拿到錯誤文本,主要的斷言有包含,相等,不相等,不包含,以什么開頭等。

 

32.你是如何管理你的測試用例並執行?

寫用例和管理並執行用例,我們都需要借助單元測試框架來實現,如果是Java語言一般有junit和TestNG,如果是python,常見的有unittest。
就你實際情況,說一下。例如我使用TestNG比較多,需要配置testng.xml文件來實現測試用例的執行。有時候需要配置多個testng.xml去實現不同的任務場景。再展開,可能問你一下testng框架的知識點。例如,方法依賴,用例執行優先級,數據源驅動等。

 

33.關於自動化測試報告生成?

我個人一般用TestNG原生的測試報告,也有第三方叫reportNG的插件,不過我沒有實際使用過。

 

34.什么是數據驅動框架?它與關鍵字驅動框架有什么不同?

數據驅動框架。
在這個框架中,測試用例邏輯駐留在測試腳本中。測試數據被分離並保存在測試腳本之外。測試數據是從外部文件(Excel文件)中讀取的,並被加載到測試腳本中的變量中。變量用於輸入值和驗證值。
關鍵字驅動。
關鍵字/表驅動框架需要開發數據表和關鍵字。它們獨立於執行它們的測試自動化工具。可以使用或不使用應用程序來設計測試。在關鍵字驅動的測試中,被測試的應用程序的功能記錄在一個表格中,以及每個測試的分步說明。

 

35.解釋使用TestNG而不是JUnit框架的好處?

TestNG相較於Junit的優勢:
在JUnit中,我們必須聲明@BeforeClass和@AfterClass,這是JUnit中的一個約束,而在TestNG中沒有像這樣的約束。
TestNG提供了更多的setUp / tearDown級別。1.@ Before/AfterSuite 2.@Before/AfterTest 3.@Before/AfterGroup
TestNG中不需要擴展任何類。
TestNG中沒有方法名稱約束,就像JUnit一樣。
在TestNG中,我們可以告訴測試一個方法依賴於另一個方法,而在JUnit中這是不可能的。

測試用例的分組在TestNG中可用,而JUnit中則不可用。執行可以基於組完成。例如,如果你已經定義了許多案例,並通過將2個組分別定義為“離職“與”回歸”隔離。如果你只是想執行“理智”的情況,那就告訴TestNG執行“理智”。TestNG將自動執行屬於“離職”組的案例。另外,TestNG支持並行測試用例執行。

 

36.可以使用TestNG運行一組測試用例嗎?

是的,TestNG框架支持在測試組的幫助下執行多個測試用例。
它提供了以下選項來運行特定組中的測試用例。
如果想基於回歸測試或冒煙測試等其中一個組來執行測試用例,那么:
@Test(groups = {“regression-tests”, “smoke-tests”})

 

37.如何提高selenium腳本的執行速度?

1、優化等待時間,使用WebDriverWait智能等待代替 線性等待sleep和隱式等待imlicitlyWait

2、減少不必要的操作

3、在服務器允許的情況下,使用多線程實現並發執行測試用例

 

以上面試題均整理自網絡,待吸收后再繼續更新....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM