面試時,自動化是軟件測試高頻面試內容,通過學習和準備面試題,你會對可能遇到的問題有所準備,從而減輕面試時的緊張感,讓你在面試中穩操勝券!
今天,分享一些在面試中可能會遇到的自動化測試面試問題,助你在面試中從容不迫。
一、python深拷貝與淺拷貝的區別
Python中的深拷貝(deep copy)和淺拷貝(shallow copy)是兩種不同的對象復制方式,它們之間的主要區別在于復制的內容和范圍。
淺拷貝(Shallow Copy)
淺拷貝會創建一個新的對象,這個對象有著原始對象的一些屬性的新引用(而不是原始屬性的值的復制)。如果屬性是容器類型(如列表、字典或其他自定義對象),則淺拷貝后新對象將引用與原始對象相同的容器對象,而不是創建容器的新實例。
這意味著,如果你修改了淺拷貝后新對象的容器類型屬性,那么原始對象的相應屬性也會被修改,因為它們指向的是內存中的同一個對象。
深拷貝(Deep Copy)
深拷貝會創建一個新的對象,并遞歸地復制原始對象的所有屬性及其子對象(容器類型)。深拷貝后新對象與原始對象是完全獨立的,它們沒有共享任何子對象。
因此,如果你修改了深拷貝后新對象的容器類型屬性,原始對象的相應屬性不會受到任何影響,因為它們是完全獨立的對象。
示例:
import?copy??#?原始對象??
original_list?=?[1,?2,?[3,?4]]??#?淺拷貝??
shallow_copy?=?original_list[:]??#?或者使用?copy.copy(original_list)??#?修改淺拷貝后的子列表??
shallow_copy[2][0]?=?5??#?輸出原始對象和淺拷貝后的對象??
print(original_list)??#?輸出:?[1,?2,?[5,?4]],原始對象的子列表也被修改了??
print(shallow_copy)???#?輸出:?[1,?2,?[5,?4]]??#?深拷貝??
deep_copy?=?copy.deepcopy(original_list)??#?修改深拷貝后的子列表??
deep_copy[2][0]?=?6??#?輸出原始對象和深拷貝后的對象??
print(original_list)??#?輸出:?[1,?2,?[5,?4]],原始對象沒有變化??
print(deep_copy)??????#?輸出:?[1,?2,?[6,?4]],深拷貝后的對象完全獨立
在這個示例中,你可以看到淺拷貝后修改子列表會影響原始對象,而深拷貝則不會。
二、自動化測試過程中,你遇到了哪些問題,是如何解決的
1.環境配置問題
問題:自動化測試經常需要在特定的測試環境中運行,包括數據庫、API 服務、瀏覽器驅動等。這些環境的配置可能很復雜,容易出現錯誤。
解決方案:編寫詳細的文檔來描述如何設置和配置測試環境,方便團隊成員參考。使用自動化工具(如 Ansible 或 Puppet)來自動化環境配置過程。
2.測試腳本維護困難
問題:隨著應用程序的更新和變化,測試腳本可能需要頻繁修改和維護,這可能會變得非常耗時和繁瑣。
解決方案:使用模塊化、參數化的方法來編寫測試腳本,提高代碼的可讀性和可維護性。使用版本控制系統(如 Git)來管理測試腳本的變更歷史,方便追蹤和回滾。引入持續集成/持續部署(CI/CD)流程,自動運行測試腳本并檢查代碼質量。
3.測試數據準備
問題:自動化測試需要大量的測試數據來模擬不同的場景和條件。如何準備和管理這些數據是一個挑戰。
解決方案:使用數據驅動測試(DDT)方法,將測試數據和測試邏輯分離,方便管理和維護。使用數據庫快照或模擬數據來快速準備測試數據。編寫輔助腳本來自動生成測試數據。
4.測試結果分析
問題:自動化測試可能會產生大量的測試結果和日志,如何有效地分析和利用這些結果是一個問題。
解決方案:使用測試報告工具(如 Allure、ExtentReports 等)來生成清晰、易讀的測試報告。引入測試監控和告警系統,自動檢測測試失敗并發送通知。對測試結果進行定期回顧和分析,以發現潛在的問題和改進點。
5.跨瀏覽器/平臺兼容性
問題:Web 應用程序需要在不同的瀏覽器和平臺上運行,確保跨瀏覽器/平臺的兼容性是一個挑戰。
解決方案:使用?Selenium Grid?或類似工具來在不同的瀏覽器和平臺上并行運行測試。編寫跨瀏覽器/平臺的兼容性測試用例,確保應用程序在各種環境下都能正常工作。引入自動化截圖和視覺回歸測試工具(如 Galen Framework、BackstopJS 等)來檢查頁面布局的變化。
6.與開發的協同工作
問題:自動化測試團隊和開發團隊之間可能存在溝通不暢、需求理解不一致等問題。
解決方案:建立明確的測試和開發之間的接口和流程,確保雙方對測試需求和進度有清晰的認識。定期舉行團隊會議,討論測試進度、遇到的問題和解決方案。使用敏捷開發方法(如 Scrum 或 Kanban),確保開發和測試團隊之間的緊密協作。
7.性能問題
問題:自動化測試可能會消耗大量的計算資源和時間,尤其是在進行大規模測試時。
解決方案:優化測試腳本和測試用例,減少不必要的測試步驟和重復測試。使用分布式測試框架(如 Selenium Grid)來并行運行測試,提高測試效率。引入性能測試工具(如 JMeter、LoadRunner 等)來模擬高并發場景并測試應用程序的性能。
三、get和post不同點
1.本質區別
GET:用于從指定的資源請求數據。
POST:用于向指定的資源提交要被處理的數據。
2.URL可見性
GET:請求的參數會附加在URL上,因此參數是可見的。
POST:請求的參數不會顯示在URL中,而是放在HTTP請求的正文內,因此參數是不可見的。
3.數據傳輸方式
GET:通過URL進行參數傳遞,即將參數拼接到URL的查詢字符串中。
POST:通過HTTP請求的正文(body)進行參數傳遞。
4.緩存性
GET:請求是可以被緩存的,瀏覽器和其他中間設備可能會緩存GET請求的結果。
POST:請求默認不會被緩存,因為POST請求通常涉及數據的修改。
5.后退/刷新行為
GET:在瀏覽器中,點擊后退按鈕或刷新按鈕,GET請求會重新發送,并且不會有副作用(除了可能的緩存問題)。
POST:點擊后退按鈕會導致瀏覽器警告用戶數據可能會重新提交,因為POST請求通常涉及數據的修改。
6.傳輸數據的大小
GET:由于URL長度的限制,GET請求傳輸的數據大小通常較小,一般不超過2k-4k(根據瀏覽器和服務器配置的不同,限制可能有所不同)。
POST:POST請求傳輸的數據大小沒有限制,或者限制通常比GET請求大得多。
7.安全性(僅從URL可見性角度)
GET:由于參數是URL的一部分,因此GET請求的參數可能會暴露給用戶,可能不適合傳輸敏感數據。
POST:參數不會顯示在URL中,因此POST請求在傳輸敏感數據時相對更安全。但請注意,僅依賴POST的安全性是不夠的,應該始終對敏感數據進行加密和驗證。
8.TCP數據包
GET:通常只產生一個TCP數據包。
POST:可能產生兩個TCP數據包。首先,瀏覽器會發送帶有HTTP頭信息的請求,服務器響應100 Continue后,瀏覽器再發送包含數據的請求體
9.使用場景
GET:常用于查詢操作,如從數據庫檢索數據。
POST:常用于數據提交、文件上傳等場景,特別是當涉及數據的創建、更新或刪除時。
四、自動化如何實現文件上傳?
自動化實現文件上傳可以通過多種方法,以下是幾種常見的方案:
1.使用Selenium與Python進行文件上傳
1)安裝Selenium庫和相應的瀏覽器驅動(如ChromeDriver)。
2)使用Selenium的find_element_by_...方法定位到文件上傳的輸入框(通常是一個<input type="file">元素)。
3)使用send_keys()方法并傳入文件的絕對路徑(注意在Windows系統中路徑字符串前需加r以表示原始字符串,避免轉義字符問題)。
例如:
from?selenium?import?webdriver??
driver?=?webdriver.Chrome(executable_path='chromedriver.exe')??
driver.get('文件上傳頁面的URL')??
#?替換為實際的ID??
file_input?=?driver.find_element_by_id('file-upload-input-id')??
file_input.send_keys(r'C:\path\to\your\file.txt')??
2.使用pywinauto庫(僅限Windows系統)
安裝pywinauto庫,當上傳文件的窗口彈出時,利用pywinauto庫發送文件路徑和回車鍵的按鍵事件。
例如:
from?pywinauto.keyboard?import?send_keys??
send_keys('D:\\test.png')??#?替換為文件絕對路徑??
send_keys('{VK_RETURN}')??#?發送回車鍵
注意:這種方法需要確保文件上傳窗口處于活動狀態。
3.使用pyautogui庫(跨平臺)
安裝pyautogui庫,與pywinauto類似,當上傳文件的窗口彈出時,使用pyautogui模擬鍵盤輸入文件路徑和回車鍵。
例如:
import?pyautogui??
pyautogui.write('D:\\test.png')??#?替換為文件絕對路徑??
pyautogui.press('enter',?2)??#?發送回車鍵,注意可能需要多次發送
注意:pyautogui的路徑不能包含中文,且一次僅能上傳一個文件。
4.使用Playwright(跨瀏覽器自動化測試工具)
Playwright是一個由Microsoft開發的自動化測試工具,它支持Chrome、Firefox和Safari等多種瀏覽器。
除了用于自動化測試外,Playwright也可以用于執行瀏覽器操作,包括模擬用戶行為實現文件上傳功能。
需要編寫相應的Playwright腳本,并使用其API來定位文件上傳元素并上傳文件。
總結:如果需要跨平臺使用,建議使用Selenium或Playwright等跨平臺工具;如果僅在Windows系統下使用,pywinauto可能是一個更好的選擇。此外,第三方工具也提供了豐富的文件共享和傳輸功能,可以根據需要進行選擇和使用。
五、怎么判斷一個Bug是前端還是后端的
判斷一個bug是前端還是后端的,通常需要考慮bug的表現、觸發條件、涉及到的代碼和工具等多個方面。以下是一些常見的判斷方法:
1. 觀察Bug的表現
-
-
前端Bug:通常與用戶在瀏覽器或客戶端界面上看到的視覺效果、交互行為或性能問題相關。例如,頁面布局錯亂、按鈕點擊無響應、動畫效果異常等。
-
后端Bug:通常與服務器響應、數據處理、數據存儲或網絡通信相關。例如,數據提交失敗、服務器響應超時、數據展示不準確等。
-
2. 檢查觸發條件
-
-
前端Bug:觸發條件通常與用戶的輸入或操作相關,如點擊某個按鈕、輸入特定內容等。
-
后端Bug:觸發條件可能與特定的請求參數、服務器狀態或數據庫操作相關。
-
3. 查看網絡請求和響應
-
-
使用瀏覽器的開發者工具(如Chrome DevTools)查看網絡請求和響應。
-
前端Bug:如果請求本身沒有問題,但響應在前端處理時出現問題,則可能是前端Bug。
-
后端Bug:如果請求發出后沒有得到預期的響應(如狀態碼錯誤、響應數據不完整或格式錯誤),則可能是后端Bug。
-
4. 檢查控制臺日志
-
-
前端Bug:瀏覽器控制臺中可能會顯示JavaScript錯誤、警告或信息,這些可以幫助定位前端bug。
-
后端Bug:服務器日志中可能會記錄與后端相關的錯誤信息或異常堆棧,這些可以幫助定位后端Bug。
-
5. 使用調試工具
-
-
前端:使用瀏覽器的開發者工具進行JavaScript調試,查看變量值、函數調用棧等。
-
后端:使用IDE(如Visual Studio Code、IntelliJ IDEA等)中的調試功能,設置斷點、查看變量值、單步執行代碼等。
-
6. 模擬和排除法
-
-
嘗試模擬用戶操作,逐步排查可能的問題點。
-
排除法:先假設是前端或后端的問題,然后逐一排查和驗證。
-
7. 與團隊成員溝通
-
-
與前后端開發人員溝通,了解bug的上下文和相關信息。
-
根據團隊成員的專業知識和經驗,共同判斷bug的歸屬。
-
8. 查看代碼和文檔
-
-
查閱相關代碼和文檔,了解實現細節和邏輯。
-
根據代碼和文檔中的注釋、說明和示例,判斷bug是前端還是后端的問題。
-
9. 考慮業務邏輯和數據
-
-
有時bug可能與業務邏輯或數據相關,而不僅僅是前端或后端的問題。
-
在這種情況下,需要綜合考慮業務邏輯、數據結構和前后端交互等因素。
-
10. 使用測試工具
-
-
使用自動化測試工具(如Mocha、Cypress等)進行端到端測試,模擬用戶操作并檢查結果。
-
根據測試結果和日志信息,判斷bug是前端還是后端的問題。
-
最后感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!?
軟件測試面試文檔
我們學習必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節等一線互聯網大廠最新的面試資料,并且有字節大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。