軟件測試總結——常見的面試問題(一)

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

@pytest.fixture(scope='function')
def setup_function(request):
    def teardown_function():
        print("teardown_function called.")
    request.addfinalizer(teardown_function)  # 此內嵌函數做teardown工作
    print('setup_function called.')

@pytest.fixture(scope='module')
def setup_module(request):
    def teardown_module():
        print("teardown_module called.")
    request.addfinalizer(teardown_module)
    print('setup_module called.')

@pytest.mark.website
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)擁有自己的sheet 4)組合有相同需求的步驟,整體操作 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 

  1. # 查看所有的數據庫: SHOW DATABASES ;

  2. # 創建一個數據庫: CREATE DATABASE k;

  3. # 刪除一個數據庫: DROP DATABASE k;

  4. # 使用這個數據庫  USE k;

  1. # 查看所有的表  SHOW TABLES ;

  2. # 創建一個表  CREATE TABLE n(id INT, name VARCHAR(10));

  3. CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name));

  4. CREATE TABLE m(id INT, name VARCHAR(10));

  5. # 直接將查詢結果導入或複製到新創建的表 : CREATE TABLE n SELECT * FROM m;

  6. # 新創建的表與一個存在的表的數據結構類似:  CREATE TABLE m LIKE n;

  7. # 臨時表將在你連接MySQL期間存在。當斷開連接時,MySQL將自動刪除表並釋放所用的空間。也可手動刪除。

  8. CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10));

  9. # 直接將查詢結果導入或複製到新創建的臨時表  CREATE TEMPORARY TABLE tt SELECT * FROM n;

  10. # 刪除一個存在表  DROP TABLE IF EXISTS m;

  11. # 更改存在表的名稱

  12. ALTER TABLE n RENAME m;

  13. RENAME TABLE n TO m;

  14. # 查看錶的結構(以下五條語句效果相同)

  15. DESC n; # 因爲簡單,所以建議使用

  16. DESCRIBE n;

  17. SHOW COLUMNS IN n;

  18. SHOW COLUMNS FROM n;

  19. EXPLAIN n;

  20. # 查看錶的創建語句

  21. SHOW CREATE TABLE n;

表的結構

  1. # 添加字段: ALTER TABLE n ADD age VARCHAR(2) ;

  2. # 刪除字段: ALTER TABLE n DROP age;

  3. # 更改字段屬性和屬性:ALTER TABLE n CHANGE age a INT;

  4. # 只更改字段屬性:ALTER TABLE n MODIFY age VARCHAR(7) ;

表的數據

  1. # 增加數據

  2. INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');

  3. INSERT INTO n SELECT * FROM n; # 把數據複製一遍重新插入

  4. # 刪除數據:DELETE FROM n WHERE id = 2;

  5. # 更改數據:UPDATE n SET name = 'tom' WHERE id = 2;

  6. # 數據查找 : SELECT * FROM n WHERE name LIKE '%h%';

  7. # 數據排序(反序) :SELECT * FROM n ORDER BY name, id DESC ;

  1. # 添加主鍵:ALTER TABLE n ADD PRIMARY KEY (id);

  2. # 刪除主鍵:ALTER TABLE n DROP PRIMARY KEY ;

  3. # 添加外鍵

  4. ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id); # 自動生成鍵名m_ibfk_1

  5. ALTER TABLE m ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES n(id); # 使用定義的鍵名fk_id

  6. # 刪除外鍵:ALTER TABLE m DROP FOREIGN KEY `fk_id`;

  7. # 修改外鍵:ALTER TABLE m DROP FOREIGN KEY `fk_id`, ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id); # 刪除之後從新建

聯接

  1. # 內聯接:SELECT * FROM m INNER JOIN n ON m.id = n.id;

  2. # 左外聯接 :SELECT * FROM m LEFT JOIN n ON m.id = n.id;

  3. # 右外聯接:SELECT * FROM m RIGHT JOIN n ON m.id = n.id;

  4. # 交叉聯接: SELECT * FROM m CROSS JOIN n; # 標準寫法

  5. # 類似全連接full join的聯接用法

  6. SELECT id,name FROM m

  7. UNION

  8. SELECT id,name FROM n;

函數

  1. # 聚合函數

  2. SELECT count(id) AS total FROM n; # 總數

  3. SELECT sum(age) AS all_age FROM n; # 總和

  4. SELECT avg(age) AS all_age FROM n; # 平均值

  5. SELECT max(age) AS all_age FROM n; # 最大值

  6. SELECT min(age) AS all_age FROM n; # 最小值

  7. # 數學函數

  8. SELECT abs(-5); # 絕對值

  9. SELECT bin(15), oct(15), hex(15); # 二進制,八進制,十六進制

  10. SELECT pi(); # 圓周率3.141593

  11. SELECT ceil(5.5); # 大於x的最小整數值6

  12. SELECT floor(5.5); # 小於x的最大整數值5

  13. SELECT greatest(3,1,4,1,5,9,2,6); # 返回集合中最大的值9

  14. SELECT least(3,1,4,1,5,9,2,6); # 返回集合中最小的值1

  15. SELECT mod(5,3); # 餘數2

  16. SELECT rand(); # 返回0到1內的隨機值,每次不一樣

  17. SELECT rand(5); # 提供一個參數(種子)使RAND()隨機數生成器生成一個指定的值。

  18. SELECT round(1415.1415); # 四捨五入1415

  19. SELECT round(1415.1415, 3); # 四捨五入三位數1415.142

  20. SELECT round(1415.1415, -1); # 四捨五入整數位數1420

  21. SELECT truncate(1415.1415, 3); # 截短爲3位小數1415.141

  22. SELECT truncate(1415.1415, -1); # 截短爲-1位小數1410

  23. SELECT sign(-5); # 符號的值負數-1

  24. SELECT sign(5); # 符號的值正數1

  25. SELECT sqrt(9); # 平方根3

  26. SELECT sqrt(9); # 平方根3

  27. # 字符串函數

  28. SELECT concat('a', 'p', 'p', 'le'); # 連接字符串-apple

  29. SELECT concat_ws(',', 'a', 'p', 'p', 'le'); # 連接用','分割字符串-a,p,p,le

  30. SELECT insert('chinese', 3, 2, 'IN'); # 將字符串'chinese'從3位置開始的2個字符替換爲'IN'-chINese

  31. SELECT left('chinese', 4); # 返回字符串'chinese'左邊的4個字符-chin

  32. SELECT right('chinese', 3); # 返回字符串'chinese'右邊的3個字符-ese

  33. SELECT substring('chinese', 3); # 返回字符串'chinese'第三個字符之後的子字符串-inese

  34. SELECT substring('chinese', -3); # 返回字符串'chinese'倒數第三個字符之後的子字符串-ese

  35. SELECT substring('chinese', 3, 2); # 返回字符串'chinese'第三個字符之後的兩個字符-in

  36. SELECT trim(' chinese '); # 切割字符串' chinese '兩邊的空字符-'chinese'

  37. SELECT ltrim(' chinese '); # 切割字符串' chinese '兩邊的空字符-'chinese '

  38. SELECT rtrim(' chinese '); # 切割字符串' chinese '兩邊的空字符-' chinese'

  39. SELECT repeat('boy', 3); # 重複字符'boy'三次-'boyboyboy'

  40. SELECT reverse('chinese'); # 反向排序-'esenihc'

  41. SELECT length('chinese'); # 返回字符串的長度-7

  42. SELECT upper('chINese'), lower('chINese'); # 大寫小寫 CHINESE chinese

  43. SELECT ucase('chINese'), lcase('chINese'); # 大寫小寫 CHINESE chinese

  44. SELECT position('i' IN 'chinese'); # 返回'i'在'chinese'的第一個位置-3

  45. SELECT position('e' IN 'chinese'); # 返回'i'在'chinese'的第一個位置-5

  46. SELECT strcmp('abc', 'abd'); # 比較字符串,第一個參數小於第二個返回負數- -1

  47. SELECT strcmp('abc', 'abb'); # 比較字符串,第一個參數大於第二個返回正數- 1

  48. # 時間函數

  49. SELECT current_date, current_time, now(); # 2018-01-13 12:33:43 2018-01-13 12:33:43

  50. SELECT hour(current_time), minute(current_time), second(current_time); # 12 31 34

  51. SELECT year(current_date), month(current_date), week(current_date); # 2018 1 1

  52. SELECT quarter(current_date); # 1

  53. SELECT monthname(current_date), dayname(current_date); # January Saturday

  54. SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date); # 7 13 13

  55. # 控制流函數

  56. SELECT if(3>2, 't', 'f'), if(3<2, 't', 'f'); # t f

  57. SELECT ifnull(NULL, 't'), ifnull(2, 't'); # t 2

  58. SELECT isnull(1), isnull(1/0); # 0 1 是null返回1,不是null返回0

  59. SELECT nullif('a', 'a'), nullif('a', 'b'); # null a 參數相同或成立返回null,不同或不成立則返回第一個參數

  60. SELECT CASE 2

  61. WHEN 1 THEN 'first'

  62. WHEN 2 THEN 'second'

  63. WHEN 3 THEN 'third'

  64. ELSE 'other'

  65. END ; # second

  66. # 系統信息函數

  67. SELECT database(); # 當前數據庫名-test

  68. SELECT connection_id(); # 當前用戶id-306

  69. SELECT user(); # 當前用戶-root@localhost

  70. 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值    adb get-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.school 1000

操作日誌: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.不是缺陷的缺陷。缺陷的是否修改應該由測試人員、項目經理、程序員共同討論決定,以確保項目的正常運行

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章