中科大软件测试期末复习
前言
taozs老師畫的重點,極其重要!!!
25道多選
測試是為了證明這個系統(tǒng)沒有bug。 錯
測試四象限:
單元測試(工具)、組件測試(開發(fā)人員做,dao層 controller層,測試驅動開發(fā)),自動化,面向技術;
功能測試(接口測試,主要講了rest接口; restAssured,curl,postman),selenium,自動化,面向業(yè)務;
探索測試:用戶驗收測試,可用性測試,面向業(yè)務;
系統(tǒng)測試:性能、壓力,“非功能性”測試,面向技術,Jmeter;
測試金字塔:測試投入比例: unit > 接口測試 > UI;
selenium grid: 瀏覽器的兼容性測試。
cobertura不是靜態(tài)代碼測試工具。
PMD,ckeck style, findbugs(檢查字節(jié)碼) 特點。
Sonarqube
測試用例的設計方法:
基于直覺和經驗的方法(名稱)☆:隨機測試…
基于輸入域的方法:等價類劃分法,邊界值分析(互補的關系);
基于組合及其優(yōu)化的方法(名稱):解決測試用例過多的問題;
基于邏輯覆蓋的方法:各個覆蓋的意思。條件覆蓋100% ≠ 分支覆蓋100%;
測試controller的三種方法:new ExampleController;@SpringBootTest(意味著要使用真實數(shù)據(jù)庫);@WebMvcTest;
HTTP協(xié)議:四個動詞,accept,location, 狀態(tài)碼;
testrestTemplate,不是使用mockmvc的環(huán)境,可以構建自己的請求頭,請求體;
curl常用參數(shù): -i -L -v;
postman提供的功能:保存cookie,cookie共享,斷言,環(huán)境(全局變量);
restAssured:測試rest API,可以測試其他語言。Jsonpath驗證,寫測試用例的方式(given,when,then);
docker常用參數(shù): -P -d -e,容器與虛擬機的區(qū)別;
持續(xù)集成:在合并到版本庫之前需要進行構建測試(靜態(tài),單元)。分層構建(分層級,這個層級做單元測試… 快速反饋)。 哪些?
Jmeter:分布式部署(selenium),可以指定用例數(shù),支持time,支持ssl,支持命令行,支持斷言;
selenium ide
selenium與robot framework關系?
第一章 序言 軟件開發(fā)過程
軟件工程的發(fā)展
敏捷開發(fā)
以用戶的需求進化為核心,采用迭代、循序漸進的方法進行軟件開發(fā)。力求在最短的周期內開發(fā)出產品的核心功能,在后續(xù)的生產周期內,按照新需求不斷迭代升級、完善產品。
敏捷關鍵詞
迭代
反饋
XP 極限編程
價值觀:溝通、簡單、反饋、勇氣;
編程方法:結對編程、測試驅動開發(fā)、重構、簡單設計;
迭代前準備階段
用戶故事
3C原則:卡片Card、會話Conversation、確認Confirmation
軟件開發(fā)成本
總成本 = 開發(fā)成本 + 維護成本;
維護成本 = 理解代碼的成本 + 修改成本 + 測試成本 + 部署成本;
維護成本 >>> 開發(fā)成本
迭代開發(fā)階段
第二章 軟件測試概念
測試目的
測試四象限
象限一:測試驅動開發(fā),關注代碼內部質量,用戶不關注,自動化,面向技術。
-
單元測試:錯誤發(fā)現(xiàn)的早,成本就越低;與寫功能代碼同時進行(測試驅動開發(fā));黑盒測試(等價類劃分、邊界值分析法、錯誤推測法、因果圖法、功能圖法);白盒測試(邏輯驅動法和基本路徑法,各種覆蓋);快速反饋是單元測試的首要目標;
驅動和樁:驅動模塊:對底層或子層模塊進行測試所編寫的調用這些模塊的程序;樁模塊:對頂層或上層模塊進行測試時所編寫的替代下層模塊的程序。
-
組件測試:也稱為集成測試;
非漸增式測試模式:先分別測試每個模塊,再把所有的模塊按設計要求放在一起結合成所要的程序;
漸增式測試模式:把下一個要測試的模塊同已經測試好的模塊結合起來進行測試,測試完以后再把下一個應該測試的模塊結合進來測試;
象限二:更高層的測試,關注外部質量和客戶需要的功能(對設計的軟件功能的測試),盡量驗證業(yè)務層的邏輯,自動化,面向業(yè)務。
主要講了restAssured、curl、postman、selenium
象限三:確認需求是不是用戶真正需要的;是不是錯誤的理解了需求(可能會提出新的需求);通常是用戶或客戶執(zhí)行;可用性測試;面向業(yè)務;手工測試;
象限四:系統(tǒng)測試,現(xiàn)實的計算機環(huán)境
性能測試(性能指標,性能瓶頸)、壓力(長時間,超負荷的運行,測試系統(tǒng)的性能,可靠性和穩(wěn)定性)、容量(某項指標的極限值):目的有所不同,但手段和方法在一定程度上相似;
安全性、可靠性(在規(guī)定條件和規(guī)定時間下完成規(guī)定功能的能力)、容錯性(異常條件下是否具有防護性等):目的不同,方法和手段也不同;
兼容性測試
測試金字塔
第三章 代碼靜態(tài)測試
分類
靜態(tài)測試:不運行程序本身,通過分析或檢查源程序的語法、結構、過程等檢查程序的正確性;
動態(tài)測試:通過運行程序檢查運行結果和預期結果的差異;
代碼Review
QAPlugs工具包
PMD:發(fā)現(xiàn)代碼中無用的變量、空catch塊、不必要的對象創(chuàng)建等,支持多種語言;
findbugs:檢查java類或者jar文件(字節(jié)碼),將字節(jié)碼與一組缺陷模式進行對比以發(fā)現(xiàn)可能的問題,只尋找可能存在bug的地方,不注重樣式或者格式,它試圖只尋找真正的缺陷或者潛在的性能問題;
可解決的問題:efficient性能問題、maintainability可維護性、portability可移植性、reliability可靠性、usability可用性
checkstyle:代碼風格檢查,例如縮進,換行等,只支持java;
SonarQube
自動代碼審查工具,可檢測代碼中的錯誤、漏洞和代碼異味等,并且能夠生成代碼審查報告,支持多種語言。
問題類型:
- 錯誤(代碼bug,影響程序運行);
- 漏洞(有可能被攻擊);
- 代碼異味(可以優(yōu)化,不然會影響代碼的可維護性)
問題級別:
- BLOCKER:阻斷,影響程序運行;
- CRITICAL:嚴重,可能影響程序運行,安全;
- MAJOR:主要,影響開發(fā)效率,代碼質量;
- MINOR:次要,可能影響開發(fā)效率,代碼質量;
- INFO:提示,建議;
pylint:python中的代碼檢查工具;
sonarlint:支持多種語言;
第四章 單元測試技術
JUnit:基于測試驅動開發(fā)的測試框架
規(guī)則
- 測試方法必須用@Test注解;
- 測試方法必須使用public void進行修飾;
- 測試類的包應該與被測試類的包名一致;
- 測試單元中的每個方法要能單獨獨立測試,不能相互依賴;
注解
- @BeforeClass:static,修飾方法會在所有方法被調用前執(zhí)行;
- @AfterClass:static
- @Before / @After:在每個測試方法前后各執(zhí)行一次;
- @Test
- @Ignore:忽略的測試方法;
斷言
將程序預期的結果與程序運行的結果進行比較,確保對結果的可預知性;
Failure and Error
Failure一般由斷言方法判斷失敗引起的;
Error由代碼異常引起的,可能是代碼本身的錯誤,也可能是測試代碼的錯誤;
參數(shù)化測試
-
@RunWith(Parameterized.class) 指明運行器Parameterized來運行測試;
-
測試類必須由Parameterized測試運行器修飾;
-
準備數(shù)據(jù):在提供數(shù)據(jù)的方法上使用@Parameters注解;該方法必須為public static;該方法返回值必須為Collection;該方法沒有參數(shù);
public class calculatorTest {calculator cal = new calculator();private int param;private int result;public calculatorTest(int param,int result) {this.param=param;this.result=result;}@Parameterspublic static Collection data(){return Arrays.asList(new Object[][] {{2,2},{10,10},{5,5}});}//...@Testpublic void test_devide() throws Exception{cal.add(param);assertEquals(result, cal.getresult());} }
hamcrest
使測試更具有可讀性和可理解性。
mockito
什么是Mock?
模擬對象是以可控的方式模擬真實對象行為的假對象;
為什么使用Mock?
- 真實對象可能是圖形用戶界面;
- 真實對象可能很難搭建;
- 真實對象的行為很難觸發(fā);
- 真實對象的速度很慢;
- 真實對象使用了回調機制;
- …
cobertura
代碼覆蓋程度的一種度量,不是靜態(tài)代碼測試工具
-
語句覆蓋
所有語句執(zhí)行一次。
-
分支覆蓋/判定覆蓋
覆蓋到每一個分支。
-
條件覆蓋
需要度量判定中的每個子表達式結果true/false是否被測試到。
分支覆蓋100% ≠ 條件覆蓋100%
-
路徑覆蓋/斷言覆蓋
選取足夠多的測試數(shù)據(jù),使程序中的每條可能路徑都執(zhí)行一次。
-
循環(huán)覆蓋
度量循環(huán)是否執(zhí)行了零次,一次和多余一次循環(huán)。
覆蓋程度:路徑覆蓋 > 條件覆蓋 > 分支覆蓋 > 語句覆蓋
圈復雜度:度量一個方法中執(zhí)行路徑的復雜程度,建議不超過10,特殊情況不超過15。
計算方式一: 圈復雜度 = 區(qū)域數(shù) = 判定節(jié)點數(shù) + 1
第五章 測試驅動開發(fā)
- 開始新增一個測試;
- 運行所有測試,發(fā)現(xiàn)新的測試不能通過;
- 做一些小小的改動;
- 運行所有測試,且全部通過;
- 重構代碼,以消除重復設計,優(yōu)化設計結構;
第六章 軟件測試方法
場景法設計測試用例
- 基本流:按照正確的事件流實現(xiàn)的一條正確流程;
- 備用流:出現(xiàn)故障或缺陷的過程,使用備選流加以標注;
基于直覺和經驗的方法 ☆
- 隨機測試
- ALAC測試:Act-Like-A-Customer,80%的錯誤很可能集中在20%的程序模塊中;
- 錯誤推測法:推測可能存在的錯誤;某處出現(xiàn)了錯誤,可能會隱藏更多的錯誤;
基于輸入域的方法
-
等價類劃分法:將輸入域劃分為若干部分,在每部分中選取具有代表性的數(shù)據(jù)當做測試用例;
無效等價類,有效等價類。
-
邊界值分析法:對等價類劃分法的一種補充,測試用例來著于等價類的邊界;
基于組合及其優(yōu)化的方法
解決用例太多的問題,如何減少用例數(shù),用盡量少的用例發(fā)現(xiàn)盡量多的問題。
-
判定表法
條件樁、動作樁、條件項(對應條件樁具體的取值)、動作項(期望對應動作樁的取值);
-
因果圖法
基本符號:E(排他關系,最多有一個成立)、I(或關系,不能同時為零)、R(屏蔽關系,a=1 —> b≠1)、O(唯一關系,有且僅有一個為1);
-
Pairwise配對測試:縮減測試用例數(shù)量
測試用例間沒有交集;根據(jù)數(shù)學統(tǒng)計分析,73%的缺陷是由單因子或兩個因子相互作用產生的(其中單 因子是35%,兩個因子是38%;
配對測試最終剩下的用例數(shù)肯定相同,但可以有不同的組合。
-
正交試驗法
正交表Ln(m^k),n表示試驗次數(shù)(行數(shù)),m表示每個因素的水平數(shù)(每個因素可能出現(xiàn)幾種情況),k表示列數(shù);
測試用例個數(shù) n=k(m-1)+1*
正交表的兩個性質:每一列,不同數(shù)字出現(xiàn)的次數(shù)相同;任意兩列,數(shù)字的排列方式齊全且相等;
基于邏輯覆蓋的方法
- 語句覆蓋
- 分支覆蓋
- 條件覆蓋
- 路徑覆蓋
- 循環(huán)覆蓋
基于缺陷模式的測試
Defect-Pattern-Based Testing, DPBT
FindBugs
基于模型的測試
第七章 組件測試技術
數(shù)據(jù)訪問層測試
-
JPA測試:@DataJpaTest注解只掃描@Entity Bean和裝配Spring Data JPA存儲庫,默認使用內存數(shù)據(jù)庫 h2 database;
-
@ActiveProfiles:用于指定這個測試類里的測試方式運行時的profiles(環(huán)境);
-
去除內存數(shù)據(jù)庫:
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) //@SpringBoot @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
業(yè)務層測試
控制器層測試
三種方式:
- 直接new ExampleController
- @WebMvcTest(controllers = ExampleController.class)
- @SpringBootTest
第八章 接口測試
微服務架構模式的特征
- 應用程序分解為具有明確定義了職責范圍的細粒度組件
- 完全獨立部署,獨立測試,并可復用 ;
- 使用輕量級通信協(xié)議,HTTP和JSON,松耦合;
- 服務實現(xiàn)可使用多種編程語言和技術 ;
- 將大型團隊劃分成多個小型開發(fā)團隊,每個團隊只負責他們各自的服務;
Rest原則
- 無狀態(tài)、可緩存、統(tǒng)一接口、客戶端-服務端,分曾系統(tǒng)、按需編碼
- 一個架構符合rest原則,則稱為RESTful架構。
HTTP
-
**HTTP四種動詞:get、post、put、delete` **
-
請求頭,請求體
Accept:客戶端可識別的響應內容類型列表(客戶端可以接受的language,encoding,charset…);
Cookies;
Content-Type:請求內容的類型;
Content-Length :標識請求內容的長度;
-
響應頭和響應體
狀態(tài)碼:
? 1xx:表示服務器已接收了客戶端的請求,客戶端可以繼續(xù)發(fā)送請求;
? 2xx:表示服務器已成功接收到請求并進行處理;
? 3xx:表示服務器要求客戶端重定向;
? 4xx:表示客戶端的請求有非法內容;
? 5xx:標識服務器未能正常處理客戶端的請求而出現(xiàn)意外錯誤;
Location:服務器返回給客戶端,用于重定向到新的位置;
Keep-Alive :300,期望服務端保持連接多長時間(秒);
TestRestTemplate
不是使用mockmvc的環(huán)境,可以構建自己的請求頭,請求體
curl
命令行工具,用來請求web服務器。
常用參數(shù):
- -x:指定http請求的代理;
- --cookie / -b :設置cookie;
- -i :打印響應的標頭;
- -L :要求客戶端重定向,讓http請求跟隨服務器重定向;
- -v :輸出通信的整個過程;
- -X :指定http請求的方法;
- -H :添加http請求的標頭;
- -d :指定發(fā)送參數(shù);
- -u :設置認證的用戶名密碼;
- …
postman
主要功能:
- 保存cookie;
- 不同請求間cookie共享;
- 斷言;
- 環(huán)境(全局變量,變量共享);
- …
RestAssured
寫測試用例的方式:
-
given() ... expect() ... when() ...
-
given() ... when() ... then() ...
-
when() ... then() ...
補:consumes = "application/json" :接收參數(shù)的形式;produces = "application/json" :返回數(shù)據(jù)的形式;
第九章 Docker在測試中的應用
輕量級的虛擬化,共用主機內核,利用內核的虛擬化技術隔離出一個獨立的運行環(huán)境,擁有獨立的一個文件系統(tǒng),網絡空間,進程空間視圖等,輕量級、高性能。
容器vs虛擬機
- 容器是在Linux內核實現(xiàn)的輕量級資源隔離機制;
- 虛擬機是操作系統(tǒng)級別的資源隔離,容器本質上是進程級的資源隔離;
基本命令/參數(shù):
- docker image ls:檢測Docker主機中的本地倉庫中是否包含鏡像;
- docker image pull : 是下載鏡像的命令;
- -d :后臺運行容器,并返回容器ID;
- -i : 以交互模式運行容器,通常與 -t 同時使用;
- -t : 為容器重新分配一個偽輸入終端,通常與-i同時使用;
- -p : 指定(發(fā)布)端口映射,格式為:主機(宿主)端口:容器端口;
- -P : 隨機端口映射,容器內部端口隨機映射到主機的高端口;
- -v :綁定一個卷;
- --rm :退出時自動刪除容器;
- -M :容器內存的上限;
- docker export 1e560fca3906 > ubuntu.tar :導出容器 1e560fca3906 快照到本地文件 ubuntu.tar;
- docker import ubuntu.tar test/ubuntu:v1 :將快照文件 ubuntu.tar 導入到鏡像 test/ubuntu:v1;
第十章 持續(xù)集成
- 只生成一次二進制包;
- 使用同樣的腳本向所有環(huán)境部署;
- 對部署進行冒煙測試;
- 向生產環(huán)境的副本中部署;
- 每次變更都要立即在流水線中傳遞;
- 只要有環(huán)節(jié)失敗,就停止整個流水線;
- post:根據(jù)流水線或階段的完成狀態(tài),運行post部分的操作。
- stages:包含一系列一個或多個 stage 指令, stages 部分是流水線描述的大部分"work" 的位置。 建議stages 至少包含一個 stage 指令用于連續(xù)交付過程的每個離散部分,比如構建, 測試, 和部署。
- steps:部分在給定的 stage 指令中執(zhí)行的定義了一系列的一個或 多個steps。
- environment:制定一個 鍵-值對序列,該序列將被定義為所 有步驟的環(huán)境變量,或者是特定于階段的步驟, 這取決于 environment 指令在流水線內的位置。
- options:指定在一個小時的全局執(zhí)行超時,在此之后,jenkins將終止流水線運行。
第十一章 Selenium
selenium的三部分:
-
driver:與瀏覽器運行在同一系統(tǒng)上;
定位元素(find_element_by_id、find_element_by_name…);
通過鏈接文本查找超鏈接(find_element_by_link_text…);
通過css選擇器定位元素(find_element_by_css_selector…);
通過XPath定位(絕對路徑 find_element_by_xpath…);
強制等待、顯示等待、隱式等待
-
selenium grid
-
Selenium Client & WebDriver
selenium IDE提供腳本錄制、回放、編輯,以及元素定位功能。
為什么要自動化?
- 敏捷軟件開發(fā),迭代,頻繁地進行周期性交付;
- 每次需要跑全部的測試,消耗大(自動化測試方便做回歸測試);
第十二章 驗收測試框架 Robot Framework
Robot Framework與Selenium的關系:RF中可以集成Selenium?
第十三章 性能測試
Jmeter
- 分布式部署;
- 可以指定用例數(shù);
- 支持定時器time;
- 邏輯控制器;
- 支持ssl;
- 支持命令行;
- 支持斷言;
Apdex:性能指數(shù)
總結
以上是生活随笔為你收集整理的中科大软件测试期末复习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑桥词典公布 2023 年度词汇:Hal
- 下一篇: HDFS(一)