軟體測試常見面試題四
1.軟體測試級別?
單元測試:單元測試是對軟體組成單元進行測試。其目的是檢驗軟體基本組成單位的正確性。測試的物件是軟體設計的最小單位:模組。Findyou又稱為模組測試,一個單元測試是用於判斷某個特定條件(或者場景)下某個特定函式的行為。(測試內容:模組介面測試、區域性資料結構測試、路徑測試、錯誤處理測試、邊界測試)
整合測試:(整合測試也稱聯合測試、組裝測試,將程式模組採用適當的整合策略組裝起來,對系統的介面及整合後的功能進行正確性檢測的測試工作。主要目的是檢查軟體單位之間的介面是否正確。方法是測試片段的組合,並最終擴充套件程序,將您的模組與其他組的模組一起測試。最後,將構成程序的所有模組一起測試。測試內容:模組之間資料傳輸、模組之間功能衝突、模組組裝功能正確性、全域性資料結構、單模組缺陷對系統的影響
系統測試:將軟體系統看成是一個系統的測試。包括對功能、效能以及軟體所執行的軟硬體環境進行測試。系統測試的目的是對最終軟體系統進行全面的測試,確保最終軟體系統滿足產品需求並且遵循系統設計。測試內容:功能、介面、可靠性、易用性、效能、相容性、安全性等
驗收測試:驗收測試是部署軟體之前的最後一個測試操作。它是技術測試的最後一個階段,也稱為交付測試。總結驗收測試的目的是確保軟體準備就緒,按照專案合同、任務書、雙方約定的驗收依據文件,向軟體購買都展示該軟體系統滿足原始需求。驗收測試的目的是確保軟體準備就緒,並且可以讓終端使用者將其用於執行軟體的既定功能和任務,即軟體的功能和效能如同使用者所合理期待的那樣。測試內容:同系統測試(功能...各類文件等)
2.軟體測試型別?
功能測試:也叫黑盒測試,功能測試指測試軟體各個功能模組是否正確,邏輯是否正確。對測試物件的功能測試應側重於所有可直接追蹤到用例或業務功能和業務規則的測試需求。這種測試的目標是核實資料的接收、處理和檢索是否正確,以及業務規則的實施是否恰當。此類測試基於黑盒技術,該技術通過圖形使用者介面(GUI) 與應用程式進行互動,並對互動的輸出或結果進行分析,以此來核實應用程式及其內部程序。功能測試的主要參考為類似於功能說明書之類的文件。
效能測試:指驗證軟體的效能可以滿足系統規格給定的指定要求的效能指標。效能測試是一個比較大的範圍,可以進一步衍生出負載測試、強度測試、壓力測試、穩定性測試。通過自動化測試工具模擬多種正常、異常、峰值條件,對系統各項效能指標測試
配置測試:用硬體來測試軟體執行情況,1.軟體在不同主機上執行的情況(Apple和Dell)2.在不同元件上執行情況(開發的撥號程式要測試不同廠商生產的Moden上執行情況)3.不同的外設、介面、記憶體的執行情況
強度測試:強度測試是一種效能測試,他在系統資源特別低的情況下軟體系統執行情況。這類測試往往可以書寫系統要求的軟硬體水平要求。實施和執行此類測試的目的是找出因資源不足或資源爭用而導致的錯誤。如果記憶體或磁碟空間不足,測試物件就可能會表現出一些在正常條件下並不明顯的缺陷。而其他缺陷則可能由於爭用共享資源(如資料庫鎖或網路頻寬)而造成的。強度測試還可用於確定測試物件能夠處理的最大工作量。
負載測試:通過在被測系統上不斷加壓,直到效能指標達到極限,例如“響應時間”超過預定指標或都某種資源已經達到飽和狀態。負載測試是一種效能測試指資料在超負荷環境中執行,程式是否能夠承擔。在這種測試中,將使測試物件承擔不同的工作量,以評測和評估測試物件在不同工作量條件下的效能行為,以及持續正常執行的能力。負載測試的目標是確定並確保系統在超出最大預期工作量的情況下仍能正常執行。此外,負載測試還要評估效能特徵,例如,響應時間、事務處理速率和其他與時間相關的方面。
壓力測試:壓力測試方法測試系統在一定飽和狀態下,例如cpu、記憶體在飽和使用情況下,系統能夠處理的會話能力,以及系統是否會出現錯誤。測試出系統所能承受的最大極限。是指系統在極限下的壓力情況,系統在什麼樣的壓力下會導致系統得到失效,無法正常執行。100個使用者連續訪問1小時可以看做是壓力測試,連續訪問10小時可以認為是負載測試
穩定性測試:壓力測試方法測試系統在一定飽和狀態下,例如cpu、記憶體在飽和使用情況下,系統能夠處理的會話能力,以及系統是否會出現錯誤。一般是稍大於業務量的一個負載,對系統進行的一個持續的,長時間的測試,比如24*3,連續3天的施加壓力,確定系統在較長執行時間的情況下,系統的穩定性情況
網路測試:wifi、4G、3G、不同運營商網路測試、
UI介面測試:UI測試指測試使用者介面的風格是否滿足客戶要求,文字是否正確,頁面美工是否好看,文字,圖片組合是否完美,背景是否美觀,操作是否友好等等。
解析度測試:測試在不同解析度下,介面的美觀程度,分為800*600,1024*768,1152*864,1280*768,1280*1024,1200*1600大小字型下測試。一個好的軟體要有一個極佳的解析度,而在其他解析度下也都能可以執行。
安裝測試:安裝測試有兩個目的。第一個目的是確保該軟體在正常情況和異常情況的不同條件下: 例如,進行首次安裝、升級、完整的或自定義的安裝_都能進行安裝。異常情況包括磁碟空間不足、缺少目錄建立許可權等。第二個目的是核實軟體在安裝後可立即正常執行。這通常是指執行大量為功能測試製定的測試。
記憶體測試:CPU測試、響應時間測試、喚醒率測試等,都屬於效能測試。還有強度測試、容量測試、基準測試等。
文件測試:文件測試是檢驗樣品使用者文件的完整性、正確性、一致性、易理解性、易瀏覽性。包括使用者手冊、使用說明、使用者幫助文件等
可靠性測試:這個主要是硬體方面的,比如高低溫測試、防水防塵等測試
安全測試:對產品進行檢驗以驗證產品符合安全需求定義和產品質量標準的過程。可確保只有具備系統訪問許可權的使用者才能訪問應用程式,而且只能通過相應的網管、關來訪問。比如輸入管理員賬戶,檢查其密碼是否容易猜取,或者可以從資料庫中獲得?
相容測試:檢查軟體在不同軟體、硬體平臺是否可以正常執行。 主要檢視在不同作業系統、瀏覽器、資料庫、不同版本是否正常執行、向前相容和向後相容、、資料共享相容
瀏覽器相容性測試:測試軟體在不同產商的瀏覽器下是否能夠正確顯示與執行、比如測試IE,Natscape瀏覽器
作業系統相容性:測試軟體在不同作業系統下是否能夠正確顯示與執行;比如測試WINDOWS98,WINDOWS 2000,WINDOWS XP,LINU, UNIX下是否可以執行這套軟體?
硬體相容性
測試與硬體密切相關的軟體產品與其他硬體產品的相容性,比如該軟體是少在並口裝置中的,測試同時使用其他並口裝置,系統是否可以正確使用。比如在INTER,舒龍CPU晶片下系統是否能夠正常執行?
併發測試:併發測試方法通過模擬使用者併發訪問,測試多使用者併發訪問同一個應用、同一個模組或者資料記錄時是否存在死鎖或其者他效能問題。也就是說,這種測試關注點是多個使用者同時(併發)對一個模組或操作進行加壓。
3.測試方法:動態測試、靜態測試;黑盒測試、白盒測試、灰盒測試。
、黑盒測試方法:
1>等價類劃分:等價類劃分是將系統的輸入域劃分為若干部分,然後從每個部分選取少量代表性資料進行測試。等價類可以劃分為有效等價類和無效等價類,設計測試用例的時候要考慮這兩種等價類。
2>邊界值分析法:邊界值分析法是對等價類劃分的一種補充,因為大多數錯誤都在輸入輸出的邊界上。邊界值分析就是假定大多數錯誤出現在輸入條件的邊界上,如果邊界附件取值不會導致程式出錯,
那其他取值出錯的可能性也就很小。
邊界值分析法是通過優先選擇不同等價類間的邊界值覆蓋有效等價類和無效等價類來更有效的進行測試,因此該方法要和等價類劃分法結合使用。
3>錯誤猜測法:錯誤猜測法主要是針對系統對於錯誤操作時對於操作的處理法的猜測法,從而設計測試用例
3、白盒測試方法:
1>語句覆蓋:就是設計若干個測試用例,執行被測程式,使得每一個可執行語句至少執行一次。
2>判定覆蓋:使設計的測試用例保證程式中每個判斷的每個取值分支至少經歷一次。
3>條件覆蓋:條件覆蓋是指選擇足夠的測試用例,使得執行這些測試用例時,判定中每個條件的所有可能結果至少出現一次,但未必能覆蓋全部分支
4>判定條件覆蓋:判定-條件覆蓋就是設計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執行一次,同時每個判斷的所有可能判斷結果至少執行,即要求各個判斷的所有可能的條件取值組合至少執行一次。
5>條件組合覆蓋:在白盒測試法中,選擇足夠的測試用例,使所有判定中各條件判斷結果的所有組合至少出現一次,滿足這種覆蓋標準成為條件組合覆蓋。
6>路徑覆蓋:是每條可能執行到的路徑至少執行一次
灰盒測試
定義:介於黑、白盒測試之間的,關注輸出對於輸入的正確性,同時也關注內部表現
靜態測試
1,靜態測試是指無需執行被測程式,而是通過評審軟體文件或程式碼,度量程式靜態複雜度,檢查軟體是否符合程式設計標準,藉以發現編寫的程式的不足之處,減少錯誤出現的概率
動態測試
1,動態測試是指通過執行被測程式,檢查執行結果和預期結果的差異,並分析執行效率,正確性和健壯性等
2,靜態(看外觀)和動態(發動車走一段路)可以用買車來說明
手工測試
由專門的測試人員從使用者視角來驗證軟體是否滿足設計要求的行為。
更適用針對深度的測試和強調主觀判斷的測試
比如:眾包測試和探索式測試
自動化測試
1.適用單獨的測試工具軟體控制測試的自動化執行以及對預期和結果進行自動檢查。
2.手工測試和自動化測試的區別?
手動測試:優點:易發現缺陷、容易實施、靈活性 缺點:覆蓋量低、重複測試效率低、可靠性低、人力資源依賴
自動化測試:優點:高效率,速度快、高複用性、覆蓋率高、準確可靠、不知疲勞 缺點:機械發現缺陷率低、一次性投入大
安全測試
安全測試是在IT軟體產品的生命週期中,特別是產品開發基本完成到釋出階段,對產品進行檢驗以驗證產品符合安全需求定義和產品質量標準的過程 。
Findyou覺現在對安全知識的普及,大家意識都提上來了。比如現在越來越多的不支援HTTP協議,轉用HTTPS等。
探索性測試
探索性測試可以是一種測試思維技術。它沒有很多實際的測試方法、技術和工具,但是卻是所有測試人員都應該掌握的一種測試思維方式。探索性強調測試人員的主觀能動性,拋棄繁雜的測試計劃和測試用例設計過程,強調在碰到問題時及時改變測試策略
隨機測試
隨機測試主要是根據測試者的經驗對軟體進行功能和效能抽查。
根據測試說明書執行用例測試的重要補充手段,是保證測試覆蓋完整性的有效方式和過程。
隨機測試主要是對被測軟體的一些重要功能進行復測,也包括測試那些當前的測試用例(TestCase)沒有覆蓋到的部分。
冒煙測試
關於冒煙測試,就是開發人員在個人版本的軟體上執行目前的冒煙測試專案,確定新的程式程式碼不出故障。冒煙測試目的是確認軟體基本功能正常,現基本執行物件為測試人員,在正規測試一個新版本之前,投入較少的人力和時間驗證基本功能,通過則測試准入。
α測試
α測試是由一個使用者在開發環境下進行的測試,也可以是公司內部的使用者在模擬實際操作環境下進行的測試。α測試的目的是評價軟體產品的FLURPS(即功能、局域化、可使用性、可靠性、效能和支援)。
大型通用軟體,在正式釋出前,通常需要執行Alpha和Beta測試。α測試不能由程式設計師或測試員完成。
β測試
Beta測試是一種驗收測試。Beta測試由軟體的終端使用者們在一個或多個客房場所進行。
4.alpha測試和beta測試的區別
1、測試時間不同:
Beta測試是軟體產品完成了功能測試和系統測試之後,產品釋出之前所進行的軟體測試活動,它是技術測試的最後一個階段。
alpha測試簡稱“α測試”,可以從軟體產品編碼結束之時開始,或在模組(子系統)測試完成之後開始,也可以在確認測試過程中產品達到一定的穩定和可靠程度之後再開始。
2、測試的目的不同:
α測試的目的是評價軟體產品的(即功能、局域化、可用性、可靠性、效能和支援)。尤其注重產品的介面和特色。α測試即為非正式驗收測試。
Beta測試是一種驗收測試,通過了驗收測試,產品就會進入釋出階段。
測試人員及場所不同:
α測試是由一個使用者在開發環境下進行的測試,也可以是公司內部的使用者在模擬實際操作環境下進行的受控測試,α測試不能由程式設計師或測試員完成。α測試發現的錯誤,可以在測試現場立刻反饋給開發人員,由開發人員及時分析和處理。
Beta測試由軟體的終端使用者們在一個或多個客戶場所進行。開發者通常不在Beta測試的現場,因Beta測試是軟體在開發者不能控制的環境中的“真實”應用。
5.測試設計方法:
等價類劃分、邊界值、因果圖劃分、正交、場景、隨機、錯誤推斷、測試大綱
等價類劃分法:: 1:有效等價類: 2:無效等價類:
案例:比如一個登陸輸入框,規定只能輸入中文,同時長度為6-10,
通過等價類設計測試用例:
測試用例中重要的三步: 輸入 操作 預計結果 如果與預期結果不符合就是bug
有效等價類: 輸入:輸入長度為6的中文,輸入的為王小明,這就是有效等價類
無效等價類:
1: 輸入長度為4的中文,輸入位小名,點選登入,預計結果長度不符合要求
2: 輸入長度為6,但是是英文的,點選登入,預計結果 請輸入中文
3: 輸入長度為4,而且不是中文的,是數字,1234,點選登入,預計結果請輸入中文並且長度為6-10位
4:輸入長度為12而且不是中文的,比如qwertyuiopas,點選登入,預計結果請輸入中文並且長度為6-10位
二:邊界值法:
應用場景:邊界值往往和等價類劃分法一起使用,形成一套更為完善的測試方案,找到有效資料和無效資料的分界點,
註解邊界值一般和有效等價類劃分法配合使用:
案例:比如一個登陸輸入框,規定只能輸入中文,同時長度為6-10,
上面輸入框的邊界的:如果固定大於等於6,並且小於等於10,
那左邊界就是 5和 6
右邊界是:10 和 11
測試用例:
1:輸入的為王小明,這就是有效等價類和邊界值的結合使用
2:輸入小名,這就是邊界值為5,同時有效等價類
3:輸入歐陽致遠家,這就是邊界值10,同時等價類有效
4:輸入歐陽致遠啦啦,這就是邊界值為11,同時有效等價類
三:因果圖及判定表法:
應用場景:在一個介面中有多個控制元件,如果控制元件之間有組合關係或者限制關係,不同的控制元件組合會產生不同的輸入結果,為了弄清楚不同的輸入組合會產生咋樣的輸出結果,可以使用因果圖及判定表法:
判斷是兒童還是青年還是成年人:
條件1:年齡 age
條件2:身高height
條件3:體重weight
輸入年齡5,體重80公斤,身高170,查無此人
輸入提高80,身高170,輸入年齡20,成年人
輸入年齡5,體重30,身高60,小孩
四:正交表:
應用場景:在一個介面中有多個控制元件,每個控制元件有多個取值,測試時考慮不同的控制元件不同取值之間的多種組合,但組合數量巨大(>20種,20種以下一般考慮判定表因果圖),沒有必要全部測試,如何從所有的組合中挑選最少、最優的組合進行測試,可以使用正交排列法。
正交表的測試思想特點:
1)使用每個控制元件的每個取值參與組合的次數是基本相等的(均勻的)
2)在所有的組合資料中,選取資料時,應該均勻的選取,而不能從區域性選取。
3)如果時間允許,儘可能的多測一些組合
正交表:主要針對一個輸入框裡面可能有多個值,而且數量巨大
年齡 體重 省 市 縣
比如:輸入年齡 18,體重45,山西 大同 陽高
五:測試大綱法
適用場合:程式包含多個視窗,每個視窗中又有多個功能,這些功能之間又有一定的聯絡。為了梳理清楚視窗之間以及視窗不同功能之間的聯絡,使用測試大綱法。
六:場景法
適用場合:大多數的業務比較複雜的軟體系統都適合使用場景法(便於將各個功能點串起來,便於形成完整的業務感覺)是一種基於軟體業務的測試方法,把自己當成終端使用者,儘可能的模擬使用者在使用此軟體的操作
案例:
場景一:比如買東西:輸入襪子,點選查詢,出現列表,點選七匹狼,點選進入詳情,點選加入購物車,點選去購物車結算,點選收穫地址,點選支付,支付成功
場景二:比如買東西:輸入襪子,點選查詢,出現列表,點選七匹狼,點選進入詳情,點選加入購物車,點選去購物車結算,點選收穫地址,點選取消支付
七:錯誤推斷法
基於經驗和直覺推測程式中所有可能存在的各種錯誤 , 從而有針對性的設 計測試用例的方法
在進行灰盒測試的時候經常用到此方法
八:隨機測試
隨意測試,不考慮任何用例和需求,完全站在一個使用者或者的角度對產品進行使用。
適用場景:
1) 所有之前設定的用例已經 執行完畢
2)海量的條件組合無法一遍 歷的時候
6.軟體測試風險:
測試人員:業務不熟、人員變動、疲態、同化效應、定位效應
測試材料:需求變更、質量標準不一樣、測試用例或測試資料設計不充分
測試環境:測試軟體版本不統一、軟體環境不統一、硬體環境不統一、硬體不到位
測試時間:測試時間不足、測試時間延長
測試方法:錯誤或缺失測試方法、場景缺失、測試用例實施不充分
7.自動化測試軟體作用(重點):
一:jmeter:純java編寫負載功能測試和效能測試開源工具,支援介面自動化測試,錄製、抓包、可進行壓力測試(增加執行緒,考驗伺服器最大支援訪問數)、弱網測試、新增請求、新增斷言,檢視斷言、結果樹,聚合報告,分析測試報告等
聚合報告引數詳解:
1. Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裡顯示的就是 Name 屬性的值
2.Samples:請求數——表示這次測試中一共發出了多少個請求,如果模擬10個使用者,每個使用者迭代10次,那麼這裡顯示100
3. Average:平均響應時間——預設情況下是單個 Request 的平均響應時間
4. Median:中位數,也就是 50% 使用者的響應時間
5. 90% Line:90% 使用者的響應時間
6. Min:最小響應時間
7. Max:最大響應時間
8. Error%:錯誤率——錯誤請求數/請求總數
9. Throughput:吞吐量——預設情況下表示每秒完成的請求數(Request per Second)
10. KB/Sec:每秒從伺服器端接收到的資料量,相當於LoadRunner中的Throughput/Sec
二:ant:將軟體編譯、測試、部署等步驟聯絡在一起加以自動化的一個工具,並生成測試報告併發送
三:jenkins:Jenkins是一個開源CI伺服器,基於Web訪問,jenkins是基於Java開發的一種持續整合工具,用於監控持續重複的工作,能實時監控整合中存在的錯誤,提供詳細的日誌檔案和提醒功能,還能用圖表的形式形象地展示專案構建的趨勢和穩定性,擁有大量的外掛:這些外掛極大的擴充套件了Jenkins的功能,持續整合工具,所有工作都是自動完成的,無需太多的人工干預,有利於減少重複過程以節省時間和工作量;
四:monkey:它是Android SDK系統自帶一個命令列工具,可以執行在模擬器裡或者真是裝置中執行。向系統傳送偽隨機的使用者事件流,實現對正在開發的應用程式進行穩定性測試。
五:charles:1.抓包(http、https):設定手機HTTP代理、https charles也需要證書
2.弱網測試:通過Throttle Settings(網路控制)、Enable Throttling(啟用設定)、Throttle preset(通過預設網路值來擬定網路)、設定網路頻寬值等
3.網路請求的擷取並動態修改:
4.壓力測試:通過右鍵點選連結,Repeat Advanced(重複),選擇Iterations(重複次數)Concurrency(併發數)
5.資料替換:通過連結右鍵點選Map Local(本地位置)進入設定,選擇替換資料檔案,替換即可
六:selenium :web自動化測試框架(測試瀏覽器相容性的自動化)selenium不支援桌面軟體自動化測試。軟體測試報告,和用例管理只能依賴第三方外掛unittest優點:相容更多的平臺(Windows、Linux 、Macintosh等)以及瀏覽器(火狐,IE,谷歌等)
定位元素方式:id、name、class_name、tagname、link_text、partial_link_text、xpath、css_selector
強制等待:sleep()強制等待,不管你瀏覽器是否載入完,程式都得等待
顯示等待:WebDriverWait,配合該類的until()和until_not()方法,就能夠根據判斷條件而進行靈活地等待了.它主要的意思就是:程式每隔多久檢視一次,如果條件成立了,則執行下一步,否則繼續等待,直到超過設定的最長時間,然後丟擲TimeoutException
隱式等待:implicitly_wait(),整個driver週期有效,如果在規定時間內網頁載入完成,則執行下一步,否則一直等到時間截止
七:appium:開源測試自動化框架,可用於原生,混合和移動Web應用程式測試
兩大元件:
一:Appium Server就是Appium的服務端——一個web介面服務,使用Node.js實現。
二:Appium Desktop是一款適用於Mac,Windows和Linux的開源應用程式,提供Appium自動化伺服器的強大功能。
Appium GUI是Appium desktop的前身。 也就是把Appium server封裝成了一個圖形介面,降低了使用門檻。
因為Appium是一個C/S結構,有了服務端的肯定還有客戶端,Appium Clients就是客戶端,它會給服務端Appium Server傳送請求會話來執行自動化任務。
Appium-desktop主介面包含三個選單:
Simple
- host:設定Appium server的ip地址,本地除錯可以將ip地址修改為127.0.0.1
- port:設定埠號,預設是4723不用修改
-
start server:啟動 Appium server
Advanced:高階引數配置修改,主要是Android和iOS裝置,log路徑等相關資訊的配置。
Presets:將Advanced中的一些配置資訊作為預設配置。
八:pytest:pytest是一個全功能的Python測試框架,
優點:
- 1、簡單靈活,容易上手,文件豐富;
- 2、支援引數化,可以細粒度地控制要測試的測試用例;
- 3、能夠支援簡單的單元測試和複雜的功能測試,還可以用來做selenium/appnium等自動化測試、介面自動化測試(pytest+requests);
- 4、pytest具有很多第三方外掛,並且可以自定義擴充套件,比較好用的如pytest-selenium(整合selenium)、pytest-html(完美html測試報告生成)、pytest-rerunfailures(失敗case重複執行)、pytest-xdist(多CPU分發)等;
- 5、測試用例的skip和xfail處理;
- 6、可以很好的和CI工具結合,例如jenkins
編寫規則:
- 測試檔案以test_開頭(以_test結尾也可以)
- 測試類以Test開頭,並且不能帶有init方法
- 測試函式以test_開頭
- 斷言使用基本的assert即可
- # -*- coding:utf-8 -*-
- import pytest
- def setup_function(request):
- def teardown_function():
- print("teardown_function called.")
- request.addfinalizer(teardown_function) # 此內嵌函式做teardown工作
- print('setup_function called.')
- def setup_module(request):
- def teardown_module():
- print("teardown_module called.")
- request.addfinalizer(teardown_module)
- print('setup_module called.')
- def test_1(setup_function):
- print('Test_1 called.')
- def test_2(setup_module):
- print('Test_2 called.')
- def test_3(setup_module):
- print('Test_3 called.')
- assert 2==1+1 # 通過assert斷言確認測試結果是否符合預期
fixture的scope引數
scope引數有四種,分別是'function','module','class','session',預設為function。
- function:每個test都執行,預設是function的scope
- class:每個class的所有test只執行一次
- module:每個module的所有test只執行一次
- session:每個session只執行一次
setup和teardown操作
- setup,在測試函式或類之前執行,完成準備工作,例如資料庫連結、測試資料、開啟檔案等
- teardown,在測試函式或類之後執行,完成收尾工作,例如斷開資料庫連結、回收記憶體資源等
- 備註:也可以通過在fixture函式中通過yield實現setup和teardown功能
九:unitest:unittest單元測試框架不僅可以適用於單元測試,還可以適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,並且提供了豐富的斷言方法,判斷測試用例是否通過,最終生成測試結果
unittest.TestCase:TestCase類,所有測試用例類繼承的基本類: class BaiduTest(unittest.TestCase)
unittest.main():將一個單元測試模組變為可直接執行的測試指令碼,main()方法使用TestLoader類來搜尋所有包含在該模組中以“test”命名開頭的測試方法並自動執行他們。
unittest.TestSuite():unittest框架的TestSuite()類是用來建立測試套件的。
unittest.TextTextRunner():unittest框架的TextTextRunner()類,通過該類下面的run()方法來執行suite所組裝的測試用例。
unittest.defaultTestLoader():defaultTestLoader()類,通過該類下面的discover()方法可自動更具測試目錄start_dir匹配查詢測試用例檔案(test*.py),並將查詢到的測試用例組裝到測試套件,因此可以直接通過run()方法執行discover。用法如下:discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
unittest.skip():裝飾器,當執行用例時,有些用例可能不想執行等,可用裝飾器暫時遮蔽該條測試用例。一種常見的用法就是比如說想除錯某一個測試用例,想先遮蔽其他用例就可以用裝飾器遮蔽。
TestCase類的屬性:
setUp():setUp()方法用於測試用例執行前的初始化工作。如測試用例中需要訪問資料庫,可以在setUp中建立資料庫連線並進行初始化。如測試用例需要登入web,可以先例項化瀏覽器。
tearDown():tearDown()方法用於測試用例執行之後的善後工作。如關閉資料庫連線。關閉瀏覽器。
assert*():一些斷言方法:在執行測試用例的過程中,最終用例是否執行通過,是通過判斷測試得到的實際結果和預期結果是否相等決定的。
TestSuite類的屬性:
addTest():addTest()方法是將測試用例新增到測試套件中,是將test_baidu模組下的BaiduTest類下的test_baidu測試用例新增到測試套件。 suite = unittest.TestSuite() suite.addTest(test_baidu.BaiduTest('test_baidu'))
TextTextRunner的屬性:
run():run()方法是執行測試套件的測試用例,入參為suite測試套件: runner = unittest.TextTestRunner() runner.run(suite)
微信朋友圈測試用例:
8.po模型?
selenium自動用例指令碼,相似功能地方,程式碼基本都是一樣的,介面元素換個查詢方式,把原來的使用 xpath方式,改為使用 id 查詢,需要對每個用例指令碼都要改,雖然幾個用例看不出什麼工作量,但是重複findElement的程式碼,已經讓我們感到了程式碼的笨重。如果某些定位發生了改變,我們就得貫穿整個測試程式碼進行調整元素定位,這樣就會導致我們的指令碼在後期,難以維護。
因此通過Page Object Model 我們可以建立更加健壯程式碼,並減少或者消除重複的測試程式碼,從而也能夠提高程式碼的可讀性,減少編寫指令碼的工作量。Page Object Model的實現,就是通過分離測試物件和測試指令碼的抽象來實現的。簡單來說就是程式碼的封裝,將測試方法進行封裝對外暴露方法實現呼叫,在呼叫介面直接呼叫某個方法輸入具體元素值以及內容。
9.Bug的生命週期?新建,提交,確認,分配,修復,驗證,關閉
10.軟體開發過程中的角色分工?(測試的主要工作)
測試配合開發等進行需求分析和討論,根據需求說明書指定《專案測試計劃》,編寫測試用例,建立測試環境。
測試負責新產品測試,原有產品的升級測試,負責軟體問題解決過程跟蹤,軟體開發文件、開發工作的規範化,管理開發部 門的產品文件,製作使用者手冊、操作手冊,產品上限測試,監督軟體開發過程執行,提高軟體質量。
11.缺陷(bug)等級分類?
致命:測試過程宕機、系統崩潰、資料跌勢、功能沒有實現
嚴重:導致軟體功能不穩定、功能實現錯誤、流程錯誤
一般:校驗錯誤、罕見故障、錯別字,不影響功能,影響體驗
低階:沒影響的小問題
12.使用bugzilla缺陷管理工具對軟體缺陷(BUG)跟蹤的管理的流程?
答:1) 測試人員或開發人員發現bug後,判斷屬於哪個模組的問題,填寫bug報告後,系統會自動通過Email通知專案組長或直接通知開發者。
2) 經驗證無誤後,修改狀態為VERIFIED(已證實).待整個產品釋出後,修改為CLOSED(關閉)
3) 還有問題,REOPENED(重新開啟),狀態重新變為“New",併發郵件通知。
4) 專案組長根據具體情況,重新分配給bug所屬的開發者。
5) 若是,進行處理,斷言並給出解決方法。(可建立補丁附件及補充說明)
6) 開發者收到Email資訊後,判斷是否為自己的修改範圍。
7) 若不是,重新分配給專案組長或應該分配的開發者。
8) 測試人員查詢開發者已修改的bug,進行重新測試。確認無誤後,關閉該bug。
13.缺陷報告由哪些組成?(測試報告,測試用例)
缺陷編號、日期、缺陷標題、 缺陷優先程度、缺陷所屬模組、缺陷所屬版本、執行流程、預計結果、輸出結果、缺陷分析、缺陷所屬開發 人員、缺陷描述缺陷有限等級等。提高質量:要有效的發現 Bug 需參考需求以及詳細設計等前期文件設計出高效的測試用例,然後嚴格執行測試用例,對發現的問題要充分確認肯定,然後再向外發布如此才能提高提交 Bug 的質量。
測試報告:專案說明 測試依據 人員及進度 測試概要 測試環境 測試用例 測試方法 覆蓋分析 需求覆蓋 測試覆蓋
14.如何設計測試用例?
測試用例(Test Case)是為某個特殊目標而編制的一組測試輸入、執行條件以及預期結果,以便測試某個程式路徑或核實是否滿足某個特定需求。檢驗是否滿足客戶需求;度量測試人員的工作量;展現測試用例的思路。
測試用例包含:
用例編號 唯一的編號。
用例標題 當前測試用例的用途
測試背景 這個用例屬於哪個專案
前置條件 用例執行前應該滿足哪些條件
重要級別 定義優先順序,分為高低級別
測試資料 具體輸入內容
測試步驟 每步做些什麼
預期結果 需求文件要求結果
實際結果 實際輸出結果
備註
測試用例編寫流程:需求分析--》提取測試點--》測試用例編寫--》測試用例評審
測試用例常用設計方法:等價類劃分法、 邊界值分析法、因果圖法、場景法、正交表、測試大綱法、錯誤推斷法、隨機測試
15.測試計劃編寫:
編寫測試計: 測試環境準備、 第一次功能測試、 效能測試、 迴歸測試、 測試報告總結
1. 測試目標:根據xxx需求,提煉測試功能點、制定測試策略、評估測試 風險,預估編寫測試用例、執行功能測試和迴歸測試的工作量,進行人員和進度 安排。
2. 測試範圍:功能模組:(需要結合實際情況)
3. 測試策略:對需求中的功能改進進行完整測試,並根據應用場景和併發數考慮相容性和效能測試方案。 並需要指定出測試工具
3.1 功能測試:見測試用例表
3.2 效能測試
3.3 系統相容性測試
4. 測試資源
4.1 人員安排
4.2 測試環境
4.3 bug管理
5試進度安排:任務 時間 執行人員 工作量
5.2輸出文件:測試計劃、測試報告
6測試驗收標準:1.完成所有型別測試 ,沒有影響到使用者業務使用的bug ,bug數量少於一定數量 ,功能業務,效能指標符合需求
6.2 產品上線標準:產品 checkelist
1. 已按照互動文件、需求文件完全的實現需求;
2. 符合互動稿的互動設計規範、符合視覺要求,已經通過設計評審;
3. 允許遺留可能會對使用者正常使用造成一定影響的正常級缺陷,但應在釋出前告知專案組,並經風險評估同意釋出後方可釋出
7. 風險說明
主要包括三個方面:1.測試範圍風險 (測試遺漏,需求變更)、2.測試進度風險(預估量不準確,測試人員變動,其他業務工作,)、3.產品質量風險(程式碼質量,測試人員能力)
16.軟體測試的原則:
1.測試軟體存在缺陷。證明測試物件是有缺陷的。
2.測試儘早介入,缺陷發現越早,修復成本越小。
3.不可進行窮盡測試(無意義測試)。
4.缺陷叢集性(2/8原則)80%的缺陷發現在20%的模組中。
5.殺蟲劑悖論,如果一直使用相同的測試方法或手段,可能無法發現新的bug。
6.測試環境的特殊新,測試活動依賴測試內容,不同的行業,測試活動的開展都有所不同,比如測試技術、測試工具的選擇,測試流程都不盡相同,所以軟體測試的活動開展依賴於所測試的內容
7.不存在缺陷謬論,軟體測試不僅是找出缺陷,同時也需要確認軟體是否滿足需求。
17.簡述整合測試的環境?
1.硬體環境:整合測試時,要儘可能的考慮使用者使用的實際環境;當實際環境難以達到的時候,模擬環境考慮到與實際環境之間 可能存在的差異。
2.作業系統環境:考慮到不同的作業系統版本,對於可能使用的作業系統環境,要儘可能的測試到。
3.資料庫環境:資料庫的選擇合乎實際情況。容量,效能,版本等多方面考慮。
4.網路環境:一般的網路環境可以使用乙太網、wifi、3G、4G。
18.整合測試通常都有那些策略?
大爆炸整合
2、自頂向下整合
3、自底向上整合
4、三明治整合適應於大部分軟體開發專案
5、基幹整合
6、分層整合
7、基於功能的整合
8、基於訊息的整合
9、基於風險的整合
10、基於進度的整合
19.測試策略:
功能測試,效能測試,壓力測試,容量測試,安全性測試,GUI測試,可用性測試,安裝測試,配置測試,
異常測試,備份測試,健壯性測試,文件測試,線上幫助測試,網路測試,穩定性測試
在:正常情況下測試;非正常情況下測試;邊界測試;非法,極端測試;
20.什麼是測試指令碼?
測試指令碼是為了進行自動化測試而編寫的指令碼,測試指令碼的編寫必須對應相應的測試用例
測試指令碼是一段程式碼不假。但是這段程式碼可能是為了執行某一條,或很多條測試用例而寫的。也有可能 ,本身就是一條用例。
用例本身並不侷限,在基於功能。指令碼和用例沒有並列的可比性。指令碼可能是用例,也可能是執行用例用的功能。用例也可能是指令碼。
21.軟體產品質量特性是什麼? ?
功能性:適應性、準確性、互操作性、依從性、安全性。
可使用性:易理解性、易學習性、易操作性。
效率:時間特性、資源特性。
可維護性:易分析性、易變更性、穩定性、易測試性。
可移植性: 適應性、易安裝性、遵循性、易替換性。
22. 一臺客戶端有三百個客戶與三百個客戶端有三百個客戶對伺服器施壓,有什麼區別?
300個使用者在一個客戶端上,會佔用客戶機更多的資源,而影響測試的結果。執行緒之間可能發生干擾,而產生一些異常。300個使用者在一個客戶端上,需要更大的頻寬。
IP地址的問題,可能需要使用IP Spoof來繞過伺服器對於單一IP地址最大連線數的限制。
所有使用者在一個客戶端上,不必考慮分散式管理的問題;而使用者分佈在不同的客戶端上,需要考慮使用控制器來整體調配不同客戶機上的使用者。同時,還需要給予相應的許可權配置和防火牆設定。
23.使用QTP做功能測試,錄製指令碼的時候,要驗證多個使用者的登入情況/查詢情況,如何操作?
分析使用者登入的基本情況,得出一組資料,通過性測試/失敗性測試的都有(根據TC來設計這些資料),然後錄製登入的指令碼,將關鍵的資料引數化,修改指令碼,對程式碼進行加強,除錯指令碼。
QTP中的action主要是用來管理程式碼的,Action的作用1)用Action可以對步驟集進行分組2)步驟重組,然後被整體呼叫3)擁有自己的sheet4)組合有相同需求的步驟,整體操作5)具有獨立的物件倉庫
24.TestDirector有些什麼功能,如何對軟體測試過程進行管理?
管理測試需求,測試計劃以及缺陷跟蹤分析,主要有五個模組:1.服務測試管理器、2.需求管理器、3.測試實驗室、4.缺陷管理器、5.測試計劃 保證各階段之間順暢的資訊流,完全基於Web。
業務分析員:定義應用程式需求和測試目標
QA測試員:運用手動和自動測試,報告執行測試結果,輸入缺陷
開發人員:資料庫檢視和解決缺陷
測試經理和專案經理:設計測試計劃,開發測試案例
產品經理:決定是否準備釋出應用
25.測試自動化和自動化測試的區別?
什麼是測試自動化:這是一種讓測試過程脫離人工的一次變革。對於控制成本,控制質量,回溯質量和減少測試周期都有積極影響的一種研發過程。
什麼是自動化測試:通過將測試執行部分部分或者全部交由機器執行的一種測試,叫做自動化測試。這種測試不需要人的實時參與。同時這種測試在小規模應用時會比手動測試昂貴許多。
自動化測試可以看作測試自動化的一部分。
一個自動化工程師,會比較專注於測試工具的研發。最主要的是這個工程師會從成本的角度去考慮問題。這一點比較像PM。他所做的一切是為了減少自己或者團隊的工作量,儘可能的將重複的,有規律可循的工作程式碼化,自動化。
一個自動化測試工程師,會比較專注於測試程式碼的開發,以及測試結果的分析。對於被測裝置本身非常感興趣。他們比較傾向於一種完美主義者,追求的是高質量而經常忽略成本。這一點更像開發人員。
26.公司的測試環境?
開發環境:開發環境是程式猿們專門用於開發的伺服器,配置可以比較隨意, 為了開發除錯方便,一般開啟全部錯誤報告。
測試環境:一般是克隆一份生產環境的配置,一個程式在測試環境工作不正常,那麼肯定不能把它釋出到生產機上。
生產環境:是指正式提供對外服務的,一般會關掉錯誤報告,開啟錯誤日誌。可以理解為包含所有的功能的環境,任何專案所使用的環境都以這個為基礎,然後根據客戶的個性化需求來做調整或者修改。
三個環境也可以說是系統開發的三個階段:開發->測試->上線,其中生產環境也就是通常說的真實環境。
UAT環境:UAT,(User Acceptance Test),使用者接受度測試 即驗收測試,所以UAT環境主要是用來作為客戶體驗的環境。
模擬環境:顧名思義是和真正使用的環境一樣的環境(即已經出售給客戶的系統所在環境,也成為商用環境),所有的配置,頁面展示等都應該和商家正在使用的一樣,差別只在環境的效能方面。
27.公司做安全測試是怎麼進行的?
軟體安全性測試主要包括程式、資料庫安全性測試。根據系統安全指標不同測試策略也不同。
詳細的測試點:
1.跨網站指令碼攻擊:通過指令碼語言的缺陷模擬合法使用者,控制其賬戶,盜竊敏感資料
2.注入攻擊:通過構造查詢對資料庫、LDAP和其他系統進行非法查詢
3.惡意檔案執行:在伺服器上執行Shell 命令Execute,獲取控制權
4.偽造跨站點請求:發起Blind 請求,模擬合法使用者,要求轉賬等請求
5.不安全物件引用:不安全物件的引入,訪問敏感檔案和資源,WEB應用返回敏感檔案內容
6.被破壞的認證和Session管理:驗證Session token 保護措施,防止盜竊session
7.Session的失效時間限制:Session的失效時間設定是否過長,會造成訪問風險
8.不安全的木馬儲存:過於簡單的加密技術導致黑客破解編密碼,隱祕資訊被盜竊,驗證其資料加密
9.不安全的通訊:敏感資訊在不安全通道中以非加密方式傳送, 敏感資訊被盜竊,驗證其通訊的安全性
10.URL訪問限制失效:驗證是否通過惡意手段訪問非授權的資源連結,強行訪問一些登陸網頁,竊取敏感資訊
11.資訊洩露和不正確錯誤處理測試:惡意系統檢測,防止黑客用獲取WEB站點的具體資訊的攻擊手段獲取詳細系統資訊
12.註冊與登入測試:驗證系統先註冊後登入、驗證登入使用者名稱和密碼匹配校驗,密碼長度及嘗試登入次數,防止 非法使用者登入
13.超時限制:驗證WEB應用系統需要有是否超時的限制,當用戶長時間不做任何操作的時候,需要重新登入才能使用
14.日誌檔案:驗證伺服器上日誌是否正常工作,所有事務處理是否被記錄
15.目錄檔案:驗證WEB伺服器目錄訪問許可權或者每個目錄訪問時有index.htm,防止 WEB 伺服器處理不適當,將整個目錄暴露
16.身份驗證:驗證呼叫者身份、資料庫身份、驗證是否明確服務賬戶要求、是否強制式試用賬戶管理措施
17.授權:驗證如何向終端使用者授權、如何在資料庫中授權應用程式,確定訪問系統資源許可權
18.會話:驗證如何交換會話識別符號、是否限制會話生存期、如何確保會話儲存狀態安全
19.配置管理:驗證是否支援遠端管理、是否保證配置儲存安全、是否隔離管理員特權
20.備份與恢復:為了防止系統意外崩潰造成的資料丟失,驗證備份與恢復功能正常實現、備份與恢復方式是否滿足Web系統安全性要求
21.資料庫關鍵資料是否進行加密儲存,是否在網路中傳遞敏感資料
22.在登入或註冊功能中是否有驗證碼存在,防止惡意大批量註冊登入的攻擊
23.Cookie檔案是否進行了加密儲存,防止盜用cookie內容
24.密碼強度提醒:建議對密碼的規則進行加強設定
25.密碼內容禁止拷貝貼上
使用者身份認證安全的測試要考慮問題:
1.明確區分系統中不同使用者許可權
2.系統中會不會出現使用者衝突
3.系統會不會因使用者的許可權的改變造成混亂
4.使用者登陸密碼是否是可見、可複製
5.系統的密碼策略,通常涉及到隱私,錢財或機密性的系統必須設定高可用的密碼策略。
5.是否可以通過絕對途徑登陸系統(拷貝使用者登陸後的連結直接進入系統)
6.使用者推出系統後是否刪除了所有鑑權標記,是否可以使用後退鍵而不通過輸入口令進入系統
系統網路安全的測試要考慮問題:
1.測試採取的防護措施是否正確裝配好,有關係統的補丁是否打上
2.模擬非授權攻擊,看防護系統是否堅固
3.採用成熟的網路漏洞檢查工具檢查系統相關漏洞(即用最專業的黑客攻擊工具攻擊試一下,現在最常用的是 NBSI系列和 IPhacker IP )
4.採用各種木馬檢查工具檢查系統木馬情況
5.採用各種防外掛工具檢查系統各組程式的客外掛漏洞
資料庫安全考慮問題:
1.系統資料是否機密(比如對銀行系統,這一點就特別重要,一般的網站就沒有太高要求)
2.系統資料的完整性(我剛剛結束的企業實名核查服務系統中就曾存在資料的不完整,對於這個系統的功能實現有了障礙)
3.系統資料可管理性
4.系統資料的獨立性
5.系統資料可備份和恢復能力(資料備份是否完整,可否恢復,恢復是否可以完整)
瀏覽器安全
同源策略:不同源的“document”或指令碼,不能讀取或者設定當前的“document”
同源定義:host(域名,或者IP),port(埠號),protocol(協議)三者一致才屬於同源。
要注意的是,同源策略只是一種策略,而非實現。這個策略被用於一些特定的點來保護web的安全。
<script>,<img>,<iframe>,<link>等標籤都可以跨域載入資源,不受同源策略的限制。
XMLHttpRequest,DOM,cookie受到同源策略的限制。
網站可以通過提供crossdomain.xml來允許某些源跨域訪問自己的資源。
google chrome使用了多程序來隔離程式碼執行的環境,從而起到提高web安全的作用
Q & A
Q:cookie為什麼需要同源策略?
A:cookie有同源策略是必須的,這樣可以保證A網站的使用者(識別)資訊不會被B網站獲取到
Q:XMLHttpRequest為什麼需要同源策略?
A:兩個例子:
(1)加入沒有同源策略,某個網站的某張頁面被你寫入了一些js ,這些js有些ajax操作,如果某個使用者訪問了這張頁面,你的js就可以獲得使用者的某些資訊(cookie,本地檔案等)然後通過ajax傳送回你的伺服器。 這就是安全問題,資訊洩漏。
(2)先假設瀏覽器沒有限制跨域,A站的xhr請求B站的一個url,那麼瀏覽器是要帶上誰家的cookie一起請求呢?(每次http請求都要帶上該站下的所有cookie)顯然是B家的。假設B家的網站當前使用者已經登入,那麼cookie裡自然記錄下了sessionId相關的東西以標識當前使用者的身份,那麼本次xhr請求很easy的通過了身份認證,然後後果就是不堪設想的。
這個就很正確,如果A可以用xhr跨站訪問B,帶著B的cookie自然可以通過B網站的驗證,從而獲取到敏感資料。所以這點是關鍵。
web安全測試方法:
工具掃描
目前web安全掃描器針對OSinjection, XSS、SQL injection 、OPEN redirect 、PHP File Include漏洞的檢測技術已經比較成熟。
商業軟體web安全掃描器:有IBM Rational Appscan、WebInspect、Acunetix WVS 、burp suite免費的掃描器:W3af 、Skipfish根據業務資金,可以考慮購買商業掃描軟體,也可以使用免費的,各有各的好處。
首頁可以對網站進行大規模的掃描操作,工具掃描確認沒有漏洞或者漏洞已經修復後,再進行以下手工檢測。
關於越權操作的問題
例如A使用者的個人資料ID為1 B使用者個人資料ID為2,我通過登陸B使用者,把ID修改為1 就可以檢視到使用者A的個人資料,這就是越權。
測試方法:通過檢視URL的get引數對那些類似明顯的順序數字 進行修改,看是否能越權訪問。
關於登陸安全的問題
除了SQL注入,還有找回密碼功能會出現安全問題
郵箱找回密碼測試方法:
先從郵箱引數修改開始,看填入使用者名稱和自己修改的郵箱賬號,看是否能收到郵箱,收到後是否能修改。
如果不能修改郵箱引數那麼,我們就讓它郵箱找回,接著點選郵箱內修改密碼的連結,看連結的郵箱引數是否可以修改,使用者名稱是否可以修改,加密的urlcode 是否可以逆向解密。
如果是手機找回密碼功能:則測試手機收到的驗證碼是否是純數字、純字母的,如果是請修改為字母與數字的組合。
關於用開源程式的問題
關注網上你所用的開源程式的官網更新情況和安全事件。
關於上傳:
1.上傳檔案是否有格式限制,是否可以上傳exe檔案;
2.上傳檔案是否有大小限制,上傳太大的檔案是否導致異常錯誤,上傳0K的檔案是否會導致異常錯誤,上傳並不存在的檔案是否會導致異常錯誤;
3.通過修改副檔名的方式是否可以繞過格式限制,是否可以通過壓包方式繞過格式限制;
4.是否有上傳空間的限制,是否可以超過空間所限制的大小,如將超過空間的大檔案拆分上傳是否會出現異常錯誤。
5.上傳檔案大小大於本地剩餘空間大小,是否會出現異常錯誤。
6.關於上傳是否成功的判斷。上傳過程中,中斷。程式是否判斷上傳是否成功。
7.對於檔名中帶有中文字元,特殊字元等的檔案上傳。
28.移動端測試:
Android手機和IOS手機,系統有什麼區別?
1、兩者執行機制不同:IOS採用的是沙盒執行機制,安卓採用的是虛擬機器執行機制。
2、兩者後臺制度不同:IOS中任何第三方程式都不能在後臺執行;安卓中任何程式都能在後臺執行,直到沒有記憶體才會關閉。
3、IOS中用於UI指令許可權最高,安卓中資料處理指令許可權最高。
Android:
1:使用灰盒進行功能測試
2:使用fiddler或者Charles進行抓包測試
3:相容性測試,Android 從4.0版本的手機測試到9.0版本手機
4:各大品牌的手機都的進行測試,比如:小米小米9 小米8 小米7 小米6 note 紅米系列 7紅米5,華為: 華為mate20 華為mate10,華為榮耀: 榮耀10,9,8 ,vivo: x21,27,23,oppo: R7,R9,R11,三星手機: note9, 8,7 S9,8。
5:穩定性測試: 使用monkey命令進行穩定性測試
6:專項測試,使用騰訊專項測試工具進行,測試耗電量,流量,CPU佔用率
7:效能測試,對app的介面進行效能測試,使用工具jmeter或者loadrunner
8:對app介面進行介面測試,使用postman或者Jmeter都行
9:如果有時間寫自動化指令碼
ios:
1:使用灰盒進行功能測試
2:使用fiddler或者Charles進行抓包測試
3:相容性測試:ios版本測試從9-12,手機型號從4S測試到xmax
4:效能測試介面和安卓的是一樣的所以只需要進行一次就可以了
5:專項測試:使用騰訊專項測試工具進行,測試耗電量,流量,CPU佔用率
6:編寫自動化指令碼
29.web端測試:
前端 :
1:web也使用灰&測試方法
2:相容性測試:IE瀏覽器7-12,火狐瀏覽器 35-最新的,谷歌瀏覽器,別的瀏覽器有時間就可以測試
3:對web端頁面進行效能測試,使用jmeter或者loadrunner
後端
1:測試http介面
2:測試https介面
3:測試tcp介面
4:測試dubbo介面
5:對後臺程式碼進行程式碼稽核,進行白盒測試
30.軟體測試模型?
1,傳統的瀑布模型
瀑布模型的優缺點
2,V模型
3,W模型
4,X模型
31.在Windows上執行得很慢,怎麼判別是程式存在問題還是軟硬體系統存在問題?
1、檢查系統是否有中毒的特徵 2、檢查軟體/硬體的配置是否符合軟體的推薦標準
3、如果是C/S或者B/S結構的軟體,需要檢查是不是因為與伺服器的連線問題或者訪問問題造成的
4、確認當前的系統是否是獨立,是否存在負載,無對外提供消耗CPU資源的服務,檢視效能監視器,確認應用程式對CPU/記憶體的訪問情況
32.MySQL外連線、內連線的區別?
內連線 :連線的資料表相對應的匹配欄位完全相等的連線。連線關鍵字是inner join
外連線:分為左外連線與右外連線、全連線。
左連線的結果集包括指定的左表全部資料與匹配的右表資料,右表中沒匹配的全為空值.關鍵字left join
右連線的結果集包含指定的右表全部資料與匹配的左邊資料,左邊中沒匹配的全為空值.關鍵字 right join
全連線返回左右資料表的所有行.關鍵字 full join
33.測試通過的標準是什麼?
從微觀上來說,在測試計劃中定義,比如系統在一定效能下平穩執行 72 小時,目前 Bug
Tracking System 中,本版本中沒有一般嚴重的 BUG,普通 BUG 的數量在 3 以下,BUG 修復
率 90%以上等等引數,然後由開發經理,測試經理,專案經理共同簽字認同版本 Release。
34.測試退出標準:
單元測試退出標準
1) 單元測試用例設計已經通過評審
2) 核心程式碼100% 經過Code Review
3) 單元測試功能覆蓋率達到100%
4) 單元測試程式碼行覆蓋率不低於80%
5) 所有發現缺陷至少60%都納入缺陷追蹤系統且各級缺陷修復率達到標準
6) 不存在A、B類缺陷
7) C、D、E類缺陷允許存在
8) 按照單元測試用例完成了所有規定單元的測試
9) 軟體單元功能與設計一致
整合測試退出標準
1) 整合測試用例設計已經通過評審
2) 所有原始碼和可執行程式碼已經建立受控基線,納入配置管理受控庫,不經過審批不能隨意更改
3) 按照整合構件計劃及增量整合策略完成了整個系統的整合測試
4) 達到了測試計劃中關於整合測試所規定的覆蓋率的要求
5) 整合工作版本滿足設計定義的各項功能、效能要求
6) 在整合測試中發現的錯誤已經得到修改,各級缺陷修復率達到標準
7) A、B類BUG不能存在
8) C、D類BUG允許存在,但不能超過單元測試總BUG的50%。
9) E類BUG允許存在
系統測試退出標準
1) 系統測試用例設計已經通過評審
2) 按照系統測試計劃完成了系統測試
3) 系統測試的功能覆蓋率達100%
4) 系統的功能和效能滿足產品需求規格說明書的要求
5) 在系統測試中發現的錯誤已經得到修改並且各級缺陷修復率達到標準
6) 系統測試後不存在A、B、C類缺陷
7) D類缺陷允許存在,不超過總缺陷的5%
8) E類缺陷允許存在,不超過總缺陷的10%
注:這只是一套比較理想化的退出標準,但在實際工作中不可能達到這種程度,尤其是測試覆蓋率和缺陷解決率不可能是100%。現在的軍方標準是達到99%。對於通用軟體來說就要根據公司實際情況了。
39.檢視LINUX程序記憶體佔用
1、lsof -i:埠號
2、netstat -tunlp|grep 埠號都可以檢視指定埠被哪個程序佔用的情況
檢視所有埠、程序的使用情況:netstat -tunlp
檢視某一埠的使用情況: netstat -tunlp|grep 5560
在命令列中輸入 “top”
即可啟動 top, top 的全屏對話模式可分為3部分:系統資訊欄、命令輸入欄、程序列表欄。
第一部分 -- 最上部的 系統資訊欄 :
第一行(top):“00:11:04”為系統當前時刻;“3:35”為系統啟動後到現在的運作時間;
“2 users”為當前登入到系統的使用者,更確切的說是登入到使用者的終端數 -- 同一個使用者同一時間對系統多個終端的連線將被視為多個使用者連線到系統,這裡的使用者數也將表現為終端的數目;
“load average”為當前系統負載的平均值,後面的三個值分別為1分鐘前、5分鐘前、15分鐘前程序的平均數,一般的可以認為這個數值超過 CPU 數目時,CPU 將比較吃力的負載當前系統所包含的程序;
第二行(Tasks):
“59 total”為當前系統程序總數;
“1 running”為當前執行中的程序數;
“58 sleeping”為當前處於等待狀態中的程序數;
“0 stoped”為被停止的系統程序數;
“0 zombie”為被複原的程序數;
第三行(Cpus):分別表示了 CPU 當前的使用率;
第四行(Mem):分別表示了記憶體總量、當前使用量、空閒記憶體量、以及緩衝使用中的記憶體量;
35.資料庫:mysql語句
大型資料庫 Oracle Db2
中型資料庫 sqlserver
小型資料庫 mysql
微型資料庫 sqlite
增:Insert into 表名 value 值
刪:Delect from 表名 where 值
改:Update 表名 set 欄位=欄位 where 欄位;
查:Select * from 表名
自增 auto_increment
主鍵 primary key
非空 not null
唯一 unique
預設值 default
外來鍵 foreign key
-
# 檢視所有的資料庫:SHOW DATABASES ;
-
# 建立一個數據庫:CREATE DATABASE k;
-
# 刪除一個數據庫:DROP DATABASE k;
-
# 使用這個資料庫USE k;
表
-
# 檢視所有的表SHOW TABLES ;
-
# 建立一個表CREATE TABLE n(id INT, name VARCHAR(10));
-
CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name));
-
CREATE TABLE m(id INT, name VARCHAR(10));
-
# 直接將查詢結果匯入或複製到新建立的表 : CREATE TABLE n SELECT * FROM m;
-
# 新建立的表與一個存在的表的資料結構類似: CREATE TABLE m LIKE n;
-
# 臨時表將在你連線MySQL期間存在。當斷開連線時,MySQL將自動刪除表並釋放所用的空間。也可手動刪除。
-
CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10));
-
# 直接將查詢結果匯入或複製到新建立的臨時表CREATE TEMPORARY TABLE tt SELECT * FROM n;
-
# 刪除一個存在表DROP TABLE IF EXISTS m;
-
# 更改存在表的名稱
-
ALTER TABLE n RENAME m;
-
RENAME TABLE n TO m;
-
# 查看錶的結構(以下五條語句效果相同)
-
DESC n; # 因為簡單,所以建議使用
-
DESCRIBE n;
-
SHOW COLUMNS IN n;
-
SHOW COLUMNS FROM n;
-
EXPLAIN n;
-
# 查看錶的建立語句
-
SHOW CREATE TABLE n;
表的結構
-
# 新增欄位:ALTER TABLE n ADD age VARCHAR(2) ;
-
# 刪除欄位:ALTER TABLE n DROP age;
-
# 更改欄位屬性和屬性:ALTER TABLE n CHANGE age a INT;
-
# 只更改欄位屬性:ALTER TABLE n MODIFY age VARCHAR(7) ;
表的資料
-
# 增加資料
-
INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');
-
INSERT INTO n SELECT * FROM n; # 把資料複製一遍重新插入
-
# 刪除資料:DELETE FROM n WHERE id = 2;
-
# 更改資料:UPDATE n SET name = 'tom' WHERE id = 2;
-
# 資料查詢 :SELECT * FROM n WHERE name LIKE '%h%';
-
# 資料排序(反序) :SELECT * FROM n ORDER BY name, id DESC ;
鍵
-
# 新增主鍵:ALTER TABLE n ADD PRIMARY KEY (id);
-
# 刪除主鍵:ALTER TABLE n DROP PRIMARY KEY ;
-
# 新增外來鍵
-
ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id); # 自動生成鍵名m_ibfk_1
-
ALTER TABLE m ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES n(id); # 使用定義的鍵名fk_id
-
# 刪除外來鍵:ALTER TABLE m DROP FOREIGN KEY `fk_id`;
-
# 修改外來鍵:ALTER TABLE m DROP FOREIGN KEY `fk_id`, ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id); # 刪除之後從新建
聯接
-
# 內聯接:SELECT * FROM m INNER JOIN n ON m.id = n.id;
-
# 左外聯接 :SELECT * FROM m LEFT JOIN n ON m.id = n.id;
-
# 右外聯接:SELECT * FROM m RIGHT JOIN n ON m.id = n.id;
-
# 交叉聯接:SELECT * FROM m CROSS JOIN n; # 標準寫法
-
# 類似全連線full join的聯接用法
-
SELECT id,name FROM m
-
UNION
-
SELECT id,name FROM n;
函式
-
# 聚合函式
-
SELECT count(id) AS total FROM n; # 總數
-
SELECT sum(age) AS all_age FROM n; # 總和
-
SELECT avg(age) AS all_age FROM n; # 平均值
-
SELECT max(age) AS all_age FROM n; # 最大值
-
SELECT min(age) AS all_age FROM n; # 最小值
-
# 數學函式
-
SELECT abs(-5); # 絕對值
-
SELECT bin(15), oct(15), hex(15); # 二進位制,八進位制,十六進位制
-
SELECT pi(); # 圓周率3.141593
-
SELECT ceil(5.5); # 大於x的最小整數值6
-
SELECT floor(5.5); # 小於x的最大整數值5
-
SELECT greatest(3,1,4,1,5,9,2,6); # 返回集合中最大的值9
-
SELECT least(3,1,4,1,5,9,2,6); # 返回集合中最小的值1
-
SELECT mod(5,3); # 餘數2
-
SELECT rand(); # 返回0到1內的隨機值,每次不一樣
-
SELECT rand(5); # 提供一個引數(種子)使RAND()隨機數生成器生成一個指定的值。
-
SELECT round(1415.1415); # 四捨五入1415
-
SELECT round(1415.1415, 3); # 四捨五入三位數1415.142
-
SELECT round(1415.1415, -1); # 四捨五入整數位數1420
-
SELECT truncate(1415.1415, 3); # 截短為3位小數1415.141
-
SELECT truncate(1415.1415, -1); # 截短為-1位小數1410
-
SELECT sign(-5); # 符號的值負數-1
-
SELECT sign(5); # 符號的值正數1
-
SELECT sqrt(9); # 平方根3
-
SELECT sqrt(9); # 平方根3
-
# 字串函式
-
SELECT concat('a', 'p', 'p', 'le'); # 連線字串-apple
-
SELECT concat_ws(',', 'a', 'p', 'p', 'le'); # 連線用','分割字串-a,p,p,le
-
SELECT insert('chinese', 3, 2, 'IN'); # 將字串'chinese'從3位置開始的2個字元替換為'IN'-chINese
-
SELECT left('chinese', 4); # 返回字串'chinese'左邊的4個字元-chin
-
SELECT right('chinese', 3); # 返回字串'chinese'右邊的3個字元-ese
-
SELECT substring('chinese', 3); # 返回字串'chinese'第三個字元之後的子字串-inese
-
SELECT substring('chinese', -3); # 返回字串'chinese'倒數第三個字元之後的子字串-ese
-
SELECT substring('chinese', 3, 2); # 返回字串'chinese'第三個字元之後的兩個字元-in
-
SELECT trim(' chinese '); # 切割字串' chinese '兩邊的空字元-'chinese'
-
SELECT ltrim(' chinese '); # 切割字串' chinese '兩邊的空字元-'chinese '
-
SELECT rtrim(' chinese '); # 切割字串' chinese '兩邊的空字元-' chinese'
-
SELECT repeat('boy', 3); # 重複字元'boy'三次-'boyboyboy'
-
SELECT reverse('chinese'); # 反向排序-'esenihc'
-
SELECT length('chinese'); # 返回字串的長度-7
-
SELECT upper('chINese'), lower('chINese'); # 大寫小寫 CHINESE chinese
-
SELECT ucase('chINese'), lcase('chINese'); # 大寫小寫 CHINESE chinese
-
SELECT position('i' IN 'chinese'); # 返回'i'在'chinese'的第一個位置-3
-
SELECT position('e' IN 'chinese'); # 返回'i'在'chinese'的第一個位置-5
-
SELECT strcmp('abc', 'abd'); # 比較字串,第一個引數小於第二個返回負數- -1
-
SELECT strcmp('abc', 'abb'); # 比較字串,第一個引數大於第二個返回正數- 1
-
# 時間函式
-
SELECT current_date, current_time, now(); # 2018-01-13 12:33:43 2018-01-13 12:33:43
-
SELECT hour(current_time), minute(current_time), second(current_time); # 12 31 34
-
SELECT year(current_date), month(current_date), week(current_date); # 2018 1 1
-
SELECT quarter(current_date); # 1
-
SELECT monthname(current_date), dayname(current_date); # January Saturday
-
SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date); # 7 13 13
-
# 控制流函式
-
SELECT if(3>2, 't', 'f'), if(3<2, 't', 'f'); # t f
-
SELECT ifnull(NULL, 't'), ifnull(2, 't'); # t 2
-
SELECT isnull(1), isnull(1/0); # 0 1 是null返回1,不是null返回0
-
SELECT nullif('a', 'a'), nullif('a', 'b'); # null a 引數相同或成立返回null,不同或不成立則返回第一個引數
-
SELECT CASE 2
-
WHEN 1 THEN 'first'
-
WHEN 2 THEN 'second'
-
WHEN 3 THEN 'third'
-
ELSE 'other'
-
END ; # second
-
# 系統資訊函式
-
SELECT database(); # 當前資料庫名-test
-
SELECT connection_id(); # 當前使用者id-306
-
SELECT user(); # 當前使用者-root@localhost
-
SELECT version(); # 當前mysql版本
36.Linux命令:
mv 移動資料夾
source 更新
tar -vxzf 解壓
cd /home 進入 '/ home' 目錄'
cd .. 返回上一級目錄
cd ../.. 返回上兩級目錄
cd 進入個人的主目錄
cd ~user1 進入個人的主目錄
cd - 返回上次所在的目錄
pwd 顯示工作路徑
ls 檢視目錄中的檔案
vi 編輯
wq 編輯儲存
ls -F 檢視目錄中的檔案
ls -l 顯示檔案和目錄的詳細資料
ls -a 顯示隱藏檔案
ls *[0-9]* 顯示包含數字的檔名和目錄名
tree 顯示檔案和目錄由根目錄開始的樹形結構
lstree 顯示檔案和目錄由根目錄開始的樹形結構
mkdir dir1 建立一個叫做 'dir1' 的目錄'
mkdir dir1 dir2 同時建立兩個目錄
mkdir -p /tmp/dir1/dir2 建立一個目錄樹
rm -f file1 刪除一個叫做 'file1' 的檔案'
rmdir dir1 刪除一個叫做 'dir1' 的目錄'
rm -rf dir1 刪除一個叫做 'dir1' 的目錄並同時刪除其內容
rm -rf dir1 dir2 同時刪除兩個目錄及它們的內容
mv dir1 new_dir 重新命名/移動 一個目錄
cp file1 file2 複製一個檔案
cp dir/* . 複製一個目錄下的所有檔案到當前工作目錄
cp -a /tmp/dir1 . 複製一個目錄到當前工作目錄
cp -a dir1 dir2 複製一個目錄
ln -s file1 lnk1 建立一個指向檔案或目錄的軟連結
ln file1 lnk1 建立一個指向檔案或目錄的物理連結
檔案搜尋
find / -name file1 從 '/' 開始進入根檔案系統搜尋檔案和目錄
find / -user user1 搜尋屬於使用者 'user1' 的檔案和目錄
find /home/user1 -name \*.bin 在目錄 '/ home/user1' 中搜索帶有'.bin' 結尾的檔案
find /usr/bin -type f -atime +100 搜尋在過去100天內未被使用過的執行檔案
find /usr/bin -type f -mtime -10 搜尋在10天內被建立或者修改過的檔案
find / -name \*.rpm -exec chmod 755 '{}' \; 搜尋以 '.rpm' 結尾的檔案並定義其許可權
find / -xdev -name \*.rpm 搜尋以 '.rpm' 結尾的檔案,忽略光碟機、捷盤等可移動裝置
locate \*.ps 尋找以 '.ps' 結尾的檔案 - 先執行 'updatedb' 命令
whereis halt 顯示一個二進位制檔案、原始碼或man的位置
which halt 顯示一個二進位制檔案或可執行檔案的完整路徑
37.adb命令:
adb 使用的埠號,5037
adb devices,獲取裝置列表及裝置狀態
adb get-state,獲取裝置的狀態
adb install用於安裝
adb uninstall用於解除安裝
adb push命令將PC機上的檔案推到DLT-RK3288機器上
adb pull命令將DLT-RK3288機器上的檔案拉到PC機上
ls, cd, rm, mkdir, touch, pwd, cp, mv, ifconfig, netstat, ping, ps, top等,進入adb shell即可執行,與linux相似
列印預設日誌資料adb logcat
需要列印日誌詳細時間的簡單資料adb logcat -v time
需要列印級別為Error的資訊adb logcat *:E
- adb help,列出所有的選項說明及子命令
- adb devices , 獲取裝置列表及裝置狀態
- adb get-state , 獲取裝置的狀態,裝置的狀態有 3 鍾,
device
,offline
,unknown,其中device:裝置正常連線,offline:連接出現異常,裝置無響應,unknown:沒有連線裝置
- adb kill-server , adb start-server , 結束 adb 服務, 啟動 adb 服務,通常兩個命令一起用,裝置狀態異常時使用 kill-server,然後執行 start-server 進行重啟服務
- adb logcat , 列印 Android 的系統日誌 adb logcat -c,清除日誌
- adb bugreport , 列印dumpsys、dumpstate、logcat的輸出,也是用於分析錯誤,輸出比較多,建議重定向到一個檔案中,如adb bugreport > d:\bugreport.log
- adb install , 安裝應用,adb install -r 重新安裝
- adb uninstall , 解除安裝應用,後面跟的引數是
應用的包名
,請區別於apk 檔名
- adb pull , 將 Android 裝置上的檔案或者資料夾複製到本地,如例如複製 Sdcard 下的 pull.txt 檔案到 D 盤:adb pull sdcard/pull.txt d:\,重新命名:adb pull sdcard/pull.txt d:\rename.txt
- adb push , 推送本地檔案至 Android 裝置,如推送 D 盤下的 push.txt 至 Sdcard:adb push d:\push.txt sdcard/ sdcard 後面的斜槓不能少
- adb reboot , 重啟 Android 裝置, adb reboot recovery,重啟到Recovery介面 adb reboot bootloader,重啟到bootloader介面
- adb root , adb remount,可以直接已這兩個命令獲取 root 許可權,並掛載系統檔案系統為可讀寫狀態
- adb get-serialno,返回裝置序列號SN值 adbget-product,獲取裝置的ID
- adb forward tcp:5555 tcp:8000,做為主機向模擬器或裝置的請求埠
- adb shell,進入裝置shell
- adb shell pm list package,列出所有的應用的包名
- adb shell screencap -p /sdcard/screen.png ,截圖,儲存至 sdcard 目錄
- adb shell screenrecord sdcard/record.mp4,執行命令後操作手機,ctrl + c 結束錄製,錄製結果儲存至 sdcard
- adb shell wm size,獲取裝置解析度
- adb shell pm dump 包名,列出指定應用的 dump 資訊
- adb shell pm path 包名,列出對應包名的 .apk 位置
- adb shell monkey –p 程式包 –v 測試次數 ,比如“adb shell monkey –p com.htc.Weather –v 20000”意思是對com.htc.Weather 這個程式包單獨進行一次20000次的monkey測試,其中程式包名稱可以在串列埠終端這句命令獲得:ls data/data 顯示所有程式包
- adb shell ps | grep [process],找出對應的程序pid adb shell dumpsys meminfo [pid],根據程序pid檢視程序佔用的記憶體 或者 adb shell dumpsys meminfo<package_name>,package_name 也可以換成程式的pid,pid可以通過 adb shell top | grep app_name 來查詢
- adb shell ps, 檢視當前終端中的程序資訊
- ls//檢視目錄
- date//列印或設定當前系統時間
- cat/proc/meminfo//檢視記憶體資訊
- cat/proc/cpuinfo//檢視CPU資訊
抓取App報錯的log日誌:
按住win+r開啟cmd,cd到安裝adb的目錄下,然後輸入指令:adb logcat -v time > D:\\logcat.log(可以換成其他磁碟) ,輸入完成之後敲擊回車,這個時候在D盤下會生成一個logcat日誌並且將近期的崩潰記錄到這個日誌當中。Ctrl+C以結束擷取操作。
1.adb logcat *:V 不過濾地輸出所有除錯資訊,顯示所有日誌資訊
1.adb logcat *:D Debug來表達除錯資訊,能輸出Debug、Info、Warning、Error級別的Log資訊。
1.adb logcat *:I Info來表達一些資訊,能輸出Info、Warning、Error級別的Log資訊。
1.adb logcat *:W Warning表示警告,查詢崩潰問題一般用:能輸出Warning、Error級別的Log資訊
2.adb logcat *:E Error表示出現錯誤,能輸出Error級別的Log資訊。
40.Monkey命令
檢視裝置的連結情況:adb devices
手機裡面的軟體隨機點選:adb shell monkey 1000
檢視包名(-s只查詢系統包名,-3只檢視第三方包,-f輸出包和包相關聯的檔案,-e只輸出啟用的包,-i只輸出包和安裝資訊,-u只輸出包和未安裝包資訊,都不加顯示所有,):adb shell pm list packages -s
啟動一個指定包名:adb shell monkey -p com.dyhoa.school1000
操作日誌:adb shell monkey -p com.tencent.mobileqq -v -v 100
1 引數: -p 用於約束限制,用此引數指定一個或多個包(Package,即App)。指定包之後,monkey將只允許系統啟動指定的APP,如果不指定包,將允許系統啟動裝置中的所有APP.
* 指定一個包: adb shell monkey -p cn.emoney.acg 10
* 指定多個包:adb shell monkey -p cn.emoney.acg –p cn.emoney.wea -p cn.emoney.acg 100
* 不指定包:adb shell monkey 100
2 引數: -v用於指定反饋資訊級別(資訊級別就是日誌的詳細程度),總共分3個級別,分別對應的引數如下表所示:
日誌級別 0
示例 adb shell monkey -p cn.emoney.acg –v 100
說明預設值,僅提供啟動提示、測試完成和最終結果等少量資訊
日誌級別1
示例 adb shell monkey -p cn.emoney.acg –v -v 100
說明提供較為詳細的日誌,包括每個傳送到Activity的事件資訊
日誌級別 2
示例 adb shell monkey -p cn.emoney.acg –v -v –v 100
說明最詳細的日誌,包括了測試中選中/未選中的Activity資訊
3 引數: -s
用於指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。
Monkey 測試1:adb shell monkey -p cn.emoney.acg -s 10 100
Monkey 測試2:adb shell monkey -p cn.emoney.acg –s 10 100
兩次測試的效果是相同的,因為模擬的使用者操作序列(每次操作按照一定的先後順序所組成的一系列操作,即一個序列)是一樣的。
4 引數: --throttle<毫秒>用於指定使用者操作(即事件)間的時延,單位是毫秒;
adb shell monkey -p cn.emoney.acg --throttle 5000 100
5 引數: --ignore-crashes 用於指定當應用程式崩潰時(Force& Close錯誤),Monkey是否停止執行。如果使用此引數,即使應用程式崩潰,Monkey依然會發送事件,直到事件計數完成。
adb shell monkey -p cn.emoney.acg --ignore-crashes 1000 測試過程中即使程式崩潰,Monkey依然會繼續傳送事件直到事件數目達到1000為止
adb shell monkey -p cn.emoney.acg 1000 測試過程中,如果acg程式崩潰,Monkey將會停止執行
6 引數: --ignore-timeouts 用於指定當應用程式發生ANR(Application No Responding)錯誤時,Monkey是否停止執行。如果使用此引數,即使應用程式發生ANR錯誤,Monkey依然會發送事件,直到事件計數完成。
adb shellmonkey -p cn.emoney.acg --ignore-timeouts 1000
7 引數: --ignore-security-exceptions 用於指定當應用程式發生許可錯誤時(如證書許可,網路許可等),Monkey是否停止執行。如果使用此引數,即使應用程式發生許可錯誤,Monkey依然會發送事件,直到事件計數完成。
adb shellmonkey -p cn.emoney.acg --ignore-security-exception 1000
8 引數: --kill-process-after-error 用於指定當應用程式發生錯誤時,是否停止其執行。如果指定此引數,當應用程式發生錯誤時,應用程式停止執行並保持在當前狀態。應用程式僅是靜止在發生錯誤時的狀態,系統並不會結束該應用程式的程序
adb shellmonkey -p cn.emoney.acg --kill-process-after-error 1000
9 引數: --monitor-native-crashes 用於指定是否監視並報告應用程式發生崩潰的原生代碼。
adb shellmonkey -p cn.emoney.acg --monitor-native-crashes 1000
10 引數: --pct-{+事件類別}{+事件類別百分比}用於指定每種類別事件的數目百分比(在Monkey事件序列中,該類事件數目佔總事件數目的百分比)
示例:
--pct-touch{+百分比}
調整觸控事件的百分比(觸控事件是一個down-up事件,它發生在螢幕上的某單一位置)
adb shell monkey -p cn.emoney.acg --pct-touch 10 1000
--pct-motion{+百分比}
調整動作事件的百分比(動作事件由螢幕上某處的一個down事件、一系列的偽隨件機事和一個up事件組成)
adb shell monkey -p cn.emoney.acg --pct-motion 20 1000
--pct-trackball{+百分比}
調整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點選)
adb shell monkey -p cn.emoney.acg --pct-trackball 30 1000
--pct-nav{+百分比}
調整“基本”導航事件的百分比(導航事件由來自方向輸入裝置的up/down/left/right組成)
adb shell monkey -p cn.emoney.acg --pct-nav 40 1000
--pct-majornav{+百分比}
調整“主要”導航事件的百分比(這些導航事件通常引發圖形介面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、選單按鍵)
adb shell monkey -p cn.emoney.acg --pct-majornav 50 1000
七、輸出monkeylog
跑monkey的時候或者想抓程式log匯出時,有時會提示:cannot create D:monkeytest.txt: read-only file system
為什麼有時候可以有時候不可以?
後來發現跟使用使用習慣不一樣,一會是先進入adb shell 再用命令,一會是直接命令進入。
進入adb shell後再用命令就會失敗~
正確方法:退出shell或者執行命令時先不要進shell
C:\Documents and Settings\Administrator>adb shell monkey -p 包名 -v 300 >e:\text.txt
進入adb shell後就相當於進入linux的root下面,沒有許可權在裡面建立檔案~
48.保證測試的覆蓋率 ?
測試需求分析分兩步:
1、測試需求的獲取 需求的來源:
顯式需求:1.原始需求說明書 2.產品規格書 3.軟體需求文件 4.有無繼承性文件 5.經驗庫 6.通用的協議規範
隱式需求:使用者的主觀感受,市場的主流觀點,專業人士的評價分析
2,需求的分析,產生測試需求文件
將不同的需求來源劃分成一個個需求點,針對每一點進行測試分析:界定測試範圍,利用各種測試設計的方法產生測試點
在測試方法方面,可做如下注意:
其一,分析出口入口。從入口分析,將可能出現的環境,條件,操作等內容分類組合,然後根據各位測試達人的方法進行整合,逐一驗證。從出口分析,將可能出現的結果進行統計,根據結果的不同追根溯源,再找到不同的操作以及條件等內容,統計成文件,逐一驗證。
其二,多種測試手法的學習和使用。大家可能更多的關心測試方法,但是具體操作的手法也是需要注意的。畢竟測試方法比較容易找到,各位達人都很熟悉。如果將每個人不同的測試手法總結出來並在自己的測試實施中加以使用,可能會收到意想不到的成果。
二、當測試需求分析完成,並且形成文件後,要進行測試需求評審,保證需求的準確性以及完整性。
三、測試需求完成以後,可以根據測試需求設計測試用例。
要保證測試用例能夠全面覆蓋測試需求,要包含所有的情況。
測試用例設計上劃分為單功能測試用例和測試場景設計,單功能測試覆蓋的需求中的功能點,測試場景覆蓋需求中的業務邏輯。
在設計測試用例的時候,可以使用多種測試用例設計方法。
●首先進行等價類劃分,包括輸入條件和輸出條件的等價類劃分,合理設定有效等價類和無效等價類,這是減少工作量和提高測試效率最有效的方法。
●必須使用邊界值分析,經驗表明,這種方法設計出的用例能發現很多程式錯誤。
●可以使用錯誤推測法追加一些測試用例,這需要依靠您的智慧和經驗。
●對照程式邏輯檢查已設計出的測試用例的邏輯覆蓋度,如果沒有達到覆蓋標準應當再補充足夠的測試用例。
●如果程式的功能說明中含有輸入條件的組合情況,一開始就可選因果圖和判定表驅動法。
●對於引數配置類的軟體,要用正交試驗法選擇較少的組合方式達到最佳效果。
●對於業務流清晰的系統,可以利用場景法貫穿整個測試方案過程,在案例中綜合使用各種測試方法。
當測試用例設計完成後,要組織測試用例的評審,這樣可以吸取別人的意見,減少遺漏,補全測試用例。
四、測試用例編寫完成後,就是測試執行
1.測試用例執行100%覆蓋。2.在測試執行過程中,要繼續對測試用例補充完善,確保提高測試覆蓋率。
五、在整個測試過程中,需求都是不可能不變的,所以要及時的更新測試需求、測試用例。
六、要將測試需求、測試用例以及發現的bug關聯起來,便於管理和跟蹤,同時也便於檢視覆蓋率。
49.測試用例評審?
1. 評審就是對測試用例進行檢查
2. 評審型別:同行評審、小組評審、部門評審、三方評審
3. 評審目的:發現測試用例不足,方便測試人員改進測試用例,提高測試質量
4. 評審過程:迴圈執行 “測試用例評審--》改進測試用例”
50.做好測試(用例)計劃的關鍵?
1.明確測試計劃
2.明確測試內容、測試過程、測試目的
3.測試範圍與測試內容高度覆蓋
4.測試結果的直觀性、準確性
5.測試開始與結束時間
6.測試方法與測試工具的實用性
7.測試文件與測試軟體
8.採用評審和更新機制
9.保證測試計劃滿足實際需求
51.完整的測試組成?
1.測試設計:需求分解,細化執行測試過程,為每個測試過程選擇合適的測試用例
2.測試計劃:根據需求和效能指標說明,定製相應測試計劃,安排測試測試人員,測試內容,測試時間以及測試需要的資源
4.測試執行:建立自動化測試,對發現bug跟蹤管理,按步驟測試(單元測試,整合測試,系統測試,驗收測試)
5.測試評估:結合量化測試覆蓋域以及bug跟蹤,對軟體質量,開發進度,工作效率等綜合評價
52.所有的軟體缺陷都可修復嗎,都要修復嗎?
理論上軟體的缺陷是可修復的,不過有的修復成本比較高,不能追求軟體的完美,根據風險來確定是否修復缺陷
1.沒有足夠的時間,在專案中沒有足夠時間修改缺陷可能會引出其他缺陷,導致專案的推遲
2.有些缺陷只在特殊環境下出現,這種缺陷處於專案的利益考慮可以放在以後版本中進行修復升級
3.不是缺陷的缺陷。缺陷的是否修改應該由測試人員、專案經理、程式設計師共同討論決定,以確保專案的正常執行