天天看點

測試面試題集錦(五)| 自動化測試與性能測試篇(附答案)

簡介

本系列文章總結歸納了一些軟體測試工程師常見的面試題,主要來源于個人面試遇到的、網絡搜集(完善)、工作日常讨論等,分為以下十個部分,供大家參考。如有錯誤的地方,歡迎指正。有更多的面試題或面試中遇到的坑,也歡迎補充分享。希望大家都能找到滿意的工作,共勉之!~

自動化測試相關

包含 Selenium、Appium 和接口測試。

  1. 自動化代碼中,用到了哪些設計模式?

    單例模式

    工廠模式

    PO模式

    資料驅動模式

  2. 什麼是斷言?

    檢查一個條件,如果它為真,就不做任何事,用例通過。如果它為假,則會抛出 AssertError 并且包含錯誤資訊。

  3. UI 自動化測試中,如何做叢集?

    Selenium Grid,分布式執行用例

    Appium 使用 STF 管理多裝置

    Docker+K8S 管理叢集

  4. 怎麼對含有驗證碼的功能進行自動化測試?

    萬能驗證碼

    測試環境屏蔽驗證

    其他操作不推薦

  5. 如何優化和提高 Selenium 腳本的執行速度?

    盡量使用 by_css_selector() 方法

    by_css_selector() 方法的執行速度比 by_id() 方法的更快,因為源碼中 by_id() 方法會被自動轉成 by_css_selector() 方法處理;

    使用等待時,盡量使用顯示等待,少用 sleep(),盡量不用隐式等待;

    盡量減少不必要的操作:可以直接通路頁面的,不要通過點選操作通路;

    并發執行測試用例:同時執行多條測試用例,降低用例間的耦合;

    有些頁面加載時間長,可以中斷加載;

  6. 接口測試能發現哪些問題?

    可以發現很多在頁面上操作發現不了的 bug;

    檢查系統的異常處理能力;

    檢查系統的安全性、穩定性;

    前端随便變,接口測好了,後端不用變;

    可以測試并發情況,一個賬号,同時(大于 2 個請求)對最後一個商品下單,或不同賬号,對最後一個商品下單;

    可以修改請求參數,突破前端頁面輸入限制(如金額);

  7. Selenium 中隐藏元素如何定位?

    如果單純的定位的話,隐藏元素和普通不隐藏元素定位沒啥差別,用正常定位方法就行了(這個很多面試官也搞不清楚);

    元素的屬性隐藏和顯示,主要是 type=“hidden” 和 屬性來控制的,接下來在元素屬性裡面讓它隐藏,隐藏元素可以正常定位到,隻是不能操作(定位元素和操作元素是兩碼事,很多初學者傻傻分不清楚),操作元素是 click,clear,send_keys 這些方法;

    JS 操作隐藏元素;

  8. 如何判斷一個頁面上元素是否存在?

    方法一:用 try…except…

    方法二:用 elements 定義一組元素方法,判斷元素是否存在,存在傳回 True,不存傳回 False

    方法三:結合 WebDriverWait 和 expected_conditions 判斷(推薦)

  9. 如何提高腳本的穩定性?

    不要右鍵複制 xpath(十萬八千裡那種路徑,肯定不穩定),自己寫相對路徑,多用 id 為節點查找;

    定位沒問題,第二個影響因素那就是等待了,sleep 等待盡量少用(影響執行時間);

    定位元素方法重新封裝,結合 WebDriverWait 和 expected_conditions 判斷元素方法,自己封裝一套定位元素方法;

  10. 如何定位動态元素?

    動态元素有 2 種情況,一個是屬性動态,比如 id 是動态的,定位時候,那就不要用 id 定位就是了;

    還有一種情況動态的,那就是這個元素一會在頁面上方,一會在下方,飄忽不定的動态元素,定位方法也是一樣,按 f12,根據元素屬性定位(元素的 tag、name的步伐屬性是不會變的,動的隻是 class 屬性和 styles 屬性);

  11. 如何通過子元素定位父元素

    使用element.parent方法

  12. 平常遇到過哪些問題? ?如何解決的

    可以把平常遇到的元素定位的一些坑說下,然後說下為什麼沒定位到,比如動态 id、有 iframe、沒加等待等因素;

  13. 一個元素明明定位到了,點選無效(也沒報錯),如果解決?

    使用 JS 點選,Selenium 有時候點選元素是會失效;

  14. 測試的資料你放在哪?

    對于賬号密碼,這種管全局的參數,可以用指令行參數,單獨抽出來,寫的配置檔案裡(如 ini);

    對于一些一次性消耗的資料,比如注冊,每次注冊不一樣的數,可以用随機函數生成;

    對于一個接口有多組測試的參數,可以參數化,資料放 YAML,Text,JSON,Excel 都可以;

    對于可以反複使用的資料,比如訂單的各種狀态需要造資料的情況,可以放到資料庫,每次資料初始化,用完後再清理;

    對于郵箱配置的一些參數,可以用 ini 配置檔案;

    對于全部是獨立的接口項目,可以用資料驅動方式,用 excel/csv 管理測試的接口資料;

    對于少量的靜态資料,比如一個接口的測試資料,也就 2-3 組,可以寫到 py腳本的開頭,十年八年都不會變更的;

  15. 什麼是資料驅動,如何參數化?

    參數化的思想是代碼用例寫好了後,不需要改代碼,隻需維護測試資料就可以了,并且根據不同的測試資料生成多個用例;

  16. 其他接口都需要登入接口的資訊,怎麼去讓這個登入的接口隻在其他接口調用一次?

    使用單例模式

    使用自定義緩存機制

    使用測試架構中的 setup 機制

    pytest 中 fixture 機制

  17. 接口産生的垃圾資料如何清理?

    造資料和資料清理,需用 python 連資料庫了,做增删改查的操作測試用例前置操作,setUp 做資料準備後置操作,tearDown 做資料清理

  18. 怎麼用接口案例去覆寫業務邏輯?

    考慮不同的業務場景,一個接口走過的流程是什麼樣的,流程的邏輯是什麼樣的,什麼樣的參數會有什麼樣的結果,多場景覆寫;

性能篇

1.性能測試名額包括哪些

  • 最大并發使用者數,HPS(點選率)、事務響應時間、每秒事務數、每秒點選量、吞吐量、CPU 使用率、實體記憶體使用、網絡流量使用等。

前端需主要關注的點是:

  • 響應時間:使用者從用戶端送出請求,并得到響應,以及展示出來的整個過程的時間。

    加載速度:通俗的了解為頁面内容顯示的快慢。

    流量:所消耗的網絡流量。

後端需主要關注的是:

  • 響應時間:接口從請求到響應、傳回的時間。

    并發使用者數:同一時間點請求伺服器的使用者數,支援的最大并發數。

    記憶體占用:也就是記憶體開銷。

    吞吐量(TPS):Transaction Per Second, 每秒事務數。在沒有遇到性能瓶頸時:TPS=并發使用者數*事務數/響應時間。

    錯誤率:失敗的事務數/事務總數。

    資源使用率:CPU占用率、記憶體使用率、磁盤I/O、網絡I/O。

從性能測試分析度量的度角來看,主要可以從如下幾個大的次元來收集考察性能名額:

  • 系統性能名額、資源性能名額、穩定性名額

2.如果一個需求沒有明确的性能名額,要如何開始進行性能測試?

先輸出業務資料,如 pv、pu、時間段等,計算出大概的值,然後不斷加壓測到峰值

3.介紹 JMeter 聚合報告包括哪些内容?

  • 請求名、線程數、響應時間(50 95 99 最小 最大)錯誤率、吞吐量

4.如果有一個頁面特别卡頓,設想一下可能的原因?

  • 背景:接口傳回資料慢,查詢性能等各種問題

    前端:使用 Chrome 工具調試,判斷 JS 執行久或是其他問題

    網絡問題

5.說一說項目中的實際測試内容

  • 根據自己項目中的經驗實話實說,有沒有經驗很容易露餡。
  • 結合自己的項目經驗聊。大家也可以自行搜尋。
  • 詳細的不展開了,最重要的是相對來說 LoadRunner 的笨重、昂貴、閉源,理念和生态都落後,而 JMeter 是開源、可定制化開發,功能強大易用,并且在網際網路大廠都已經有非常成熟的落地方案(主流的網際網路公司基本都在使用 JMeter+ELK+Grafana+Influxdb 這套架構),可以說是進 BAT 大廠必備技能。還不會 JMeter 的同學建議抓緊補起來。

繼續閱讀