自動化測試面試點

假如我是一朵云發表於2024-08-12

1. 封裝自動化測試框架

  po頁面物件層,用例層,元素定位層,測試資料層。 ----PO頁面物件層(用例層從頁面層呼叫操作方法,寫成用例)

  其他的是:日誌處理模組,ini配置檔案讀取模組,unittest+ddt資料驅動模組,jenkins持續整合

  ---

  PO是Page Object 模式的簡稱,它是一種設計思想,意思是,把一個頁面,當做一個物件,頁面的元素和元素之間操作方法就是頁面物件的屬性和行為,

  PO模式一般使用三層架構,分別為:基礎封裝層BasePage,PO頁面物件層,TestCase測試用例層。

  basepage封裝常用的操作:1.等待元素可見 2.查詢元素 3.點選 輸入 4.獲取文字,獲取屬性

2. 降低自動化維護成本

  選擇比較穩定的介面和內容做自動化測試

  介面不寫死引數,呼叫頁面獲取引數,實現各個環境版本都能執行

3. 保證指令碼的有效性

  把一個 頁面要用到的元素和操作,封裝到一個頁面類中,如果一個元素定位發生改變,只要修改這個頁面的元素屬性

  場景獨立,所有的步驟不封裝在一起

  測試用例之間,減少耦合度

  python+selenium+pytest+allure

4. 如果一個元素無法定位,思考點
  頁面載入元素過慢,加等待時間
  頁面有frame框架,需要先跳入框架再定位,-----先用driver.switch_to.frame()跳轉進去frame,然後再操作頁面元素,操作完後使用driver.swith_to.default_content()跳轉出來
  如果是動態元素,要透過父節點兄弟節點來定位
  可能識別的元素,但是不可用不能編輯,需要完成元素的前置操作或條件
5. 獲得alert彈出視窗的文字
  driver.switch_to.alert方法先跳轉到alert彈出視窗,然後再透過accept點選確定按鈕,透過dismiss點選取消難,透過text()獲得彈出視窗的文字。
6. 處理多視窗
  多視窗:當你點選一個連結,這個連結會在一個新的tab開啟,然後你接下來要在新tab開啟的頁面查詢元素,

  1.我們在點選連結前使用driver.current_window_handle獲得新視窗控制代碼

  2.再點選連結。點選後透過driver.window_handles獲得所有視窗的控制代碼,

  3.然後再迴圈找到新視窗的控制代碼,然後再透過driver.switch_to.window()方法跳轉到新的視窗。

7、怎麼驗證元素是enable/disabled/checked狀態?

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

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

  首先要分析當前網頁試用日曆外掛的前端程式碼,看看能不能透過元素定位,點選日期實現,

  如果不能,可能需要藉助javascript。還有些日曆控制元件一個文字輸入框,可以直接sendKeys()方法來實現傳入一個時間的資料。

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

  常見的selenium異常有這些:

  NoSuchElementException:沒有該元素異常

  TimeoutException : 超時異常

  ElementNotVisibleException :元素不可見異常

  NoSuchAttributeException :沒有這樣屬性異常

  NoSuchFrameException :沒有該frame異常

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

  1.執行緒等待(強制等待)如time.sleep(2):執行緒強制休眠2秒鐘,2秒過後,再執行後續的程式碼

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

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

13、你寫的測試指令碼能在不同瀏覽器上執行嗎

  封裝一個方法,分別傳入一個瀏覽器的字串,如果傳入IE就使用IE,如果傳入FireFox就使用FireFox,如果傳入Chrome就使用Chrome瀏覽器,

  並且使用什麼瀏覽器可以在總的ini配置檔案中進行配置。需要注意的是每個瀏覽器使用的驅動不一樣。

15、什麼是程序、執行緒、協程?

  程序是獨立的程式執行的過程

  執行緒是程式執行中一個順序控制流程,是程式執行流的最小單元

  協程是比執行緒更加輕量級的存在,

  程序與執行緒的區別

  · 執行緒是程式執行的最小單位,而程序是作業系統分配資源的最小單位;

  · 一個程序由一個或多個執行緒組成,執行緒是一個程序中程式碼的不同執行路線;

  · 程序之間相互獨立,但同一程序下的各個執行緒之間共享程式的記憶體空間(包括程式碼段、資料集、堆等)及一些程序級的資源(如開啟檔案和訊號),某程序內的執行緒在其它程序不可見;

  · 排程和切換:執行緒上下文切換比程序上下文切換要快得多。

  協程的特點

  · 執行緒的切換由作業系統負責排程,協程由使用者自己進行排程,因此減少了上下文切換,提高了效率。

  · 執行緒的預設Stack大小是1M,而協程更輕量,接近1K。因此可以在相同的記憶體中開啟更多的協程。

  · 由於在同一個執行緒上,因此可以避免競爭關係而使用鎖。

  · 適用於被阻塞的,且需要大量併發的場景。但不適用於大量計算的多執行緒,遇到此種情況,更好是用執行緒去解決。

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

  1.編寫自動化測試計劃

  2.設計自動化測試用例

  3.編寫自動化測試框架和指令碼

  4.除錯並維護指令碼

  5.無人值守測試

  6.後期指令碼維護(新增用例、開發更新版本)

18、上一個專案中自動化測試的執行策略?

  上一個專案中是定時執行的,設定的執行時間是晚上12點,執行完畢後會自動傳送郵件通知

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

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

20、你覺得自動化測試的價值在哪裡?你們公司為什麼要做自動化測試?

  引用自動化測試之後,能代替大量繁瑣的迴歸測試工作,把業務測試人員解放出來,既而讓業務測試人員把精力集中在複雜的業務功能模組上,

  自動化測試一般是對穩定下來的功能進行自動化,保證不會因為產品的更新導致之前穩定下來的功能出現BUG

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

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

  誤報原因一般是:

  1.元素定位不穩定,需要儘量提高指令碼的穩定性;

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

22、在selenium自動化測試中,你一般完成什麼型別的測試?自動化覆蓋率?

  主要是冒煙測試和迴歸測試,迴歸測試主要寫一些功能穩定的場景,透過自動化手段去實現,節約測試時間。

  因為自動化測試用例也是在不斷的更新和迭代,沒有刻意去統計,大概在30%-40%左右!

23、在執行指令碼過程,如何實現當前元素高亮顯示?

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

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

  id name classname link_text css xpath

25、如何處理下拉選單?

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

  1.定位元素

  2.把定位的元素轉化成Select物件。

  sel = Select(定位的元素物件)

  3.透過下標或者值或者文字選中下拉框。

  sel.select_by_index(index);

  sel.select_by_value(value);

  sel.select_by_visible_text(text);

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

  簡單來說,兩個都可以實現退出瀏覽器session功能,close是關閉你當前聚焦的tab頁面,而quit是關閉全部瀏覽器tab頁面,並退出瀏覽器session。

  兩個區別:quit一般用在結束測試之前的操作,close用在執行用例過程中關閉某一個頁面的操作。

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

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

28、如何實現檔案上傳?

  定位元素後,直接使用send_keys()方法設定就行,引數為需要上傳的檔案的路徑。

29、 如何分層自動化測試?

  · UI自動化迴歸

  · 介面自動化

  · 單元測試-白盒測試

相關文章