您當前的位置:首頁 > 動漫

測試工程師面試時要注意什麼?

作者:由 軟體測試資源站 發表于 動漫時間:2022-08-03

測試工程師面試時要注意什麼?軟體測試資源站2022-08-03 20:40:42

測試工程師面試時要注意什麼?2022-06-21 15:22:40

軟體測試工程師面試如何做好自我介紹?月薪30k大佬教你回答

聽了很多提問者和我的學生,在做自我自我介紹的時候,一般存在的問題:

1、表述不太流暢。多練習表述,自己錄音,聽回放,有問題改正。

2、表述太溜,語速太快。不自信表現,隱含緊張的情緒。

3、面試官,大家好/你們好。注意說明的內容。

4、自我介紹中,加入了個人性格和愛好,但是和工作、技術無關。加,可以,往好了說;不加也行。

5、個人姓名、來歷(來自哪裡)的資訊。有可能造成不好的結果。

6、技能點的說明,不夠準確,範圍太大。精確化技能掌握。

7、介紹時,不要說技能的掌握熟練度。建議說點詳細的技術要點,或者使用方式。

8、專案的說明要有突出的主題。建議1,突出形式和種類豐富。建議2,突出一個拿手的、最能體現技術的、最熟悉的一個專案。

9、面試的崗位沒有說明。

10、自我介紹結束,沒有訊號。

注意:

1、自我介紹很重要,會影響面試官和你繼續溝通的慾望。

2、不宜過長,最好控制在2m到2。5m

因此,給大家一些建議,下面是我自己做的一個總結。大家可以借鑑一下!

面試官,上午/下午好。

我是XXX,今天來面試貴公司的軟體測試工程師崗位,接下來,我介紹一下我自己。

(提前知道和了解企業的招聘要求和技能要求,提前做好應對,技能點描述要有針對性)

1)我會Linux系統操作和相關命令的使用,專案中搭建過測試環境。

2)用過MySQL資料庫,使用SQL語句進行資料查詢,有時候測試需要進行提交資料和查詢資料的對比時,在資料庫中查詢資料。

3)我會Python開發語言,可以用於Selenium的測試指令碼編寫。專案要求對一部分固定的功能進行自動化測試指令碼的實現,使用unittest框架,指令碼中插入斷言和引入外部資料檔案,匯出過測試報告。

4)按照專案要求,對系統傳輸中的敏感資料進行檢查和對比。會使用Postman進行介面的資料請求和檢視伺服器的響應結果,使用Fiddler進行資料抓包,分析敏感資料是否進行加密處理。

5)專案中配合開發和運維做系統的一些效能測試。使用JMeter/Loadrunner對系統的操作複雜和高併發業務進行效能測試的執行。

6)專案中,我全程參與了需求評審,測試計劃的設定,編寫測試用例,執行測試、提交Bug,我們都用禪道/JIRA進行用例和缺陷的管理和跟蹤。

7)對於測試中要搭建的測試開發的框架Selenium、requests、APPium,環境自己搭建。

最近做過的一個專案是XXXXX管理系統,在其中負責XXXX模組的測試工作,他的主要功能是XXXX,設計和編寫了XXX條用例,發現了XXX個bug。

我的自我介紹到此結束/就這麼多,面試官,您看有什麼需要我補充的,或者您想要知道更詳細的的?

以上內容大家喜歡的話,可以收藏一下哦!說不定有用呢?

簡歷模板

測試工程師面試時要注意什麼?

測試工程師面試時要注意什麼?

下面在附上一份軟體測試面試題資源,逆襲大廠必備

測試工程師面試時要注意什麼?

測試工程師面試時要注意什麼?

測試工程師面試時要注意什麼?

需要的朋友們可以私信“資料"免費領取,或點選連結直接獲取

《軟體測試全套基礎/進階/轉行資料》

測試工程師面試時要注意什麼?2022-06-18 10:57:30

軟體的生命週期(prdctrm)

計劃階段(planning)-〉需求分析(requirement)-〉設計階段(design)-〉編碼(coding)->測試(testing)->執行與維護(running maintrnacne)

測試用例

用例編號 測試專案 測試標題 重要級別 預置條件 輸入資料 執行步驟 預期結果

1、問:你在測試中發現了一個bug,但是開發經理認為這不是一個bug,你應該怎樣解決?

首先,將問題提交到缺陷管理庫裡面進行備案。

然後,要獲取判斷的依據和標準:

根據需求說明書、產品說明、設計文件等,確認實際結果是否與計劃有不一致的地方,提供缺陷是否確認的直接依據;

如果沒有文件依據,可以根據類似軟體的一般特性來說明是否存在不一致的地方,來確認是否是缺陷;

根據使用者的一般使用習慣,來確認是否是缺陷;

與設計人員、開發人員和客戶代表等相關人員探討,確認是否是缺陷;

合理的論述,向測試經理說明自己的判斷的理由,注意客觀、嚴謹,不參雜個人情緒。

等待測試經理做出最終決定,如果仍然存在爭議,可以透過公司政策所提供的渠道,向上級反映,並有上級做出決定。

2、問:給你一個網站,你如何測試?

首先,查詢需求說明、網站設計等相關文件,分析測試需求。

制定測試計劃,確定測試範圍和測試策略,一般包括以下幾個部分:功能性測試;介面測試;效能測試;資料庫測試;安全性測試;相容性測試

設計測試用例:

功能性測試可以包括,但不限於以下幾個方面:

連結測試。連結是否正確跳轉,是否存在空頁面和無效頁面,是否有不正確的出錯資訊返回。

提交功能的測試。

多媒體元素是否可以正確載入和顯示。

多語言支援是否能夠正確顯示選擇的語言等。

介面測試可以包括但不限於一下幾個方面:

頁面是否風格統一,美觀

頁面佈局是否合理,重點內容和熱點內容是否突出

控制元件是否正常使用

對於必須但未安裝的控制元件,是否提供自動下載並安裝的功能

文字檢查

效能測試一般從以下兩個方面考慮:

壓力測試;負載測試;強度測試

資料庫測試要具體決定是否需要開展。資料庫一般需要考慮連結性,對資料的存取操作,資料內容的驗證等方面。

安全性測試:

基本的登入功能的檢查

是否存在溢位錯誤,導致系統崩潰或者許可權洩露

相關開發語言的常見安全性問題檢查,例如SQL注入等

如果需要高階的安全性測試,確定獲得專業安全公司的幫助,外包測試,或者獲取支援

相容性測試,根據需求說明的內容,確定支援的平臺組合:

瀏覽器的相容性;

作業系統的相容性;

軟體平臺的相容性;

資料庫的相容性

開展測試,並記錄缺陷。合理的安排調整測試進度,提前獲取測試所需的資源,建立管理體系(例如,需求變更、風險、配置、測試文件、缺陷報告、人力資源等內容)。

定期評審,對測試進行評估和總結,調整測試的內容。

3、在搜尋引擎中輸入漢字就可以解析到對應的域名,請問如何用LoadRunner進行測試。

建立測試計劃,確定測試標準和測試範圍

設計典型場景的測試用例,覆蓋常用業務流程和不常用的業務流程等

根據測試用例,開發自動測試指令碼和場景:

錄製測試指令碼:新建一個指令碼(Web/HTML協議);點選錄製按鈕,在彈出的對話方塊的URL中輸入”about:blank”;在開啟的瀏覽器中進行正常操作流程後,結束錄製;除錯指令碼並儲存,可能要注意到字符集的關聯。

設定測試場景:針對性能設定測試場景,主要判斷在正常情況下,系統的平均事務響應時間是否達標;針對壓力負載設定測試場景,主要判斷在長時間處於滿負荷或者超出系統承載能力的條件下,系統是否會崩潰;執行測試,獲取測試結果,分析測試結果

4、問:一臺客戶端有三百個客戶與三百個客戶端有三百個客戶對伺服器施壓,有什麼區別?

300個使用者在一個客戶端上,會佔用客戶機更多的資源,而影響測試的結果。執行緒之間可能發生干擾,而產生一些異常。

300個使用者在一個客戶端上,需要更大的頻寬。

IP地址的問題,可能需要使用IP Spoof來繞過伺服器對於單一IP地址最大連線數的限制。

所有使用者在一個客戶端上,不必考慮分散式管理的問題;而使用者分佈在不同的客戶端上,需要考慮使用控制器來整體調配不同客戶機上的使用者。同時,還需要給予相應的許可權配置和防火牆設定。

5、試述軟體的概念和特點?軟體複用的含義?構件包括哪些?

軟體是計算機系統中與硬體相互依存的另一部分,與計算機系統操作有關的計算機程式、規程、規則,以及可能有的檔案、文件及資料。

軟體複用(SoftWare Reuse)是將已有軟體的各種有關知識用於建立新的軟體,以縮減軟體開發和維護的花費。軟體複用是提高軟體生產力和質量的一種重要技術。早期的軟體複用主要是程式碼級複用,被複用的知識專指程式,後來擴大到包括領域知識、開發經驗、設計決定、體系結構、需求、設計、程式碼和文件等一切有關方面。

可以被複用的軟體成分一般稱作可複用構件

6、軟體生存週期及其模型是什麼?

軟體生存週期(Software life cycle)又稱為軟體生命期,生存期。是指從形成開發軟體概念起,所開發的軟體使用以後,知道失去使用價值消亡為止的整個過程。一般來說,整個生存週期包括計劃(定義)、開發、執行(維護)三個時期,每個時期又劃分為若干個階段。每個階段有明確的任務。

週期模型(典型的幾種):

瀑布模型

快速原型模型:快速原型模型允許在需求分析階段對軟體的需求進行初步而非完全的分析和定義,快速設計開發出軟體系統的原型,該原型向用戶展示待開發軟體的全部或部分功能和效能;使用者對該原型進行測試評定,給出具體改進意見以豐富細化軟體需求;開發人員據此對軟體進行修改完善,直至使用者滿意認可之後,進行軟體的完整實現及測試、維護。

迭代模型:迭代包括產生產品釋出(穩定、可執行的產品版本)的全部開發活動和要使用該釋出必需的所有其他外圍元素。在某種程度上,開發迭代是一次 完整地經過所有工作流程的過程:需求分析、設計、實施和測試工作流程。實質上,它類似小型的瀑布式專案。RUP認為,所有的階段都可以細分為迭代。每一次 的迭代都會產生一個可以釋出的產品,這個產品是最終產品的一個子集。

生命週期階段:

軟體計劃與可行性分析

需求分析

軟體設計

編碼

軟體測試

執行與維護

7、什麼是軟體測試?軟體測試的目的與原則

在規定的條件下對程式進行操作,以發現程式錯誤,衡量軟體質量,並對其是否能滿足設計要求進行評估的過程。

軟體測試的目的:

測試是程式的執行過程,目的在於發現錯誤

一個成功的測試用例在於發現至今未發現的錯誤

一個成功的測試是發現了至今未發現的錯誤的測試

確保產品完成了它所承諾或公佈的功能,並且使用者可以訪問到的功能都有明確的書面說明。

確保產品滿足效能和效率的要求

確保產品是健壯的和適應使用者環境的

軟體測試的原則:

測試用例中一個必須部分是對預期輸出或接過進行定義

程式設計師應避免測試自己編寫的程式

編寫軟體的組織不應當測試自己編寫的軟體

應當徹底檢查每個測試的執行結果

測試用例的編寫不僅應當根據有效和預料到的輸入情況,而且也應當根據無效和未預料到的輸入情況

檢擦程式是否“未做其應該做的”僅是測試的一半,測試的另一半是檢查程式是否“做了其不應該做的”

應避免測試用例用後即棄,除非軟體本身就是個一次性的軟體

計劃測試工作時不應默許假定不會發現錯誤

程式某部分存在更多錯誤的可能性,與該部分已經發現錯誤的數量成正比

軟體測試是一項極富創造性,極具智力的挑戰性的工作

8、軟體配置管理的作用?軟體配置包括什麼?

軟體配置管理(Software Configuration Management,SCM)是一種標識、組織和控制修改的技術。軟體配置管理應用於整個軟體工程過程。在軟體建立時變更是不可避免的,而變更加劇了專案中軟體開發者之間的混亂。SCM活動的目標就是為了標識變更、控制變更、確保變更正確實現並向其他有關人員報告變更。從某種角度講,SCM是一種標識、組織和控制修改的技術,目的是使錯誤降為最小並最有效地提高生產效率。

軟體配置包括如下內容:配置項識別、工作空間管理、版本控制、變更控制、狀態報告、配置審計

9、什麼是軟體質量?

概括地說,軟體質量就是“軟體與明確的和隱含的定義的需求相一致的程度”。具體地說,軟體質量是軟體符合明確敘述的功能和效能需求、文件中明確描述 的開發標準、以及所有專業開發的軟體都應具有的隱含特徵的程度。 影響軟體質量的主要因素,這些因素是從管理角度對軟體質量的度量。可劃分為三組,分別反應使用者在使用軟體產品時的三種觀點。正確性、健壯性、效率、完整性、可用性、風險(產品執行);可理解性、可維修性、靈活性、可測試性(產品修改);可移植性、可再用性、互執行性(產品轉移)。

10、目前主要的測試用例設計方法是什麼?

白盒測試:邏輯覆蓋、迴圈覆蓋、基本路徑覆蓋

黑盒測試:邊界值分析法、等價類劃分、錯誤猜測法、因果圖法、狀態圖法、測試大綱法、隨機測試、場景法

11、軟體的安全性應從哪幾個方面去測試?

軟體安全性測試包括程式、資料庫安全性測試。根據系統安全指標不同測試策略也不同。

使用者認證安全的測試要考慮問題: 明確區分系統中不同使用者許可權 、系統中會不會出現使用者衝突 、系統會不會因使用者的許可權的改變造成混亂 、使用者登陸密碼是否是可見、可複製 、是否可以透過絕對途徑登陸系統(複製使用者登陸後的連結直接進入系統)、使用者退出系統後是否刪除了所有鑑權標記,是否可以使用後退鍵而不透過輸入口令進入 系統 、系統網路安全的測試要考慮問題 、測試採取的防護措施是否正確裝配好,有關係統的補丁是否打上 、模擬非授權攻擊,看防護系統是否堅固 、採用成熟的網路漏洞檢查工具檢查系統相關漏洞(即用最專業的駭客攻擊工具攻擊試一下,現在最常用的是 NBSI 系列和 IPhacker IP ) 、採用各種木馬檢查工具檢查系統木馬情況 、採用各種防外掛工具檢查系統各組程式的外掛漏洞

資料庫安全考慮問題: 系統資料是否機密(比如對銀行系統,這一點就特別重要,一般的網站就沒有太高要求)、系統資料的完整性(我剛剛結束的企業實名核查服務系統中就曾存在資料 的不完整,對於這個系統的功能實現有了障礙) 、系統資料可管理性 、系統資料的獨立性 、系統資料可備份和恢復能力(資料備份是否完整,可否恢復,恢復是否可以完整)

12、什麼是測試用例 什麼是測試指令碼 兩者的關係是什麼?

為實施測試而向被測試系統提供的輸入資料、操作或各種環境設定以及期望結果的一個特定的集合。

測試指令碼是為了進行自動化測試而編寫的指令碼。

測試指令碼的編寫必須對應相應的測試用例

13、簡述什麼是靜態測試、動態測試、黑盒測試、白盒測試、α測試 β測試

靜態測試是不執行程式本身而尋找程式程式碼中可能存在的錯誤或評估程式程式碼的過程。

動態測試是實際執行被測程式,輸入相應的測試例項,檢查執行結果與預期結果的差異,判定執行結果是否符合要求,從而檢驗程式的正確性、可靠性和有效性,並分析系統執行效率和健壯性等效能。

黑盒測試一般用來確認軟體功能的正確性和可操作性,目的是檢測軟體的各個功能是否能得以實現,把被測試的程式當作一個黑盒,不考慮其內部結構,在知道該程式的輸入和輸出之間的關係或程式功能的情況下,依靠軟體規格說明書來確定測試用例和推斷測試結果的正確性。

白盒測試根據軟體內部的邏輯結構分析來進行測試,是基於程式碼的測試,測試人員透過閱讀程式程式碼或者透過使用開發工具中的單步除錯來判斷軟體的質量,一般黑盒測試由專案經理在程式設計師開發中來實現。

α測試是由一個使用者在開發環境下進行的測試,也可以是公司內部的使用者在模擬實際操作環境下進行的受控測試,Alpha測試不能由程式設計師或測試員完成。

β測試是軟體的多個使用者在一個或多個使用者的實際使用環境下進行的測試。開發者通常不在測試現場,Beta測試不能由程式設計師或測試員完成。

14、軟體質量保證體系是什麼 國家標準中與質量保證管理相關的幾個標準是什麼?他們的編號和全稱是什麼?

SQA由一套軟體工程過程和方法組成,以保證(軟體的)質量。SQA貫穿整個軟體開發過程,(它)應包括需求文件評審、程式碼控制、程式碼評審、變更管理、配置管理、版本管理和軟體測試。

軟體質量保證(SQA-Software Quality Assurance)是建立一套有計劃,有系統的方法,來向管理層保證擬定出的標準、步驟、實踐和方法能夠正確地被所有專案所採用。軟體質量保證的目的是使軟體過程對於管理人員來說是可見的。它透過對軟體產品和活動進行評審和審計來驗證軟體是合乎標準的。軟體質量保證組在專案開始時就一起參與建立計劃、標準和過程。這些將使軟體專案滿足機構方針的要求。

15、軟體產品質量特性是什麼?

功能性:適應性、準確性、互操作性、依從性、安全性。

可靠性:成熟性、容錯性、易恢復性。

可使用性:易理解性、易學習性、易操作性。

效率:時間特性、資源特性。

可維護性:易分析性、易變更性、穩定性、易測試性。

可移植性: 適應性、易安裝性、遵循性、易替換性

16、軟體測試的策略是什麼?

軟體測試策略:在一定的軟體測試標準、測試規範的指導下,依據測試專案的特定環境約束而規定的軟體測試的原則、方式、方法的集合。

17、軟體測試分為幾個階段 各階段的測試策略和要求是什麼?

和開發過程相對應,測試過程會依次經歷單元測試、整合測試、系統測試、驗收測試四個主要階段:

單元測試:單元測試是針對軟體設計的最小單位––程式模組甚至程式碼段進行正確性檢驗的測試工作,通常由開發人員進行。

整合測試:整合測試是將模組按照設計要求組裝起來進行測試,主要目的是發現與介面有關的問題。由於在產品提交到測試部門前,產品開發小組都要進行聯合除錯,因此在大部分企業中整合測試是由開發人員來完成的。

系統測試:系統測試是在整合測試通過後進行的,目的是充分執行系統,驗證各子系統是否都能正常工作並完成設計的要求。它主要由測試部門進行,是測試部門最大最重要的一個測試,對產品的質量有重大的影響。

驗收測試:驗收測試以需求階段的《需求規格說明書》為驗收標準,測試時要求模擬實際使用者的執行環境。對於實際專案可以和客戶共同進行,對於產品來說就是最後一次的系統測試。測試內容為對功能模組的全面測試,尤其要進行文件測試。

單元測試測試策略:

自頂向下的單元測試策略:比孤立單元測試的成本高很多,不是單元測試的一個好的選擇。

自底向上的單元測試策略:比較合理的單元測試策略,但測試周期較長。

孤立單元測試策略:最好的單元測試策略。

整合測試的測試策略:

大爆炸整合:適應於一個維護型專案或被測試系統較小

自頂向下整合:適應於產品控制結構比較清晰和穩定;高層介面變化較小;底層介面未定義或經常可能被修改;產口控制組件具有較大的技術風險,需要儘早被驗證;希望儘早能看到產品的系統功能行為。

自底向上整合:適應於底層介面比較穩定;高層介面變化比較頻繁;底層元件較早被完成。

基於進度的整合

優點:具有較高的並行度;能夠有效縮短專案的開發進度。

缺點:樁和驅動工作量較大;有些介面測試不充分;有些測試重複和浪費。

系統測試的測試策略:

資料和資料庫完整性測試;功能測試;使用者介面測試;效能評測;負載測試;強度測試;容量測試;安全性和訪問控制測試;故障轉移和恢復測試;配置測試;安裝測試;加密測試;可用性測試;版本驗證測試;文件測試

18、軟體測試各個階段通常完成什麼工作?各個階段的結果檔案是什麼?包括什麼內容?

單元測試階段:各獨立單元模組在與系統地其他部分相隔離的情況下進行測試,單元測試針對每一個程式模組進行正確性校驗,檢查各個程式模組是否正確地實現了規定的功能。生成單元測試報告,提交缺陷報告。

整合測試階段:整合測試是在單元測試的基礎上,測試在將所有的軟體單元按照概要設計規格說明的要求組裝成模組、子系統或系統的過程中各部分工作是否達到或實現相應技術指標及要求的活動。該階段生成整合測試報告,提交缺陷報告。

系統測試階段:將透過確認測試的軟體,作為整個給予計算機系統的一個元素,與計算機硬體、外設、某些支援軟體、資料和人員等其他系統元素結合在一起,在實際執行環境下,對計算機系統進行全面的功能覆蓋。該階段需要提交測試總結和缺陷報告。

19、測試人員在軟體開發過程中的任務是什麼?

1、儘可能早的找出系統中的Bug;

2、避免軟體開發過程中缺陷的出現;

3、衡量軟體的品質,保證系統的質量;

4、關注使用者的需求,並保證系統符合使用者需求。

總的目標是:確保軟體的質量。

20、在您以往的工作中,一條軟體缺陷(或者叫Bug)記錄都包含了哪些內容?如何提交高質量的軟體缺陷(Bug)記錄?

一條Bug記錄最基本應包含:

bug編號;

bug嚴重級別,優先順序;

bug產生的模組;

首先要有bug摘要,闡述bug大體的內容;

bug對應的版本;

bug詳細現象描述,包括一些截圖、錄影。。。。等等;

bug出現時的測試環境,產生的條件即對應操作步驟;

高質量的Bug記錄:

1) 通用UI要統一、準確

缺陷報告的UI要與測試的軟體UI保持一致,便於查詢定位。

2) 儘量使用業界慣用的表達術語和表達方法

使用業界慣用的表達術語和表達方法,保證表達準確,體現專業化。

3) 每條缺陷報告只包括一個缺陷

每條缺陷報告只包括一個缺陷,可以使缺陷修正者迅速定位一個缺陷,集中精力每次只修正一個缺陷。校驗者每次只校驗一個缺陷是否已經正確修正。

4) 不可重現的缺陷也要報告

首先缺陷報告必須展示重現缺陷的能力。不可重現的缺陷要盡力重現,若盡力之後仍不能重現,仍然要報告此缺陷,但在報告中要註明無法再現,缺陷出現的頻率。

5) 明確指明缺陷型別

根據缺陷的現象,總結判斷缺陷的型別。例如,即功能缺陷、介面缺陷、資料缺陷,合理化建議這是最常見的缺陷或缺陷型別,其他形式的缺陷或缺陷也從屬於其中某種形式。

6) 明確指明缺陷嚴重等級和優先等級

時刻明確嚴重等級和優先等級之間的差別。高嚴重問題可能不值得解決,小裝飾性問題可能被當作高優先順序。

7) 描述 (Description) ,簡潔、準確,完整,揭示缺陷實質,記錄缺陷或缺陷出現的位置

描述要準確反映缺陷的本質內容,簡短明瞭。為了便於在軟體缺陷管理資料庫中尋找制定的測試缺陷,包含缺陷發生時的使用者介面(UI)是個良好的習慣。例如記錄對話方塊的標題、選單、按鈕等控制元件的名稱。

8) 短行之間使用自動數字序號,使用相同的字型、字號、行間距

短行之間使用自動數字序號,使用相同的字型、字號、行間距,可以保證各條記錄格式一致,做到規範專業。

9) 每一個步驟儘量只記錄一個操作

保證簡潔、條理井然,容易重複操作步驟。

10) 確認步驟完整,準確,簡短

保證快速準確的重複缺陷,“完整”即沒有缺漏,“準確”即步驟正確,“簡短”即沒有多餘的步驟。

11) 根據缺陷,可選擇是否進行圖象捕捉

為了直觀的觀察缺陷或缺陷現象,通常需要附加缺陷或缺陷出現的介面,以圖片的形式作為附件附著在記錄的“附件”部分。為了節省空間,又能真實反映缺陷或缺陷本質,可以捕捉缺陷或缺陷產生時的全螢幕,活動視窗和區域性區域。為了迅速定位、修正缺陷或缺陷位置,通常要求附加中文對照圖。

 附加必要的特殊文件和個人建議和註解

如果開啟某個特殊的文件而產生的缺陷或缺陷,則必須附加該文件,從而可以迅速再現缺陷或缺陷。有時,為了使缺陷或缺陷修正者進一步明確缺陷或缺陷的表現,可以附加個人的修改建議或註解。

12) 檢查拼寫和語法缺陷

在提交每條缺陷或缺陷之前,檢查拼寫和語法,確保內容正確,正確的描述缺陷。

13) 儘量使用短語和短句,避免複雜句型句式

軟體缺陷管理資料庫的目的是便於定位缺陷,因此,要求客觀的描述操作步驟,不需要修飾性的詞彙和複雜的句型,增強可讀性。

以上概括了報告測試缺陷的規範要求,隨著軟體的測試要求不同,測試者經過長期測試,積累了相應的測試經驗,將會逐漸養成良好的專業習慣,不斷補充新的規範書寫要求。此外,經常閱讀、學習其他測試工程師的測試缺陷報告,結合自己以前的測試缺陷報告進行對比和思考,可以不斷提高技巧。

14) 缺陷描述內容

缺陷描述的內容可以包含缺陷操作步驟,實際結果和期望結果。操作步驟可以方便開發人員再現缺陷進行修正,有些開發的再現缺陷能力很差,雖然他明白你所指的缺陷,但就是無法再現特別是對系統不熟悉的新加入開發人員,介紹步驟可以方便他們再現。實際結果可以讓開發明白錯誤是什麼,期望結果可以讓開發瞭解正確的結果應該是如何。

測試工程師面試時要注意什麼?2022-08-01 21:42:04

蘭瑟作為一個已經工作有4年經驗的測試工程師,其間也輾轉了幾個大的網際網路公司,雖然確實缺少了一些穩定性,但同時也積累了一些面試的經驗,不才分享一些給大家。那麼主要是針對測試工程師的一些總結,對於其他的工種,我可能會在別的文章中去總結一些面試技巧,本文會著重於測試工程師的面經。

測試的面試重點分為兩大部分:

技術,專案

擴充一下:技術的一些注意點,專案上的一些處理方式(有些還會有一些溝通上的小技巧),可能不會寫的特別詳細,但點我都會點到,後續會再繼續補充(

近3萬字的長文預警,希望能幫助到各位網際網路的孩子們

那麼直接上貨,希望能幫助到各位同行,或者不是同行卻也能激發起你們的靈感的夥伴們~

一.黑盒測試方法(可能會問等價類的分類,等價類和邊界值是最重要的:

1、等價類劃分:

(有效等價類:對於程式規格說明來說,是合理的,有意義的輸入資料構成的集合)

(無效等價類:對於程式規格說明來說,是不合理的,無意義的輸入資料構成的集合)

2、邊界值分析方法

3、因果圖方法

4、正交實驗設計方法

5、功能圖分析方法

6、錯誤推測法

7、需求文件轉化法

8、隨機測試

9、物件屬性分析法

二.白盒測試方法(可以選擇性記憶....不知道會不會問):

1。語句覆蓋:就是設計若干個測試用例,執行被測程式,使得每一可執行語句至少執行一次。

2。判定覆蓋:使設計的測試用例保證程式中每個判斷的每個取值分支至少經歷一次。

3。條件覆蓋:條件覆蓋是指選擇足夠的測試用例,使得執行這些測試用例時,判定中每個條件的所有可能結果至少出現一次,但未必能覆蓋全部分支

4。判定條件覆蓋:判定-條件覆蓋就是設計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執行一次,同時每個判斷的所有可能判斷結果至少執行,即要求各個判斷的所有可能的條件取值組合至少執行一次。

5。條件組合覆蓋:在白盒測試法中,選擇足夠的測試用例,使所有判定中各條件判斷結果的所有組合至少出現一次,滿足這種覆蓋標準成為條件組合覆蓋。

6。路徑覆蓋:是每條可能執行到的路徑至少執行一次。

補充:

(1)語句覆蓋在所有的測試方法中是一種最弱的覆蓋。

(2)判定覆蓋和條件覆蓋比語句覆蓋強,滿足判定/條件覆蓋標準的測試用例一定也滿足判定覆蓋、條件覆蓋和語句覆蓋

(3)路徑覆蓋也是一種比較強的覆蓋,但未必考慮判定條件結果的組合,並不能代替條件覆蓋和條件組合覆蓋。

三.TCP/IP分層協議(每層的協議要注意):

1。鏈路層(資料鏈路層/網路介面層):包括作業系統中的裝置驅動程式、計算機中對應的網路介面卡

2。網路層(網際網路層):處理分組在網路中的活動,比如分組的選路。

3。運輸層:主要為兩臺主機上的應用提供端到端的通訊。

4。應用層:負責處理特定的應用程式細節。

TCP和UDP的區別(網路上的知識點):

1、TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線

2、TCP提供可靠的服務。也就是說,透過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付

3、TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的

UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時影片會議等)

4、每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊

5、TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組

6、TCP的邏輯通訊通道是全雙工的可靠通道,UDP則是不可靠通道

四.TCP/IP三次握手,四次揮手(常問項)

三次握手:

第一次握手(SYN=1,seq=x):

客戶端傳送一個TCP的SYN標誌位置1的包,指明客戶端打算連線的伺服器的埠,以及初始序號X,儲存在包頭的序列號(Sequence Number)欄位裡。

第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1):

伺服器發回確認包(ACK)應答。即SYN標誌位和ACK標誌位均為1。伺服器端選擇自己的ISN序列號,放在seq域裡,同時將確認序號(Acknowledgement Number)設定為客戶的ISN加1,即X+1。傳送完畢後,伺服器端進入SYN_RCVD狀態。

第三次握手(ACK=1,ACKnum=y+1):

客戶端再次傳送確認包(ACK),SYN標誌位為0,ACK標誌位為1,並且把伺服器發來ACK的序號欄位+1,放在確定欄位中傳送給對方,並且在資料段放寫ISN的+1。

傳送完畢後,客戶端進入ESTABLISHED狀態,當伺服器端收到這個包時,也進入ESTABLISHED狀態,TCP握手結束,TCP連線建立完成

我的理解。。。。:

A問B:你聽到了麼,發確認資訊

B回答A:聽到了,告訴A它能接收到A的訊息

A再回B:我能接收到你的訊息,再發一次確認 ,然後建立連線

四次揮手:

第一次揮手(FIN=1,seq=x):

假設客戶端想要關閉連線,客戶端傳送一個FIN標誌位置為1的包,表示自己已經沒有資料可以傳送了,但是仍然可以接收資料。

傳送完畢之後,客戶端進入FIN_WAIT_1狀態。

第二次揮手(ACK=1,ACKnum=x+1):

伺服器端確認客戶端的FIN包,傳送一個確認包,表明自己接收到了客戶端關閉連線的請求,但還沒有準備好關閉連線。

傳送完畢後,伺服器端進入CLOSE_WAIT狀態,客戶端接收到這個確認包之後進入FIN_WAIT_2狀態,等待伺服器端關閉連線。

第三次揮手(FIN=1,seq=y):

伺服器端準備好關閉連線時,向客戶端傳送結束連線請求,FIN置為1。

傳送完畢後,伺服器端進入LAST_ACK狀態,等待來自客戶端的最後一個ACK

第四次揮手(ACK=1,ACKnum=y+1):

客戶端接收到來自伺服器的端的關閉請求,傳送一個確認包,並進入TIME_WAIT狀態,等待可能出現的要重傳的ACK包。

伺服器端接收到這個確認包之後,關閉連線,進入CLOSED狀態。

客戶端等待了某個固定時間(兩個最大段生命週期,2MSL,2Maximum Segment Lifetime)之後,沒有收到伺服器端的ACK,認為伺服器端已經正常關閉連線,於是自己也關閉連線,進入CLOSED狀態。

為什麼是三次,不是兩次或者四次(這個問題真的可能會被問到)

兩次握手並不能保證可靠性(B不確定A能收到自己的資訊),四次握手又浪費了效率

五.OSI七層模型(記一記應用層,傳輸層,網路層我覺得就可以了....)

六. DNS(執行在UDP協議上,埠53)

概念:dns是一個域名系統,是全球資訊網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串

七:http協議(https://www.cnblogs.com/ranyonsue/p/5984001.html細緻的大家可以閱讀這一篇)

restful介面:

1.URI資源 2.表現:XML,HTML等格式 3.狀態轉移:get,post等

HTTP:是網際網路上應用最為廣泛的一種網路協議,是一個客戶端和伺服器端請求和應答的標準(TCP),用於從WWW伺服器傳輸超文字到本地瀏覽器的傳輸協議,它可以使瀏覽器更加高效,使網路傳輸減少

HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

HTTP和HTTPS區別:(這個還挺重要的,埠號稍微記一下)

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。

2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。

4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

HTTP協議特點:

1。支援客戶/伺服器模式。

2。簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。

3。靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type(Content-Type是HTTP包中用來表示內容型別的標識)加以標記。

4。無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

5。無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

HTTP原理:

1、客戶端連線到Web伺服器

一個HTTP客戶端,通常是瀏覽器,與Web伺服器的HTTP埠(預設為80)建立一個TCP套接字連線。

2、傳送HTTP請求

透過TCP套接字,客戶端向Web伺服器傳送一個文字的請求報文,一個請求報文由請求行、請求頭部、空行和請求資料4部分組成。

3、伺服器接受請求並返回HTTP響應

Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應資料4部分組成。

4、釋放連線TCP連線

若connection 模式為close,則伺服器主動關閉TCP連線,客戶端被動關閉連線,釋放TCP連線;若connection 模式為keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求;

5、客戶端瀏覽器解析HTML內容

客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態程式碼。然後解析每一個響應頭,響應頭告知以下為若干位元組的HTML文件和文件的字符集。客戶端瀏覽器讀取響應資料HTML,根據HTML的語法對其進行格式化,並在瀏覽器視窗中顯示。

GET和POST請求的區別(個人感覺這個是要了解的):

1。GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditPosts。aspx?name=test1&id=123456。 POST方法是把提交的資料放在HTTP包的Body中。

2。GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制。

3。GET方式需要使用Request。QueryString來取得變數的值,而POST方式透過Request。Form來獲取變數的值。

4。GET方式提交資料,會帶來安全問題,比如一個登入頁面,透過GET方式提交資料時,使用者名稱和密碼將出現在URL上,如果頁面可以被快取或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該使用者的賬號和密碼。

狀態碼:

1xx:指示資訊——表示請求已接收,繼續處理

2xx:成功——表示請求已被成功接收、理解、接受

3xx:重定向——要完成請求必須進行更進一步的操作

4xx:客戶端錯誤——請求有語法錯誤或請求無法實現

5xx:伺服器端錯誤——伺服器未能實現合法的請求

常見狀態碼:

200 OK //客戶端請求成功

400 Bad Request //客戶端請求有語法錯誤,不能被伺服器所理解

403 Forbidden //伺服器收到請求,但是拒絕提供服務

404 Not Found //請求資源不存在,eg:輸入了錯誤的URL

500 Internal Server Error //伺服器發生不可預期的錯誤

503 Server Unavailable //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常

八:TestNG(這個我自己用過,感興趣也可以看看) testng傳參方式(parameter在testng.xml 或者透過dataprovider)

執行方式:1。Run as 2。testng。xml

按順序執行:preserve-order=true

忽略測試:

@

Test(enable=false)

分組測試:

@

Test(groups=。。)

依賴測試:

@

Test(dependsonmethods=。。。)

結果在oup-put,日誌級別是verbose

併發執行用例:parallel=methods

九:appium(可以稍稍瞭解,和selenium異曲同工,有些點我覺得是UI自動化想通的)

特點(為什麼流行我覺得):

跨平臺,native hybrid webview(H5)

跨裝置,android iOS

跨app,可以在多個app之間互動

不依賴APP開原始碼(保留意見,android Uiautomator對H5的支援需要程式碼支援,這裡不細說)

支援Selenium WebDriver / Selenium Grid

跨語言,java python ruby nodejs

Open Source 原理: Android

1。左邊的WebDriver script是我們的selenium測試指令碼(其實就是測試程式碼)

2。中間是起的Appium的服務,Appium在這邊起了一個Server(4723埠),跟selenium

Webdriver測試框架類似,Appium⽀支援標準的WebDriver JSONWireProtocol 。在這裡提供了一套web服務,Appium Server接收web driver 標準請求,解析請求內容,調⽤用對應的框架響應操作。

如:指令碼傳送一個點選按鈕的請求給appium server,

appium server會把請求轉發給中介軟體Bootstrap。jar ,它是用java寫的,安裝在手機上。 Bootstrap 接收appium 的命令(4724埠),最終透過調⽤用UiAutomator的命令來實現。4。最後執⾏行的結果由Bootstrap返回給appium server 5。另外,appium還用到了chromedriver來⽀支援基於H5(webview)的測試。IOS:

1。左邊的WebDriver script是selenium測試指令碼

2。中間是起的Appium的服務,Appium在這邊起了⼀一個Server(4723埠),跟selenium

Webdriver測試框架類似,Appium⽀支援標準的WebDriver JSONWireProtocol 。在這裡提供了一套web服務,Appium Server接收web driver 標準請求,解析請求內容,調⽤用對應的框架響應操作。

如:指令碼傳送一個點選按鈕的請求給appium server,

appium server呼叫instruments。js 啟動⼀一個socket server,同時分出⼀一個⼦子程序運⾏行instruments。app,將bootstrap。js(一個UIAutomation指令碼)注⼊入到device⽤用於和外界進⾏行互動。4。對於H5的操作,運⽤用了 iOS webkit debug proxy來實現 Android和IOS的區別我覺得就是bootstrap。jar和bootstrap。js去分別驅動uiautomator和uiautomation,新版本的Appium已經支援uiautomator2了,IOS支援XCUItest 定位元素方法(By後面那些東西,ID可以唯一定位): webdriver提供的用 By 定位元素 find_element(By。ID,“kw”) find_element(By。NAME,“wd”) find_element(By。CLASS_NAME,“s_ipt”) find_element(By。TAG_NAME,“input”) find_element(By。LINK_TEXT,u“新聞”) find_element(By。PARTIAL_LINK_TEXT,u“新”) find_element(By。XPATH,“//*[

@

class=‘bg s_btn’]”) find_element(By。CSS_SELECTOR,“span。bg s_btn_wr>input#su”) find_element()方法只用於定位元素。它需要兩個引數,第一個引數是定位方式,這個由 By 提供;另第二個引數是定位的值。

十. linux常用命令(我覺得比較可能問的多的)

Cd:切換目錄

當前目錄和上層目錄:。/ 。。/

主目錄:~/

檢視當前路徑:pwd

清屏:clear

退出當前命令:ctrl+c 徹底退出

軟連結:ln -s slink source

查詢自己所在的終端資訊:who am i

檢視當前誰在使用該主機:who

ls -l (也可以直接 ll ) :列出長資料串,包含檔案的屬性與許可權資料等

ls -a :列出全部的檔案,連同隱藏檔案(開頭為。的檔案)一起列出來(常用)

find -name 檔名 :找匹配的檔名

mkdir :建立指定的名稱的目錄

cp -a file1 file2 :連同檔案的所有特性把檔案file1複製成檔案file2

cp file1 file2 file3 dir :把檔案file1、file2、file3複製到目錄dir中

mv file1 file2 file3 dir : 把檔案file1、file2、file3移動到目錄dir中

mv file1 file2 : 把檔案file1重新命名為file2

rm -fr dir : 強制刪除目錄dir中的所有檔案

ps -ef|grep java :找出所有java程序

kill -9 程序號 :徹底殺死某個程序

chmod 改變檔案的許可權

語法:chmod [options] mode files

多數用三位八進位制數字的形式來表示許可權,第一位指定屬主的許可權,第二位指定組許可權,第三位指定其他使用者的許可權,每位透過4(讀)、2(寫)、1(執行)三種數值的和來確定許可權。如6(4+2)代表有讀寫權,7(4+2+1)有讀、寫和執行的許可權

chmod u+x file :給file的屬主增加執行許可權

vi :檔名 #編輯方式檢視,可修改

cat :檔名 #顯示全部檔案內容

more :檔名 #分頁顯示檔案內容

less :檔名 #與 more 相似,更好的是可以往前翻頁

head :檔名 #僅檢視頭部,還可以指定行數

tail -f 20160921。logs :檢視正在改變的日誌檔案

tail -3000 catalina。out:檢視倒數前3000行的資料

history:檢視用過的命令列表

df -hl:檢視磁碟使用空間

which :只能查可執行檔案

whereis :只能查二進位制檔案、說明文件,原始檔等

du :顯示目錄或檔案的大小

df :顯示每個<檔案>所在的檔案系統的資訊,預設是顯示所有檔案系統

df 命令獲得真正的檔案系統資料,而 du 命令只檢視檔案系統的部分情況

bash shell 的內建命令let 可以進行整型數的數學運算

free:顯示系統當前記憶體的使用情況,包括已用記憶體、可用記憶體和交換記憶體的情況

top:顯示當前系統中佔用資源最多的一些程序

netstat -anp|grep port:檢視某埠是否被佔用

chown -R:更改某個檔案或目錄的屬主和屬組

Shift + PageUp:翻頁

清空檔案:echo “” > filename 或者cat /dev/null > a。txt 或者>a。txt

Linux統計檔案中出現的次數:

(1) 單個字串:grep -o targetstr filename | wc -l

多個字串:grep -o “targetstr_1\targetstr_2”filename | wc -l

(2) awk ‘{s+=gsub(/targetStr/,“&”)}END{print s}’ filename

Linux查詢某個檔案中的某個詞:

grep ‘test’a,b,c 在檔案a,b,c中尋找test這個詞

grep -r ‘test’ 。 #在當前目錄中找test這個詞

grep -r ‘test’ example #在example目錄中找test這個詞

wc -l filename: 檢視檔案裡有多少行

uniq testfile: 刪除一個檔案中重複都是行

sort testfile1 | uniq:刪除重複之後進行排序(次數的)

十一.Mysql(亂七八糟語句不寫了,寫點我覺得可能會被問到的)

授權語句:

grant select, insert, update, delete on testdb。* to common_user@‘%’

事務:

1。原子性:要麼全部完成,要麼不完成,若發生錯誤會進行回滾操作;

2。一致性:開始到結束後,資料庫完整性約束沒收到破壞;(實體完整性,參照完整性,使用者定義的完整性)

3。隔離性:事務與事務之間相隔離,序列化執行;

4。永續性:事務完成對資料的影響是永久的;

四個隔離:

1。髒讀

髒讀是指在一個事務處理過程裡讀取了另一個未提交的事務中的資料。

當一個事務正在多次修改某個資料,而在這個事務中這多次的修改都還未提交,這時一個併發的事務來訪問該資料,就會造成兩個事務得到的資料不一致。例如:使用者A向用戶B轉賬100元,對應SQL命令如下

update account set money=money+100 where name=’B’; (此時A通知B)

update account set money=money - 100 where name=’A’;

當只執行第一條SQL時,A通知B檢視賬戶,B發現確實錢已到賬(此時即發生了髒讀),而之後無論第二條SQL是否執行,只要該事務不提交,則所有操作都將回滾,那麼當B以後再次檢視賬戶時就會發現錢其實並沒有轉。

2。不可重複讀

不可重複讀是指在對於資料庫中的某個資料,一個事務範圍內多次查詢卻返回了不同的資料值,這是由於在查詢間隔,被另一個事務修改並提交了

3。虛讀(幻讀)

幻讀是事務非獨立執行時發生的一種現象。例如事務T1對一個表中所有的行的某個資料項做了從“1”修改為“2”的操作,這時事務T2又對這個表中插入了一行資料項,而這個資料項的數值還是為“1”並且提交給資料庫。而操作事務T1的使用者如果再檢視剛剛修改的資料,會發現還有一行沒有修改,其實這行是從事務T2中新增的,就好像產生幻覺一樣,這就是發生了幻讀

Serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。

Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。

Read committed (讀已提交):可避免髒讀的發生。

Read uncommitted (讀未提交):最低級別,任何情況都無法保證。

四種隔離級別最高的是Serializable級別,最低的是Read uncommitted級別,級別越高,執行效率就越低。

主鍵,外來鍵:

主鍵 :對錶中資料進行唯一標識的資料列的組合;不能缺失;不能空值;

外來鍵 :該列為另一表的主鍵

索引:

1。資料庫索引,是資料庫管理系統中一個排序的資料結構,以協助快速查詢、更新資料庫表中資料。索引的實現通常使用B樹及其變種B+樹

2。透過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性

CREATE INDEX index_name ON table_name(username(length));

建立索引的缺陷:

1。雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT,UPDATE和DELETE。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案

2。建立索引會佔用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在要給大表上建了多種組合索引,索引檔案會膨脹很寬

drop,delete與truncate的區別

drop直接刪掉表 truncate刪除表中資料,再插入時自增長id又從1開始 delete刪除表中資料,可以加where字句

一般而言,drop > truncate > delete

連接種類,區別:

Inner join,left join,right join,full join

分庫分表:

資料庫引擎:myisam和innodb,前者比較適合大量select,事務不安全;後者支援外來鍵,事務安全,,適合大量update,insert

十二.Jmeter

1。效能測試幾個概念

TPS:每秒鐘request/事務 數量

併發數:系統同時處理的request/事務數

響應時間:一般取平均響應時間

下面幾個概念可以看看

負載測試(Load Test):負載測試是一種效能測試,指資料在超負荷環境中執行,程式是否能夠承擔(通俗講我覺得就是到了拐點就停了,再往上指標也不會上漲)

壓力測試(Stress Test):壓力測試(又叫強度測試)也是一種效能測試,它在系統資源特別低的情況下軟體系統執行情況,目的是找到系統在哪裡失效以及如何失效的地方。

(1)穩定性壓力測試:在選定的壓力值下,長時間持續執行。透過這類壓力測試,可以考察各項效能指標是否在指定範圍內,有無記憶體洩漏、有無功能性故障等;

(2)破壞性壓力測試:在穩定性壓力測試中可能會出現一些問題,如系統性能明顯降低,但很難暴露出其真實的原因。透過破壞性不斷加壓的手段,往往能快速造成系統的崩潰或讓問題明顯的暴露出來

極限測試 Extreme testing:在過量使用者下的負載測試 Hammer testing:連續執行所有能做的操作

像一般效能測試可能會發現資料庫連線上的錯誤,程式碼的異常,也有可能是jmeter自身這個軟體有效能瓶頸

Jmeter-plugins-manager(一個外掛)

下載之後放到lib/ext下面,重啟,然後就如圖

1。其中Transaction per Second就是tps圖,Response Time Over Time 就是平均響應時間,方便實時觀察,而不是最後看檢視結果樹

2。一般短的壓測都是相同條件壓三次取平均值

3。一般很少會直接壓線上,所以會有一個線上和測試的機器引數對比,有一個倍數關係,測試環境做完壓測後再計算大概線上的結果

怎麼確定性能指標?

1。網際網路上對於使用者響應時間,有一個普遍的標準,2-5-10原則

2。1。5倍峰值作為參考+伺服器(記憶體,CPU等等)

jmeter怎麼用上一個介面的結果作為下一個介面的引數(使用Json extractor)-加分點

十三.測試用例設計

這一塊的東西我寫個大致的範圍。。。。

登陸模組

1。功能用例

2。相容性(app版本,作業系統版本,不同移動裝置解析度)

3。效能上(單使用者的響應時間,高併發,長時間多使用者登陸)

4。安全性(加密,SQL注入(透過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令),指令碼攻擊,多裝置登陸的互斥)

5。弱網(android 在fiddler下,ios透過自身的status ,下一章寫)

6。UI測試

7。可用性,易用性(全鍵盤輸入,enter,tab)

8。本地化(多語言)

還有很多,測試紙杯,電梯,購物車,支付功能(這都是我面試遇到過的)很多別的也可以考慮這些方面,反正都憑自身經驗吧~~

十四.弱網測試

1。IOS

IOS平臺,透過自帶的開發者選項 ——Network Link Conditioner, 簡單的模擬各種速度的網路

2。android

Fiddler :

1。先開啟網路模擬

2。開啟延遲

然後編輯指令碼

每上傳和下載1KB的資料要延遲多少秒

Charles:

延遲設定 ——選擇相應的網路延遲設定或者自定義延遲——開啟延遲即可

charles抓https的包:

1。安裝Charles

2。電腦安裝Charles證書(install charles root certificate)

3。手機安裝證書(install charles root certificate on a mobile device or a remote browser)

4。手機網頁輸入網址chls。pro/ssl後提示下載證書並信任(ios11開始需要手動信任描述檔案)

5。開始抓包

Charles設定Proxy

Proxy -> SSL Proxying Settings

6。把想要抓https包的站點新增到Proxy -> SSL Proxying Settings——include中即可

原理(

簡單說就是charles偽裝自己拿到CA證書後先從客戶端拿到公鑰,加密後給伺服器,伺服器再用用私鑰解密再返回響應給客戶端

):

(1)Charles攔截客戶端的請求,偽裝成客戶端向伺服器進行請求

(2)伺服器向“客戶端”(實際上是Charles)返回伺服器的CA證書

(3)Charles攔截伺服器的響應,獲取伺服器證書公鑰,然後自己製作一張證書,將伺服器證書替換後傳送給客戶端。(這一步,Charles拿到了伺服器證書的公鑰)

(4)客戶端接收到“伺服器”(實際上是Charles)的證書後,生成一個對稱金鑰,用Charles的公鑰加密,傳送給“伺服器”(Charles)

(5)Charles攔截客戶端的響應,用自己的私鑰解密對稱金鑰,然後用伺服器證書公鑰加密,傳送給伺服器。(這一步,Charles拿到了對稱金鑰)

(6)伺服器用自己的私鑰解密對稱金鑰,向“客戶端”(Charles)傳送響應

(7)Charles攔截伺服器的響應,替換成自己的證書後傳送給客戶端

十五.Fiddler(我覺得知道怎麼改資料的方式就行了)

打斷點和AutoResponder的區別,注意修改資料後請求超時導致客戶端不做請求

1、打斷點,是阻塞了請求,一直沒有結果返回,請求將線上程中一直存在,直到超時被踢出來。

2、AutoResponder返回404/502,這種情況是有結果返回的,代表請求也結束了,不會線上程中一直存在

fiddler抓https包:

(1)原理同charles,首先:給fiddler安裝certmaker外掛(然後重啟)

(2)Tools->Fiddler Options->HTTPS ,Actions-> Trust Root Certificate,彈框後安裝CA證書

安裝成功後可以透過Actions—>open windows certificate Manager 檢視安裝的證書

(3) 手機安裝Fiddler證書,開啟手機瀏覽器,在瀏覽器地址輸入代理伺服器IP和埠

點選之後安裝證書即可

十六.APP crash

1。crash常見的原因(空指標,記憶體洩漏,陣列越界,呼叫高版本API)

裝置碎片化:由於裝置極具多樣性,App在不同的裝置上可能有表現不同。

頻寬限制:頻寬不佳的網路對App所需的快速響應時間可能不夠。

網路的變化:不同網路間的切換可能會影響App的穩定性。

記憶體管理:可用記憶體過低,或非授權的記憶體位置的使用可能會導致App失敗。

使用者過多:連線數量過多可能會導致App崩潰。

程式碼錯誤:沒有經過測試的新功能,可能會導致App在生產環境中失敗。

(可能是java的UnChecked異常發生時,由於沒有相應的try…catch處理該異常物件,所以Java執行環境將會終止,程式將退出)

第三方服務:廣告或彈出螢幕可能會導致App崩潰。

2。App崩潰的測試用例設計:

驗證在有不同的螢幕解析度,作業系統和運營商的多個裝置上的App行為。

用新發布的作業系統版本驗證App的行為。

驗證在如隧道,電梯等網路質量突然改變的環境中的App行為。

透過手動網路從蜂窩更改到Wi-Fi ,或反過來,驗證App行為。

驗證在沒有網路的環境中的App行為。

驗證來電/簡訊和裝置特定的警報(如警報和通知)時的App行為。

透過改變裝置的方向,以不同的檢視模式,驗證App行為。

驗證裝置記憶體不足時的App行為。

透過用測試工具施載入荷驗證App行為。

十七.Git(命令為主)

簡單命令

git clone

git status 檢視倉庫狀態

git diff * 檢視X檔案修改了那些內容

git log 檢視歷史記錄

git reset –hard HEAD^ 回退到上一個版本

git reset ——hard HEAD~第幾個 如果想回退到第3個版本,使用git reset –hard HEAD~3

git branch 檢視本地所有的分支

git branch -a 檢視遠端所有的分支

git branch name 建立分支

git branch –d dev 刪除dev分支

git checkout –b dev 建立dev分支 並切換到dev分支上

git merge dev 在當前分支上合併dev分支代

提交程式碼三部曲哈哈哈:

git add * 把x檔案新增到暫存區去

git commit –m “*” 提交檔案 –m 後面的是註釋

git push

十八.Monkey(命令用到查就行了這個,要知道-p是指定包)

1。Monkey程式由Android系統自帶,使用Java語言寫成,在Android檔案系統中的存放路徑是:/sdk/sdk/tools/lib/monkey。jar

2。Monkey。jar程式是由一個名為“monkey”的Shell指令碼來啟動執行,shell指令碼在Android檔案系統中的存放路徑是:/sdk/sdk/tools/bin/monkey

adb shell monkey {+命令引數} Monkey 測試出現錯誤後,一般的分析步驟(我以前被問到過,當時一臉懵逼(´⊙ω⊙`)) 看Monkey的日誌 (注意第一個swith以及異常資訊等)

程式無響應的問題: 在日誌中搜索 “ANR”

崩潰問題:在日誌中搜索 “Exception” (如果出現空指標, NullPointerException) 肯定是有bug

十九.Tomcat(想不到啥,有可能會問問)

Tomcat的預設埠及修改(服務的部署新站點的時候就會改這個,要不然埠衝突)

1。找到Tomcat目錄下的conf資料夾

2。進入conf資料夾裡面找到server。xml檔案

3。開啟server。xml檔案

4。在server。xml檔案裡面找到下列資訊

將8080改成你想要的埠即可

Tomcat部署方式(服務的用的多的是2,有空可以稍微瞭解下,server。xml最下面就是第二點那種,如果我沒記錯的話哈哈~~)

1。直接把Web專案放在webapps下,Tomcat會自動將其部署

2。在server。xml檔案上配置節點,設定相關的屬性即可

3。透過Catalina來進行配置:進入到conf\Catalina\localhost檔案下,建立一個xml檔案,該檔案的名字就是站點的名字,編寫XML的方式來進行設定。

二十.排序演算法(單獨就列這個演算法吧,其他演算法先不用看了...因為這個是我印象最深的被問過最多的,可以看這篇,寫的很全https://blog.csdn.net/hellozhxy/article/details/79911867,冒泡尤為重要)

總結:

1。一些概念

穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面;

不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面;

內排序:所有排序操作都在記憶體中完成;

外排序:由於資料太大,因此把資料放在磁碟中,而排序透過磁碟和記憶體的資料傳輸才能進行;

時間複雜度:一個演算法執行所耗費的時間。

空間複雜度:執行完一個程式所需記憶體的大小。

2。排序分類 圖總結的挺好

(1)氣泡排序(你記住這個就行,一用百面通。。問的最多哈哈)

演算法描述:

1。比較相鄰的元素,如果第一個比第二個大,就交換它們兩個;

2。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;

3。針對所有的元素重複以上的步驟,除了最後一個;

重複步驟1~3,直到排序完成。

剩下的我就不寫這裡了,其實程式碼不懂也無所謂,我的經驗是一般描述一下這個演算法的過程就可以了,然後如果能寫出來肯定是最好的,還是看面試時候的具體情況~~

二十一.Java簡單知識點(我對java熟點,所以就寫寫java了~~,不過大同小異,本質一樣的,一些語法不同而已,可以抽空看看簡單的這些,還是有可能會問的)

1。面向物件的特徵

(1)抽象:抽象是將一類物件的共同特徵總結出來構造類的過程,包括資料抽象和行為抽象兩方面。抽象只關注物件有哪些屬性和行為,並不關注這些行為的細節是什麼。

(2)繼承:繼承是從已有類得到繼承資訊建立新類的過程。提供繼承資訊的類被稱為父類(超類、基類);得到繼承資訊的類被稱為子類(派生類)。

(3)封裝:通常認為封裝是把過程和資料包圍起來,對資料的訪問只能透過已定義的介面。面向物件的本質就是將現實世界描繪成一系列完全自治、封閉的物件。我們在類中編寫的方法就是對實現細節的一種封裝;我們編寫一個類就是對資料和資料操作的封裝。可以說,封裝就是隱藏一切可隱藏的東西,只向外界提供最簡單的程式設計介面(可以想想普通洗衣機和全自動洗衣機的差別,明顯全自動洗衣機封裝更好因此操作起來更簡單)。

(4)多型性:多型性是指允許不同子型別的物件對同一訊息作出不同的響應。簡單的說就是用同樣的物件引用呼叫同樣的方法但是做了不同的事情。多型性分為編譯時的多型性和執行時的多型性。執行時的多型性可以解釋為:當A系統訪問B系統提供的服務時,B系統有多種提供服務的方式,但一切對A系統來說都是透明的。

2。修飾符(範圍自上而下,看這個就夠了~

這個圖是一個完整的java程式,這樣應該好理解點。。子類我直介面述下:

3。java資料型別

4。JDK、JRE、JVM基本概念

JDK: Java Development kit Java 開發工具包

JRE: Java Runtime Environment Java 執行環境

JVM: Java virtual Machine Java 虛擬機器

5。Java程式編譯和執行的過程(瞭解下就好)

(1)Java編譯程式將Java源程式翻譯為JVM可執行程式碼——位元組碼,建立完原始檔之後,程式會先被編譯成 “。class” 檔案。

(2)在編譯好的java程式得到“。class”檔案後,使用命令java 執行這個 。class 檔案,系統就會啟動一個jvm程序,並找到主函式的入口,開始執行main函式。

http://

6。int

和Integer 的區別

Java為了程式設計的方便引入不是物件的基本資料型別,但是為了能夠將這些基本資料型別當成物件操作,Java為每一個基本資料型別都引入了對應的封裝型別(wrapper class),int的封裝類就是Integer,從JDK1。5開始引入了自動封箱/解封箱機制,使得二者可以相互轉換。

Java 為每個原始型別提供了封裝類:

原始型別: boolean,char,byte,short,int,long,float,double

封裝型別:Boolean,Character,Byte,Short,Integer,Long,Float,Double

7。值傳遞和引用傳遞的區別

值傳遞:值傳遞是將進行傳遞的值進行複製,然後對複製之後的值進行傳遞,傳遞過程前後不改變原值的大小;

引用傳遞:引用傳遞是將需要傳遞值的地址進行傳遞,傳遞過程前後會改變原值的大小。

8。過載(Overload)和重寫(Override)的區別

方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的引數列表,有相容的返回型別,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常。過載對返回型別沒有特殊的要求,不能根據返回型別進行區分

9。break 和continue的區別(迴圈裡面用到的關鍵字~)

break是直接結束迴圈, 而continue不是直接結束本次迴圈而是跳過迴圈,繼續執行下一次的迴圈

10。抽象類(abstract class)和介面(interface)的異同(時間多的話可以看下)

介面和抽象類的相似性

(1)介面和抽象類都不能被例項化,它們都位於繼承樹的頂端,用於被其他類實現和繼承。

(2)介面和抽象類都可以包含抽象方法,實現介面或繼承抽象類的普通子類都必須實現這些抽象方法。

介面和抽象類的區別

(1)接口裡只能包含抽象方法,靜態方法和預設方法,不能為普通方法提供方法實現,抽象類則完全可以包含普通方法。

(2)接口裡只能定義靜態常量,不能定義普通成員變數,抽象類裡則既可以定義普通成員變數,也可以定義靜態常量。

(3)介面不能包含構造器,抽象類可以包含構造器,抽象類裡的構造器並不是用於建立物件,而是讓其子類呼叫這些構造器來完成屬於抽象類的初始化操作。

(4)接口裡不能包含初始化塊,但抽象類裡完全可以包含初始化塊。

(5)一個類最多隻能有一個直接父類,包括抽象類,但一個類可以直接實現多個介面,透過實現

多個介面可以彌補Java單繼承不足

11。final, finally, finalize(我簡單概括)

final:當用final修飾類的時,表明該類不能被其他類所繼承

finally:作為異常處理的一部分,它只能用在try/catch語句中,並且附帶一個語句塊,表示這段語句最終一定會被執行(不管有沒有丟擲異常)

finalize:finalize()方法在垃圾收集器將物件從記憶體中清除之前做必要的清理工作,所有的類都繼承了它

12。java多執行緒的實現方式(看一遍就行)

1。繼承Thread類,重寫run方法

2。實現Runnable介面,重寫run方法,實現Runnable介面的實現類的例項物件作為Thread建構函式的target

3。透過Callable和FutureTask建立執行緒

4。透過執行緒池建立執行緒

13。

set list map

(集合裡面的,也簡單概括)

集合類存放於java。util包中,型別主要有3種:set(集)、list(列表)和map(對映)

(1) List 集合中物件按照索引位置排序,可以有重複物件,允許按照物件在集合中的索引位置檢索物件,例如透過list。get(i)方法來獲取集合中的元素;

(2) Map 中的每一個元素包含一個鍵和一個值,成對出現,鍵物件不可以重複,值物件可以重複;

(3) Set 集合中的物件不按照特定的方式排序,並且沒有重複物件,但它的實現類能對集合中的物件按照特定的方式排序,例如 Tree Set 類,可以按照預設順序,也可以透過實現 Java。util。Comparator< Type >介面來自定義排序方式。

14。HashMap 和 HashTable

(1)HashMap 是執行緒不安全的,HashMap 是一個介面,是 Map的一個子介面,是將鍵對映到值得物件,不允許鍵值重複,允許空鍵和空值;由於非執行緒安全, HashMap的效率要較 HashTable 的效率高一些。

(2)HashTable 是執行緒安全的一個集合,不允許 null 值作為一個 key 值或者 Value 值;

(3)HashTable 是 sychronize(同步化),多個執行緒訪問時不需要自己為它的方法實現同步,而 HashMap 在被多個執行緒訪問的時候需要自己為它的方法實現同步

15。

ArrayList和LinkedList

的區別

1。ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。

2。對於隨機訪問get和set,ArrayList效率優於LinkedList,因為LinkedList要移動指標。

3。對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。

16。JAVA的GC

GC是垃圾收集的意思,Java提供的GC功能可以自動監測物件是否超過作用域從而達到自動回收記憶體的目的,垃圾回收可以有效的防止記憶體洩露,有效的使用可以使用的記憶體

實現GC的方法:System。gc() 或Runtime。getRuntime()。gc()

17。幾個關鍵字

實現介面:implements

介面:interface

繼承:extends

super:我們可以透過super關鍵字來實現對父類成員的訪問,用來引用當前物件的父類

static: static方法就是沒有this的方法。在static方法內部不能呼叫非靜態方法,反過來是可以的

18。

equal和==

的區別

==:比較的是兩個字串記憶體地址(堆記憶體)的數值是否相等,屬於數值比較;

equals():比較的是兩個字串的內容,屬於內容比較。

19。程序和執行緒

1。程序是資源分配的最小單位,執行緒是程式執行的最小單位。

2。程序有自己的獨立地址空間,每啟動一個程序,系統就會為它分配地址空間,建立資料表來維護程式碼段、堆疊段和資料段,這種操作非常昂貴。而執行緒是共享程序中的資料的,使用相同的地址空間,因此CPU切換一個執行緒的花費遠比程序要小很多,同時建立一個執行緒的開銷也比程序要小很多。

3。執行緒之間的通訊更方便,同一程序下的執行緒共享全域性變數、靜態變數等資料,而程序之間的通訊需要以通訊的方式(IPC)進行。不過如何處理好同步與互斥是編寫多執行緒程式的難點。

4。多程序程式更健壯,多執行緒程式只要有一個執行緒死掉,整個程序也死掉了,而一個程序死掉並不會對另外一個程序造成影響,因為程序有自己獨立的地址空間。

20。wait()與sleep()的區別

1。sleep()來自Thread類,和wait()來自Object類。呼叫sleep()方法的過程中,執行緒不會釋放物件鎖。而 呼叫 wait 方法執行緒會釋放物件鎖

2。sleep()睡眠後不出讓系統資源,wait讓其他執行緒可以佔用CPU

3。sleep(milliseconds)需要指定一個睡眠時間,時間一到會自動喚醒。而wait()需要配合notify()或者notifyAll()使用

二十二.web和app測試的區別(感覺不是問這個就是問android和ios的區別)

1。相容

2。效能上,比如電量,記憶體,CPU

3。健壯性,專項測試,比如中斷,來電,簡訊,關機,弱網

4。因為web是基於瀏覽器的,app是基於客戶端的,所以要考慮app的安裝,更新,解除安裝

5。app的觸控

6。自動化,web多為selenium,app多為appium

二十三.nmon(效能監控工具)

nmon -s1 -c60 -f -m /home/nmon

引數說明:

-s1 每隔n秒抽樣一次,這裡為1秒

-c60 取出多少個抽樣數量,這裡為60,即監控=1*60/60=1分鐘

-f 按標準格式輸出檔名稱:_YYMMDD_HHMM。nmon

-m 指定監控檔案的存放目錄,-m後跟指定目錄

二十四.Android和IOS測試區別

1 。 Android長按home鍵撥出應用列表和切換應用,然後右滑則終止應用;

多解析度測試,Android端20多種,ios較少;

手機作業系統,Android較多,ios較少且不能降級,只能單向升級;新的ios系統中的資源庫不能完全相容低版本中的ios系統中的應用,低版本ios系統中的應用呼叫了新的資源庫,會直接導致閃退(Crash);

操作習慣:Android,Back鍵是否被重寫,測試點選Back鍵後的反饋是否正確;應用資料從記憶體移動到SD卡後能否正常執行等;

push測試:Android:點選home鍵,程式後臺執行時,此時接收到push,點選後喚醒應用,此時是否可以正確跳轉;ios,點選home鍵關閉程式和螢幕鎖屏的情況(紅點的顯示);

安裝解除安裝測試:Android的下載和安裝的平臺和工具和渠道比較多,ios主要有app store,iTunes和testflight下載;

升級測試:可以被升級的必要條件:新舊版本具有相同的簽名;新舊版本具有相同的包名;有一個標示符區分新舊版本(如版本號),對於Android若有內建的應用需檢查升級之後內建檔案是否匹配(如內建的輸入法)

二十五.IOS和android日誌抓取

iOS:

1。透過iTunes Connect(Manage Your Applications - View Details - Crash Reports)獲取使用者的crash日誌

2。透過Xcode從你的裝置上獲得崩潰日誌

3。自己在程式中新增崩潰捕捉程式碼,如果應用整合第三方SDK,如百度統計

Android:

1。透過整合第三方SDK,如百度統計、友盟統計等

2、發版時使用加固工具,他們也會收集錯誤日誌,如360加固

3、在程式中新增程式異常崩潰的捕捉程式碼,儲存到本地檔案中

二十六.SQL注入(想了半天,這個得列一下,安全雖然我們不做,但問基本都是問這東西,看懂這段就夠了,要是問怎麼防止就說對使用者輸入進行校驗,不要動態拼接SQL)

select * from users where username=‘’ or 1=1#‘ and password=md5(’‘)

等價於

select * from users where username=’‘ or 1=1

SQL注入採用的’ OR 1=1 # 是什麼意思呢?

最後一個#號有什麼意義呢?

SELECT * FROM test WHERE name=‘’ OR 1=1 #‘ AND age=’20‘

這後面寫的 #’ 是什麼意思呢?

解釋:可以註釋掉後面的一行SQL程式碼

相當於去掉了一個where條件

MySQL 註釋, 過濾掉後面的SQL語句,使其不起作用

因為1=1永遠是都是成立的,即where子句總是為真,將該sql進一步簡化之後,等價於如下select語句:

select * from users 沒錯,該sql語句的作用是檢索users表中的所有欄位

二十七.cookie和session的區別

1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。

2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙

考慮到安全應當使用session。

3、session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能

考慮到減輕伺服器效能方面,應當使用COOKIE。

4、單個cookie儲存的資料不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie。

5、所以個人建議:

將登陸資訊等重要資訊存放為SESSION

其他資訊如果需要保留,可以放在COOKIE中

二十八.客戶端的效能測試https://blog.csdn.net/xiaomaoxiao336368/article/details/83547318

1、響應(冷啟動即首次啟動,熱啟動為非首次啟動)

冷啟動:首次啟動app的時間間隔(只是啟動時間,不包括頁面載入)

熱啟動:非首次啟動app的時間間隔(只是啟動時間,不包括頁面載入)

方法:

adb shell am start -W packageName或者透過Android Monitor的logcat

2、記憶體 測試點一般如下

空閒狀態:切換至後臺或者啟動後不做任何操作,消耗記憶體最少。

中強度狀態:時間偏長的操作應用。

高強度狀態:高強度使用應用,可以跑monkey來測試(通常用來測試記憶體洩漏)。

方法:

adb shell dumpsys meminfo packageName

3、cpu 測試點一般如下

在空閒時間(切換至後臺)的消耗,基本沒大應用使用cpu

在執行一些應用的情況下,cpu已佔50%的情況下,觀察應用程式佔用cpu的情況

在高負荷的情況下看CPU的表現(cpu佔用應是在80%以上)

方法:

top -m -s cpu |grep packageName(-m是最大 -s是排序)或者dumpsys cpuinfo |grep packageName

4、FPS (app使用的流暢度,60幀/s,要保持畫面流暢不卡頓,一般是要求每一幀的時間不超過1000/60=16。6ms)

方法:

adb shell dumpsys gfxinfo packageName或者開發者選項—>profile GPU rendering —> on screen as bars(這個基本不用,瞭解就行了我感覺)

5、GPU過度渲染(開發者選項—>Debug GPU overdraw—>show overdraw areas)

6、耗電 測試點一般如下

測試手機安裝目標APK前後待機功耗無明顯差異;

常見使用場景中能夠正常進入待機,待機電流在正常範圍內;

長時間連續使用應用無異常耗電現象

方法:adb shell dumpsys batterystats |grep packageName

7、耗流

方法:

先檢視UID:cat /data/system/packages。list | grep com。newsplus。tr 假設UID為1000

然後 透過cat /proc/uid_stat/1000/tcp_rcv計算下行流量

再啟動APP到APP徹底啟動 cat/proc/uid_stat/1000/tcp_sed計算上行流量

然後sed-rcv即可

或者透過wireshark抓包也可以,沒仔細研究

二十九.CI,CD

https://

blog。csdn。net/yuanjunli

ang/article/details/81211684

三十.adb

adb全稱為Android Debug Bridge,就是起到除錯橋的作用。顧名思義,adb就是一個debug工具。

Adb的原理:

1)當你啟動一個adb Client(客戶端),Client首先會選確認是否已有一個adb Server(伺服器)程序在執行,如果沒有,則會啟動Server程序。此時,adb Server就會繫結本地的TCP埠5037,並監聽adb Client發來的命令。

2)接著,Server將會掃描所有5555到5585範圍內的奇數埠來定位所有的模擬器或裝置,並與之建立連線。一旦Server找到 了adb daemon(守護程式),它將建立一個到該埠的連線,這樣,我們就可以使用adb命令控制和訪問模擬器或裝置了。在這裡,需注意的是任何模擬器或裝置例項會取得兩個連續的埠:一個偶數埠用來相應控制檯的連線,和一個奇數埠用來響應adb連線。

常用命令:

adb devices:檢視當前連線的裝置(連線計算機的Android裝置或者模擬器)

adb install ,將指定的apk安裝到裝置上,安裝的apk包會放在/data/app目錄下。

幾個引數:

-r 強制安裝

-d(真機,多個裝置中只有一個真機時適用)

-e(模擬器,多個裝置中只有一個模擬器時適用)

-s(指定裝置,後接序列號)

adb –s 44a188f9 install –r test。apk(其中44a188f9即序列號,透過adb devices可獲取)

adb reboot:重啟android裝置

adb shell ps/top:檢視當前終端中的程序資訊,如pid等

adb shell pm list packages:列出當前裝置所有已安裝的程式的包名

adb pull 和 adb push:

adb pull <裝置中的檔案路徑> <本地路徑>:從模擬器或裝置中複製檔案到本地。

adb push <本地檔案路徑> <裝置中的路徑>:將本地檔案或目錄複製到模擬器或裝置。

adb shell dumpsys:

三十一.DDMS

DDMS(Dalvik Debug Monitor Service),是 Android 開發環境中的Dalvik虛擬機器除錯監控服務,可以進行的操作有:為測試裝置截圖,檢視特定行程中正在執行的執行緒以及堆資訊、Logcat、廣播狀態資訊、模擬電話呼叫、接收SMS、虛擬地理座標

原理:

DDMS將搭建起IDE與測試終端(Emulator 或者connected device)的連結,它們應用各自獨立的埠監聽偵錯程式的資訊,DDMS可以實時監測到測試終端的連線情況。當有新的測試終端連線後,DDMS將捕捉到終端的ID,並透過adb建立偵錯程式,從而實現傳送指令到測試終端的目的

DDMS 工具存放在 SDK 的 tools 路徑下,啟動DDMS方法如下:

直接雙擊ddms。bat執行

主要功能:

Devices:在GUI的左上角可以看到標籤為“Devices”的面板,這裡可以檢視到所有與DDMS連線的終端的詳細資訊(真機或模擬器),以及每個終端正在執行的APP程序,每個程序最右邊相對應的是與偵錯程式連結的埠。因為Android是基於Linux核心開發的操作平臺,同時也保留了Linux中特有的程序ID,它介於程序名和埠號之間。

Screen captrue:截圖操作。

Dump View:顯示手機當前螢幕對應當前除錯頁面,選擇頁面元素,會在右面就是顯示對應View的資訊,這對我們分析頁面佈局很有用。

Threads:檢視程序中執行緒情況。

Heap:檢視應用中記憶體使用情況。

File Exporler:File Explorer非常有用,它是一個檔案瀏覽器,可以把檔案上傳到Android手機,或者從手機下載下來,也可以進行刪除操作。選中file explorer選項卡後可實現對Android手機檔案系統的上傳、下載、刪除操作,不過真機上的很多操作需要Root許可權才能進行。

Emulator Control:透過這個面板的一些功能可以非常容易的使測試終端模擬真實手機所具備的一些互動功能,比如:接聽電話,根據選項模擬各種不同網路情況,模擬接受SMS訊息和傳送虛擬地址座標用於測試GPS功能等。

LogCat :檢視日誌輸入資訊,可以對日誌輸入進行Filter過濾一些除錯的資訊篩選檢視等。

Console:是Android模擬器輸出的資訊,載入程式等資訊。

技術上暫時先寫到這,我後續還會更新~下面是一些個人總結的面試小技巧和小的問點吧

一些我認為可能會問的問題

1.自我介紹

2.你現在的測試流程描述下?

3.挑一個你最熟悉的專案描述下,說一說你在其中的工作

4.你認為如何做一個好的測試(或者說你覺得你做測試比別人的優勢在哪)

5.你印象中測試過程中最大的問題是什麼?怎麼解決的(包括線上問題)

6.工作以來或者未來的規劃(有個規劃就好)

7.什麼樣的測試用例算是一個好的測試用例(建議與第一點的黑盒方法結合著說)

8.一般你都怎麼定位bug

9.為什麼要做自動化測試?或者說和手工測試有什麼不同(https://www.cnblogs.com/test_home_c/p/9399287.html)

(這個寫的挺好,總結其實最主要:迴歸,提高效率,減少重複工作,能及時報警,更好保證產品質量)

10.離職原因(千萬不要說前公司的壞話,儘量靠在工作方向說,只要不是一些偏激的我認為都可以)

11.期望薪資(要麼直接說,要麼我覺得就是問之前可以先問問年終是幾個月,或者補貼什麼的有多少再說自己的期望,具體情況具體分析)

12.對於加班你怎麼看?(加班分兩方面,一方面是對於自己來說是成長,同時也會push公司業務的增進;第二就是有壓力的情況下其實會有動力,也會自己平時有一些解壓的方法)

13.你有什麼問題想問我麼(我覺得是一定是要問的,除非確實沒啥興趣或者覺得掛了,先考慮考慮,比如業務相關)

14.作為測試工程師,怎麼保證軟體的質量?(怎麼做好一個測試)

(1)程式碼質量:開發透過單元測試保證

(2)讓使用者參與UAT測試,保證使用者體驗(使用質量)

(3)功能測試、效能測試、相容性測試等多種測試型別的結合

(4)採用合適的用例方法,如何進行需求分析,用例評審

(5)要有把控全域性的能力(推動客戶端和UI,互動的時間,推動研發提測時間,提測質量;比如說研發提測質量低,那我們可以制定冒煙測試標準,且讓他們在測試環境聯調)

(6)要有好的溝通能力和責任心

15.開發堅持說這不是一個問題怎麼辦?(1.看需求,如果是的話就沒什麼說的 2.如果堅持,儘量重現,三方討論)

16.緊急需求怎麼辦?(一般拿出來看優先順序,如果是重要且緊急的那種,那就緊急釋出,如果不重要不緊急,看是否可以延後至下個版本;當出現緊急需求的時候,我們要和產品,研發leader討論是否可以在版本原先上線時間的基礎上延後,要為自己爭取)

給大家劇透一些問題(曾經我遇到過的,一個示例,大家也可以參考,具體的公司我就避免一些意外,不在此透露):

介紹專案

怎麼測一個介面,哪些方式(我理解是跟用例差不多,協議,url,引數,請求方式,頭部資訊,返回;然後效能上響應時間,併發,安全上SQL注入,許可權什麼的,提一下就行,反正能多說就說,對方會覺得你知識面廣一些)

會問有多少個服務,其實就是站點,大概算下就好了,10多個吧,然後就問服務端的一個流轉(主要是服務的流轉性)

Android和ios測試區別(上面有。。1。右滑 2。IOS版本少一些,一般相容4個系統版本,比如12,11,10,9,也看具體使用者情況 ,android版本多,解析度也多 3。home鍵,android能後臺執行 4。android效能沒IOS好,電量,記憶體什麼的都不如IOS其實 5。想到的可以自己補充哦)

測試這個專案的時候比如在使用者表插入一條資料,資料庫哪些欄位會變化(他的意思是測了一個查詢介面,其實我答錯了,不過回答的應該是id,userid,使用者名稱,密碼,插入時間,使用者狀態,許可權,針對借款專案的話比如還有綁卡資訊什麼的)

linux檢視日誌的命令(上面有,less,more,cat,tail,echo。。。。。)

7。遇到過的印象最深的線上問題

8。如果你提到支付,應該會問支付異常case(資料庫,流程尤為關鍵)

9。對加班怎麼看

10。測試用例設計(購物車)

11。web和app測試的最大區別(上面有)

12。怎麼進行sql注入(我覺得這個還是看下,安全上雖然沒做過,不過看過這個在面試過程中會有加分的時候)

13。jmeter引數化的方法( 總結 1。用jmeter的使用者引數,直接下面的用上面的 2。jmeter的函式助手,csvread 3。csv_data,這個傳參)

14。一週的緊急需求怎麼排期能儘量保證上線質量

15。描述最近的工作,專案,你做的什麼

16。字串倒序怎麼實現

17。自動化

暫時寫這些吧,後面蘭瑟會持續更新~

像測試方法,TCP/IP,HTTP,android和ios,web區別,抓包,linux,簡單的sql這些個是一定要知道些的,嗯~

其實在測試當中,也有很多測試工種的分類,不過此文我暫時沒有分的很細,是一個總的小結,後續我會繼續拆分,將功能,效能,自動化等等測試方面的經驗,技術,都分享給大家。

我個人的一點點見解是一定會對著簡歷細問的,所以

簡歷一定要好好寫!

簡歷一定要好好寫!

簡歷一定要好好寫!

最後,祝願大家都能成功進入自己理想的公司~

感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什麼很值錢的東西,如果你用得到的話可以直接免費拿走:

①2000多本軟體測試電子書(主流和經典的書籍應該都有了)

②軟體測試/自動化測試標準庫資料(最全中文版)

③專案原始碼(四五十個有趣且經典的練手專案及原始碼)

④Python程式語言、API介面自動化測試、web自動化測試、App自動化測試(適合小白學習)

測試工程師面試時要注意什麼?

上圖的資料 在我的QQ技術交流群裡(技術交流和資源共享,廣告進來腿給你打斷)一個資深測試工程師面試一來就問我這些題目

可以自助拿走,群號361602262(備註“123”)群裡的免費資料都是筆者十多年測試生涯的精華。還有同行大神一起交流技術哦。

標簽: 測試  缺陷  客戶端  軟體  伺服器