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