1、接口測試:接口(重點)
A、是什么?
數(shù)據(jù)交互的入口和出口,是一套規(guī)范一套標(biāo)準(zhǔn)
分類:
硬件 ----- USB 接口, 電源接口,網(wǎng)線接口.....
軟件 ----- 就是前后端共同遵守的一套數(shù)據(jù)交互的規(guī)范(架構(gòu)師制定接口)
B、為什么?
高效、靈活(靈活的意思就是:_ 擴展性強 _提高內(nèi)聚性降低了耦合性)(記?。?br> 不使用接口的缺點:
1. 研發(fā)標(biāo)準(zhǔn)不統(tǒng)一,團(tuán)隊磨合難度高
2. 研發(fā)周期長
3. 可擴展性差
使用接口的優(yōu)點:
1. 統(tǒng)一設(shè)計標(biāo)準(zhǔn);
2. 前后端開發(fā)相對獨立;
3. 擴展性靈活;
4. 前后端都可以使用自己熟悉的技術(shù);
C、怎么用?
C-1、接口規(guī)范是架構(gòu)師制定的
C-2、前端和后端開發(fā)時共同參考的依據(jù)
2、接口測試:接口測試(重點)
A、是什么?
測試后端實現(xiàn)是否符合接口規(guī)范(不是測試接口本身,接口本身就是個文檔)
B、為什么?
為了程序更安全、效率(性能方面的,包括響應(yīng)時間的問題)
C、怎么用?(實現(xiàn)流程)
模擬客戶向服務(wù)器發(fā)送數(shù)據(jù),然后查看響應(yīng)
要素1: 定位服務(wù)器資源(通過 URL 實現(xiàn): http://www.baidu.com | http://127.0.0.1:8000/資源路徑)
要素2: 模擬用戶提交數(shù)據(jù)
要素3:查看響應(yīng)的結(jié)果是否符合預(yù)期
D、接口測試分類(記住)
類型1:web接口測試 (BS 架構(gòu))
? | ----- 服務(wù)器接口測試:測試自己公司實現(xiàn)的接口
? | ----- 第三方接口測試:測試別的公司實現(xiàn)的接口
類型2:模塊接口測試 (CS 架構(gòu))
3、接口測試:環(huán)境搭建
A、是什么?
搭建接口測試的測試環(huán)境,運行程序
B、為什么?
必須的
C、怎么用?
1)、運維或開發(fā)實現(xiàn)程序部署,正常運行
2)、沒有運維時,我們自己搭建
??2-1、安裝 python(因為項目程序是用python寫的)
??2-2、安裝依賴 (這個項目要運行還需要網(wǎng)上的一些組件):pip install -r requirements.txt -i https://pypi.douban.com/simple,若安裝速度慢,指定國內(nèi)源,需再加上: -i https://pypi.douban.com/simple
??2-3、在文件目錄下cmd,啟動項目 : python run_server.py
??2-4、測試,瀏覽器中輸入: http://127.0.0.1:8000/api/departments 如果正常響應(yīng)數(shù)據(jù)了,那么程序安裝并啟動正常
3)、學(xué)生管理系統(tǒng)簡介
??核心(無論做什么項目,核心就是數(shù)據(jù),數(shù)據(jù)都存在數(shù)據(jù)庫里): 學(xué)生表 班級表 學(xué)院表
??操作: 3張表的增刪改查
4、接口測試:插件
A、是什么?
是測試接口的測試工具,可以安裝到瀏覽器中,不同的瀏覽器安裝不同的測試工具
火狐 ------ RESTClient
谷歌 ------ POSTman
Java實現(xiàn)的測試工具: Jmeter(用Java寫的)(重點)
B、為什么?
測試工具功能強大一些,使測試更快捷方便
C、怎么用?
注意:二者安裝時,都要注意版本,不然會有兼容性問題
Google 插件資源下載被屏蔽了,安裝提前下載完畢的



5、接口測試:RESTful 風(fēng)格(重點)
A、是什么?
RESTful 風(fēng)格: 開發(fā)測試時,大家都會遵守一些默認(rèn)的規(guī)范,這些是約定成俗的,大家的習(xí)慣做法,非強制性的 RESTful 風(fēng)格就是這些習(xí)慣中的一種
RESTful 風(fēng)格中規(guī)范了,URL 的實現(xiàn)方式,提交的數(shù)據(jù)的實現(xiàn)方式,響應(yīng)的數(shù)據(jù)的實現(xiàn)方式 ......
B、為什么?
為了程序的易讀性和易維護(hù)性
C、怎么用?(記住)
RESTful 風(fēng)格是約束接口操作的四種操作(增刪改查)以及三個要素(URL,數(shù)據(jù)提交,數(shù)據(jù)響應(yīng))
增:
?要素1: URL + POST
?要素2: 多個數(shù)據(jù)
??方式1: URL?鍵=值&鍵=值(GET);在報文里:鍵=值&鍵=值(POST)
??方式2: JSON 格式
?要素3: 200 或 201(更規(guī)范) + 添加的記錄
刪:
?要素1: URL + GET|DELETE(更合適)
?要素2: 方式1: 鍵=值&鍵=值
?要素3: 200|204(更規(guī)范) + 無
改:
?要素1:URL + POST|PUT(更合適)
?要素2:
??方式1: 鍵=值&鍵=值
??方式2: JSON 格式
?要素3:200 | 201(更規(guī)范) + 修改后那條記錄
查:
?要素1: URL + GET(不涉及安全,而且數(shù)據(jù)量不大一般用GET)
?要素2:常用方式1 URL?鍵=值&鍵=值....
?要素3:200 + 一條或多條記錄
狀態(tài)碼:
404 ------ 資源路徑有誤
505 ------ 服務(wù)器異常
請求方法GET 和 POST 區(qū)別 :
1、POST 安全性高
2、POST 提交的數(shù)據(jù)量沒有大小限制
3、GET效率高
4、GET數(shù)據(jù)會在地址欄顯示,POST不會,在報文中顯示
6、接口測試:JSON
A、是什么?
A-1、JSON 是一種數(shù)據(jù)載體
A-2、互聯(lián)網(wǎng)本質(zhì)就是數(shù)據(jù)傳輸,數(shù)據(jù)傳輸需要數(shù)據(jù)載體,比如:頁面信息就是存儲在 html 這種數(shù)據(jù)載體中的
A-3、
HTML 格式(標(biāo)簽語言):
?? <html>
???<head>
???<title>hello</title>
???</head>
???<body>
????<font color='red'> hello world </font>
???</body>
??</html>
xml 格式:
??<person>
???<name>huluwa</name>
???<age>8</age>
??</person>
缺點:標(biāo)簽標(biāo)記語言,有效數(shù)據(jù)占有率低
A-4、 JSON 優(yōu)化數(shù)據(jù)傳輸
? {"title":"hello","font":"hello world"}
? {"name":"huluwa","age":"8"}
B、為什么?
JSON 傳輸數(shù)據(jù)效率更高,所以部分場景下使用 JSON 替換 html 和 XML_(ajax異步刷新,局部刷新頁面時用的技術(shù),例如注冊時用戶輸入用戶名后,瀏覽器就自動訪問服務(wù)器的數(shù)據(jù)庫,然后返回是否數(shù)據(jù)庫中已存在這個用戶名True | False,瀏覽器根據(jù)返回的True或False來顯示用戶名可用不可用)
但是 JSON 語法描述性不及 標(biāo)簽語言,所以部分場景還得使用 html 和 xml
如果傳遞的是少量數(shù)據(jù)的話,可能使用 JSON
C、怎么用?
語法:
格式1(JSON對象):{"鍵1":"值1","鍵2":"值2".....}
格式2(JSON數(shù)組):[值1,值2,值3.....]
格式復(fù)合: {"name":"huluwa","age":"8","aihao":["救爺爺",“吐火”,"吐水"]}
????[{"name":"huluwa","age":"8"},{"name":"aotuman","age":"10"}......]
7、接口測試:實戰(zhàn)
目的:RESTful 風(fēng)格練習(xí)
A、安裝并運行學(xué)生管理系統(tǒng)
B、獲取并讀懂接口規(guī)范
??B-1、從前期API文檔中提取接口清單 (了解此過程即可)
?????API 文檔: application programing Interface 應(yīng)用程序編程接口(里面內(nèi)容包括要實現(xiàn)的功能,要實現(xiàn)功能對應(yīng)的接口,接口要適用的話要提交一些什么數(shù)據(jù),功能要執(zhí)行應(yīng)該響應(yīng)什么數(shù)據(jù))——> 從API文檔提取接口清單:href后面跟訪問的資源地址,items后跟響應(yīng)的數(shù)據(jù)內(nèi)容
??B-2、接口清單讀懂,關(guān)注以下三點:
?????要素1: URL + 請求方法
?????要素2: 提交的數(shù)據(jù)
?????要素3: 響應(yīng)的結(jié)果
C、逐一測試接口
總結(jié):
新增或更新數(shù)據(jù)時,數(shù)據(jù)是 JSON 格式的,必須設(shè)置 瀏覽器的 http 請求頭,不然服務(wù)器會當(dāng)成普通文本解析處理
??Content-Type applicaton/json;charset=utf-8 (記住)
??Content-Type : 提交的內(nèi)容類型
??application/json : 數(shù)據(jù)類型是 JSON 格式 | 大類型/小類型 img/jpg img/png .....
??charset=utf-8 : 設(shè)置編碼集,utf-8 支持世界所有字符
1、Jmeter: 概述
A、是什么?
Jmeter 是 Apache 公司使用 Java 開發(fā)的一款測試工具
B 、為什么?
高效、功能強大
模擬一些高并發(fā)或多次循環(huán)等特殊測試場景
C、怎么用?
C-1、下載 Jmeter,解壓縮
C-2、安裝 Java 環(huán)境(Jmeter 和 Java 環(huán)境的關(guān)系,類似于mp3 文件和 播放器關(guān)系)
??注意:安裝路徑不能有中文字符、空格
??安裝了 JDK + JRE
C-3、簡單了解 Jmeter 的目錄結(jié)構(gòu)
??bin : 存儲了 Jmeter 的可執(zhí)行程序,比如啟動程序,文件名后綴.bat是windows下的啟動程序,.sh是linux下的啟動程序(Jmeter允許用戶自己用java寫一些拓展應(yīng)用)
??lib : 存儲了 Jmeter 整合的功能(一些 .jar 文件的小程序)
C-4、啟動 Jmeter
??啟動方式1:bin/ApacheJmeter.jar 雙擊
??啟動方式2:jmeter.bat windows 下的啟動程序
???????jmeter.sh linux 下的啟動程序
C-5、編寫一個 Jmeter 版本的測試案例
??1)、創(chuàng)建一個測試計劃,改個名字,見名知意
??2)、ctrl+S保存一下,要自己能找得到
??3)、測試計劃右鍵-添加-Threads-線程組,給線程組起個名字
??4)、線程組右鍵-添加-Sampler(取樣器)-HTTP請求
??5)、HTTP請求改名字,填寫IP,端口號,協(xié)議,請求方式,路徑,content encoding=utf-8
??6)、查看響應(yīng),測試計劃右鍵-添加-監(jiān)聽器-察看結(jié)果樹
??7)、在察看結(jié)果樹中,執(zhí)行工具欄綠色箭頭,看響應(yīng)狀態(tài)碼,結(jié)果,可以把響應(yīng)的數(shù)據(jù)換成JSON格式
D、Jmeter 的作用優(yōu)點以及缺點(了解 )
作用:
1. 接口測試
2. 性能測試 :測內(nèi)在 ----- 測程序的算法,算法影響程序的執(zhí)行效率,運行速度,
測功能模塊的響應(yīng)時間
3. 壓力測試 :測外在 ----- 測外在負(fù)載,測用戶數(shù),達(dá)到多少個人不崩潰
4. Web自動化測試
5. 數(shù)據(jù)庫測試 : 測試數(shù)據(jù)庫
6. JAVA程序測試
優(yōu)點:
1. 開源、免費
2. 支持多協(xié)議 : http https ftp ftps(文件傳輸協(xié)議,例如網(wǎng)上下載文件) .....
3. 小巧
4. 功能強大
缺點:
1. 不支持 IP 欺騙(瀏覽器訪問服務(wù)器的時候帶過去的是假的IP)
2. 不支持前端測試(不能測試前端代碼,前端有些動態(tài)效果用js實現(xiàn))
2、Jmeter組件:線程組(重點)
A、是什么?(記住)
進(jìn)程: 一個正在執(zhí)行的程序就對應(yīng)一個進(jìn)程
線程: 進(jìn)程中的執(zhí)行線索 (一個進(jìn)程有多個執(zhí)行線索)
線程組:按照線程性質(zhì)對線程進(jìn)行分組
并發(fā)執(zhí)行: 多個線程同時執(zhí)行,特點: 執(zhí)行結(jié)束的順序和線程的啟動順序不一定一致(例如多個電影同時下載)
順序執(zhí)行: 按照線程的啟動順序挨個執(zhí)行,特點:先啟動先執(zhí)行完,后啟動后執(zhí)行完(例如音樂先下載,后播放)
B 、為什么?
一個進(jìn)程中有多個線程,分組了就方便管理
C、怎么用?(基本使用)
C-1、三者關(guān)系: 進(jìn)程有多個線程組,線程組可以有多個線程
??進(jìn)程 ---- 測試計劃(創(chuàng)建一個測試計劃,就是創(chuàng)建一個程序)
??線程組 ---- 線程組
??線程 ------- 線程組屬性的線程數(shù)
C-2、默認(rèn)情況下,線程組中的線程是并發(fā)執(zhí)行的
??每一個線程都要執(zhí)行組內(nèi)的 http 請求(例如線程組01內(nèi)設(shè)置了線程數(shù)2,那么http請求就會被執(zhí)行2次)
C-3、怎么設(shè)置線程組順序執(zhí)行
??勾選測試計劃的第一個復(fù)選框( 獨立運行每個線程組)
C-4、線程組練習(xí) 學(xué)院增刪 改查
??1)測試計劃-線程組-http請求_查增|刪|改
??2)測試計劃-右鍵添加-配置元件-HTTP信息頭管理器-添加JSON數(shù)據(jù)對應(yīng)的信息頭(名稱content-Type,值applicaton/json;charset=utf-8)
??3)在http請求中的body data添加JSON報文信息
??學(xué)生管理系統(tǒng)增刪改查優(yōu)化
??可以使用 http 請求默認(rèn)值抽取共同的 ip 端口號 協(xié)議 編碼集 等信息
??測試計劃 ----> 右擊 -----> 添加 ----->配置元件 ------> http 請求默認(rèn)值
??作用: 通過復(fù)用屬性簡化實現(xiàn),提高測試效率
D、線程組高級(初始化與銷毀線程組)
D-1、線程組屬性
??屬性1:線程數(shù) ----- 模擬用戶數(shù)
??屬性2:時間值(Ramp-up Period(in seconds)) ----- 在指定時間內(nèi)啟動所有線程
??屬性3:循環(huán)數(shù) ---- 單個用戶訪問的次數(shù),高并發(fā)或循環(huán)訪問的時候可能由于服務(wù)器硬件性能的原因,會出現(xiàn)一些的錯誤率
D-2、調(diào)度器(就是個計時器,隔某個時間間隔就執(zhí)行某次操作)
??1)、循環(huán)次數(shù)設(shè)置為 永遠(yuǎn)
??2)、設(shè)置啟動延遲 x和持續(xù)時間y
????在 x 秒后訪問服務(wù)器,并且持續(xù) y 秒
??3)、設(shè)置啟動時間 M,和 結(jié)束時間 N
????在 M 時開始訪問,在 N 時結(jié)束
??注意:2 和 3 實現(xiàn)不能同時使用,否則矛盾了
3、Jmeter組件:參數(shù)化概述(了解)
A、是什么?
參數(shù)化就是動態(tài)的獲取并設(shè)置數(shù)據(jù)
B 、為什么?
比如執(zhí)行批量操作時,批量插入或批量刪除,之前數(shù)據(jù)都是手寫的,每執(zhí)行完都需要修改一次,效率太低
參數(shù)化就是可以以程序代替人工獲取并設(shè)置數(shù)據(jù): 安全 + 高效
4、Jmeter組件:參數(shù)化實現(xiàn)之CSV Data Set Config(重點中重點)
A、是什么?
Jmeter 參數(shù)化實現(xiàn)組件之一
B 、為什么?
通過這個組件可以動態(tài)獲取并設(shè)置數(shù)據(jù),實現(xiàn)類似批量添加操作(執(zhí)行一次,將多條數(shù)據(jù)插入到數(shù)據(jù)庫)
C、怎么用?
C-1、實現(xiàn)思想

C-2、實現(xiàn)流程

添加CSV Data Set Config的流程:線程組-右鍵添加-配置元件-CSV Data Set Config
如果是用文本文檔編輯的txt文件,要用gbk編碼集,用Notepad++編輯的txt文件,可用utf-8編碼集
D、其他
CSV Data Set Config ----- CSV 數(shù)據(jù)配置
CSV -----> 逗號分隔值文件格式
5、Jmeter 組件:線程組實現(xiàn)高級
測試計劃-右鍵添加-Threads-setUp Threads Group|tearDown Threads Group
setUp 線程組 : 最先執(zhí)行的線程組
??????? 加載程序主體執(zhí)行所需的資源
tearDown 線程組 : 最后執(zhí)行的線程組
???????程序正式關(guān)閉之前,可以將數(shù)據(jù)保存進(jìn)內(nèi)存
0、Jmeter組件:參數(shù)化
A、是什么?
參數(shù)化就是動態(tài)的獲取并設(shè)置數(shù)據(jù)
B 、為什么?
參數(shù)化就是可以以程序代替人工獲取并設(shè)置數(shù)據(jù): 安全 + 高效
C、Jmeter參數(shù)化組件
CSV Data Set Config ----- CSV 數(shù)據(jù)設(shè)置組件
用戶參數(shù)
用戶定義的變量
函數(shù)
1、Jmeter組件:參數(shù)化之用戶參數(shù)
A、需求(為什么)
向?qū)W生管理系統(tǒng)的學(xué)院表批量插入數(shù)據(jù)
B、實現(xiàn)(怎么用)
??B-1、實現(xiàn)思想(和 CSV 類似)
????將數(shù)據(jù)設(shè)置進(jìn)第三方,然后循環(huán)讀取數(shù)據(jù),和 CSV 的區(qū)別:
????CSV 是將數(shù)據(jù)設(shè)置進(jìn)外部的文本文檔,而用戶參數(shù)是將數(shù)據(jù)設(shè)置進(jìn) Jmeter 內(nèi)置組件
??B-2、實現(xiàn)流程
????1)、搭框架(測試計劃,設(shè)置HTTP請求默認(rèn)值,設(shè)置HTTP信息頭管理器,線程組,http請求_JSON,數(shù)據(jù)先不設(shè)置)
????重點:執(zhí)行次數(shù)是 3 次(不是設(shè)置循環(huán)次數(shù),而是設(shè)置線程數(shù))
????2)、使用 Jmeter 內(nèi)置組件存儲要插入的數(shù)據(jù):測試計劃右鍵添加-前置處理器(在http請求之前執(zhí)行)-用戶參數(shù)

????3)、讀取組件中的數(shù)據(jù)設(shè)置進(jìn) Http 請求的 JSON
????格式: ${變量名}
2、Jmeter組件:參數(shù)化之用戶定義的變量
A、需求(為什么)
對學(xué)生管理系統(tǒng)執(zhí)行增刪改查相關(guān)操作時,資源路徑不一定相同,單都是 /api/departments/ 開頭,每次都編寫此路徑效率偏低,怎么優(yōu)化?
B、實現(xiàn)(怎么用)
??1)、將共同數(shù)據(jù) /api/departments/ 使用一個組件存儲
??2)、編寫路徑時,直接調(diào)用組件存儲的值
????測試計劃右鍵添加-配置元件-用戶定義的變量
????調(diào)用的時候,寫入變量名在對應(yīng)的位置:${變量名}
????注意: 一般存儲全局使用的變量
3、Jmeter組件:參數(shù)化之函數(shù)
A、是什么?
函數(shù)是程序中最基本的封裝單元,封裝了一些常用功能,比如:計數(shù)器
B、需求(為什么)
循環(huán)10次查詢學(xué)生管理系統(tǒng)的學(xué)院信息,結(jié)果樹中,每次請求信息都是一樣的,需要添加標(biāo)號以示區(qū)分
C、實現(xiàn)(怎么用)
??1)、打開Jmeter內(nèi)置的函數(shù)組件
????方式1: 選項 - 函數(shù)助手對話框
????方式2: Ctrl + shift + F1
????方式3: 工具欄倒數(shù)第二個圖標(biāo)
??2)、選擇要使用的函數(shù), 給函數(shù)傳參,用Jmeter生成調(diào)用格式
????__counter 函數(shù)的參數(shù)1: true 每個用戶(用戶數(shù)這里就是線程數(shù)來設(shè)置的)單獨一個計數(shù)器, false 所有用戶共用一個計數(shù)器
??3)、在需要調(diào)用函數(shù)的位置使用Jmeter生成的調(diào)用格式
????這里需要調(diào)用函數(shù)的位置是“路徑:api/departments/?count=${__counter(TRUE, )}”
????調(diào)用格式: ${函數(shù)名(參數(shù))}
4、Jmeter組件:四種參數(shù)化方案比較
1、CSV 和用戶參數(shù)使用思想一致,流程上后者更簡單,但是實際應(yīng)用,使用 CSV 居多,因為數(shù)據(jù)量大時,CSV 更方便
2、 用戶定義的變量一般用來存儲全局變量,但是使用場景較少
3、函數(shù)實現(xiàn)更為靈活且 內(nèi)置了好多實現(xiàn)
4、總結(jié): 最常用的是 CSV + 函數(shù)
5、Jmeter組件:直連數(shù)據(jù)庫
A、是什么?
讓 Jmeter 直接和數(shù)據(jù)庫交互
B、為什么?
通過直接操作數(shù)據(jù)庫和接口操作比對
之前是通過接口操作數(shù)據(jù)庫,可能出現(xiàn)的問題: 比如查詢可能有漏查誤查的情況,解決方案是人工比對,效率低且有安全隱患,解決方案:讓程序代替人工
C、怎么用?
C-1、Jmeter 本身不具備直連數(shù)據(jù)庫的功能,整合第三方實現(xiàn)
??不同的數(shù)據(jù)庫對應(yīng)不同的 jar 包實現(xiàn)
??測試計劃中,點add directory or jar to classpath 瀏覽,導(dǎo)入所用數(shù)據(jù)庫對應(yīng)的連接jar包
C-2、配置數(shù)據(jù)庫的一些連接信息
??測試計劃右鍵添加-配置元件-JDBC Connection Configuration
??variable name: 給當(dāng)前連接組件命名,請求需要使用,例如起一個“mySQLiteConfig”
??database url : 數(shù)據(jù)庫路徑
??數(shù)據(jù)庫如不在本地,就涉及到網(wǎng)絡(luò)上的數(shù)據(jù)傳輸,需要用到協(xié)議,jdbc:sqlite:...
??java中單斜桿\是轉(zhuǎn)義字符,在表達(dá)路徑的時候要使用“\\”
??Driver Class : 第三程序的啟動入口
??username: 賬號
??password: 密碼

C-3、創(chuàng)建取樣器(JDBC Request)連接數(shù)據(jù)庫
??線程組右鍵添加-Sampler-JDBC Request
??屬性1 :調(diào)用的配置的變量名 ,“mySQLiteConfig”
??屬性2 : SQL 語句的類型
?????select Statement 查詢
?????update Statement 修改(增 刪 改)
??屬性3:寫入需要執(zhí)行的 SQL 語句
C-4、結(jié)果再處理
??就是要將 JDBC 操作的結(jié)果取出,并且傳遞給另外一個取樣器
??怎么實現(xiàn):
????1)、JDBC Request 中設(shè)置屬性 variable names: 變量名
????2)、JDBC Requst 操作數(shù)據(jù)庫時,會將查詢的結(jié)果賦值給步驟1設(shè)置的變量
????賦值規(guī)則:由于結(jié)果可能有多個,第 N 個結(jié)果賦值給 變量名N
????變量名# 對應(yīng)結(jié)果個數(shù)
????上述規(guī)則是固定格式: 記住
????怎么查詢賦值規(guī)則: 添加取樣器 Debug(調(diào)試) Sampler,可以查看底層實現(xiàn)細(xì)節(jié)
????3)、其他取樣器使用數(shù)據(jù)調(diào)用格式: ${變量名_N}
6、Jmeter組件:關(guān)聯(lián)(重點)
A、是什么?
就是一個請求的結(jié)果是另一個請求提交的數(shù)據(jù),二者不再是獨立存在的
B、為什么?
為了實現(xiàn)多樣的業(yè)務(wù)邏輯(可能由多個請求組合而成)
C、怎么用?
實現(xiàn)方案1:JDBC設(shè)置變量名
實現(xiàn)方案2: Xpath 提取器
?????http請求右鍵添加-后置處理器(在請求完處理結(jié)果)-Xpath Extractor
?????在另一個取樣器里引用的時候,用上引用名稱即可,例如:在另一個取樣器里路徑設(shè)置為/?wd=${myTitle}

實現(xiàn)方案3: 正則表達(dá)式提取器
?????http請求右鍵添加-后置處理器(在請求完處理結(jié)果)-正則表達(dá)式提取器
?????在另一個取樣器里引用的時候,用上引用名稱即可

如果從標(biāo)簽(html | XML)語言提取數(shù)據(jù)最好使用 Xpath 提取器,如果想要的數(shù)據(jù)是文本格式,正則表達(dá)式提取器更方便
7、Jmeter環(huán)境
A、什么是環(huán)境變量?path什么用?
系統(tǒng)設(shè)置之一,通過設(shè)置 PATH,可以讓程序在 DOS 命令行直接啟動
B、path怎么用?
如果想讓一個程序可以在 DOS 直接啟動,需要將該程序的目錄配置進(jìn) PATH
C、PATH 和我們有什么關(guān)系?
要配置 JDK 的環(huán)境變量(開發(fā)必備的)
需求1:配置 JDK 的PATH環(huán)境變量,要求在任意目錄下可以執(zhí)行 javac 程序
需求2:配置Jmeter 的 PATH 環(huán)境變量
需求3:配置 Jmeter 的 lib 目錄下的部分 jar 的環(huán)境變量
怎么配置?
??添加一個變量: xxxx_HOME=該程序的安裝目錄(一般是 bin 目錄的父級)
??修改 PATH : %xxxx_HOME%\bin
1、Jmeter組件:斷言(重點)
A、是什么?
程序代替人工判斷響應(yīng)結(jié)果是否符合預(yù)期
B、為什么?
安全、高效、功能強大
C、怎么用?
分類:
??C-1、斷言響應(yīng)的狀態(tài)碼
??C-2、斷言響應(yīng)的內(nèi)容
??C-3、斷言響應(yīng)的內(nèi)容的字節(jié)數(shù)
??C-4、斷言響應(yīng)的時間
??1)對一個請求的響應(yīng)內(nèi)容進(jìn)行斷言,所以在jmeter中是對一個http請求右鍵添加-斷言-響應(yīng)斷言
??屬性1:要測試的響應(yīng)字段:響應(yīng)代碼(斷言狀態(tài)碼)響應(yīng)文本(斷言響應(yīng)的內(nèi)容)
??屬性2:模式匹配規(guī)則:默認(rèn)選substring就行
??屬性3:添加要測試的模式:如果是狀態(tài)碼,就寫入狀態(tài)碼200,如果要包含些什么內(nèi)容,就寫入應(yīng)該要包含的內(nèi)容
??2)斷言響應(yīng)內(nèi)容字節(jié)數(shù),http請求右鍵添加-斷言-size assertion
??屬性1:response size field to test:如果是測試響應(yīng)內(nèi)容的長度,就應(yīng)該選response body,(響應(yīng)頭response headers里面包括響應(yīng)代碼還有響應(yīng)信息)
??屬性2:size to assert:填寫要斷言的字節(jié)數(shù)
??3)斷言響應(yīng)時間,http請求右鍵添加-斷言-斷言持續(xù)時間
??屬性1:斷言持續(xù)時間,填寫時間(毫秒),如填寫10,就會判斷響應(yīng)時間是否會小于10毫秒,如果小于10毫秒就沒問題,大于就有問題
2、Jmeter組件:集合點
A、是什么?
Jmeter 內(nèi)置組件之一,可以啟動多個用戶,讓多個用戶在同一刻去訪問服務(wù)器
B、為什么?
可以模擬高并發(fā)實現(xiàn),測試服務(wù)器性能
C、怎么用?
場景:模擬 N 個用戶在同一時刻查詢學(xué)院信息操作 (像以往的做法,只設(shè)置線程組里面的線程數(shù)是做不到“同一時刻”這個要求的,因為始終要設(shè)置ramp-up period,在這時間段內(nèi)登入N個用戶)
C-1、搭建框架(測試計劃、結(jié)果樹、線程組、http請求)
??線程組通過線程數(shù)模擬多個用戶
C-2、添加集合點組件(來實現(xiàn)“同一時刻”)
??http請求右鍵添加-定時器-Synchronizing Timer
??組件屬性1Number of Simulated Users to Group by: 填寫一組的用戶數(shù)
??組件屬性2Timeout in milliseconds: 超時時間,超過這個時間啟動的用戶,就不再訪問服務(wù)器,只允許在超時時間內(nèi)啟動的用戶去訪問
C-3、運行查看結(jié)果
??運行流程:
??1)、啟動線程 ----> 右上角可以看到啟動過程中線程數(shù)的變化
??2)、所有線程啟動完畢,再統(tǒng)一執(zhí)行請求,每執(zhí)行一個右上角就減1,可以看到線程啟動右上角數(shù)量增加得比數(shù)量減少要慢,因為它是模擬用戶聚集過程比較慢,訪問的時候同一時間都去訪問
??查看結(jié)果添加聚合報告:測試計劃-右鍵添加-監(jiān)聽器-聚合報告

C-4、注意
??超時時間可以設(shè)置為 0 : 無限等待
??無限等待時,如果線程總數(shù)小于集合點的一組線程數(shù),那么會掛起
??無限等待時建議 : 線程總數(shù)整除集合點的一組線程數(shù),否則會掛起
3、Jmeter組件:函數(shù)
A、是什么?
是程序中的封裝單元(最小的),封裝一些功能實現(xiàn)
B、為什么?(了解)
優(yōu)點1:易讀 易維護(hù)
優(yōu)點2:實現(xiàn)功能復(fù)用
C、怎么用?
流程:
??1)、打開Jmeter 內(nèi)置的函數(shù)功能模塊
??2)、選擇要調(diào)用的函數(shù),傳參數(shù),生成調(diào)用格式
??3)、哪里需要粘哪里
函數(shù)分類:
數(shù)字類
__counter() : 計數(shù)器
__random(): 隨機數(shù)函數(shù) ,包含左右臨界值
__time() : 獲取時間的函數(shù)
時間格式: yyyy/MM/dd HH:mm:ss == 年/月/日 時:分:秒
數(shù)據(jù)讀取
__CSVRead() :和 CSV Data Set Config 類似可以讀取 CSV 文件數(shù)據(jù)
需求:使用 CSVRead 函數(shù)實現(xiàn)學(xué)院信息的批量插入(比如: 3條)
思想:
??1)、搭建框架(線程組設(shè)置線程數(shù)),JSON 格式數(shù)據(jù)只是模板,具體數(shù)據(jù)動態(tài)獲取
??注意:執(zhí)行次數(shù)設(shè)置與信息頭設(shè)置
??CSV Data Set Config 執(zhí)行多次是使用的循環(huán)次數(shù),而 CSVRead 執(zhí)行多次使用的是線程數(shù)
??${__ReadCSV(E:\dataSource.txt,0)}——0表示第一次讀取第一行第1列,第二次讀取第二行第1列,第三次讀取第三行第1列
??2)、將數(shù)據(jù)存儲在外部的文本文檔(CSV 格式)
??3)、使用 CSVRead 函數(shù)逐行獲取并解析 CSV 文件,插入到提交的 JSON 數(shù)據(jù)中
??CSVRead 函數(shù)設(shè)置 CSV文件路徑時,必須得使用絕對路徑,不可以使用相對路徑
__setProperty() : 屬性設(shè)置
__property(): 屬性獲取
需求:http 請求1 訪問百度,將請求1響應(yīng)的 title 值傳遞給請求2,但是兩個請求不屬于同一個線程組
http 請求2 訪問 google /?wd=百度一下你就知道
實現(xiàn)思想 :
??將線程組內(nèi)部的數(shù)據(jù)導(dǎo)出去,存儲在共享空間中,其他線程組要使用數(shù)據(jù),就從共享空間獲取
實現(xiàn)流程:
??1)、將數(shù)據(jù)從當(dāng)前線程組導(dǎo)出 __setProperty
????變量名
????變量值 ${變量名}
????使用 BeanShell Sampler 調(diào)用函數(shù),把__Property的生成格式放在beanshell sampler的script里面
??2)、另外一個線程組將導(dǎo)出到共享空間的數(shù)據(jù)引入 __property
????根據(jù)變量名獲取
????注意:
????查看共享數(shù)據(jù),工作臺 ----> 添加 -----> 非測試元件 ----> property display
4、Jmeter:分布式
A、是什么?
多臺測試機協(xié)作(集群方式)完成測試任務(wù)
B、為什么?
安全(數(shù)據(jù)可以多臺機器備份,防止一臺機器掛掉就丟失數(shù)據(jù)的情況)、高效、功能強大(自己一臺機器創(chuàng)建1000個用戶,一臺機器的壓力太大了)
C、怎么用?
C-1、基本架構(gòu):

C-2、環(huán)境搭建:
??1) 、搭建偽分布式環(huán)境,一臺設(shè)備模擬 3 臺
??2)、在同一臺設(shè)備開啟 3 個 Jmeter 即可
????復(fù)制 3 個 Jmeter到三個不同的文件夾下,因為要同時啟動然后網(wǎng)絡(luò)間進(jìn)行數(shù)據(jù)交互,修改端口號(如果不是偽分布式,就不用改端口號了,不是偽分布了,設(shè)備都不一樣了,無所謂端口號了,jmeter可以監(jiān)聽相同的端口號)
??3)、偽分布式下配置端口號
????jmeter-bin-jmeter.properties文件-點開搜索“port”,找到server_port,去掉#注釋,修改成你設(shè)置的端口號在server_port后面
????端口號設(shè)置得大一點,一般大于1024,太小了有可能被其他程序占用了
????如果控制機不設(shè)置端口號的話,程序執(zhí)行的時候回自動生成一個端口號
????執(zhí)行機 A,設(shè)置一個端口號: 6666
????執(zhí)行機 B,設(shè)置一個端口號: 7777
????控制機要尋址執(zhí)行機 ,在控制機的jmeter.properties文件中配置: remote-hosts=執(zhí)行機A的IP:6666,執(zhí)行機B的IP:7777
C-3、分布式測試:
??1)、執(zhí)行機得啟動
????雙擊bin\Jmeter-server.bat以無GUI的方式啟動Jmeter服務(wù)
??2) 、需求:平均分配 1000 個用戶分別給 執(zhí)行機A 和 執(zhí)行機B 執(zhí)行
????控制機編寫相關(guān)腳本,測試計劃-線程組-線程數(shù)設(shè)置成50(或比較大的數(shù))-創(chuàng)建http請求-聚合報告查看匯總結(jié)果
??3)、分配給執(zhí)行機——>遠(yuǎn)程全部啟動
????重啟控制機的jmeter菜單欄有運行-遠(yuǎn)程啟動-啟動執(zhí)行機A或執(zhí)行機B或者遠(yuǎn)程全部啟動(同時啟動執(zhí)行機A和B)
????這時候執(zhí)行機A和執(zhí)行機B都會同時執(zhí)行http請求各50次
1、Jmeter組件:邏輯控制器(重點)
A、是什么?
邏輯控制器可以控制取樣器的實現(xiàn)順序(分支+循環(huán))的一種組件
類似于計算機語言的流程控制語句,流程控制就是控制代碼的執(zhí)行順序(分支+循環(huán))
B、為什么?
實現(xiàn)多樣的業(yè)務(wù)邏輯
C、怎么用?
C-1、分類
??類別1:分支控制器 ----- if控制器:符合條件就執(zhí)行
??類別2:往復(fù)控制器 ----- forEach控制器 + 循環(huán)控制器:循環(huán)執(zhí)行
C-2、實現(xiàn)
需求1:
??測試計劃中三個 http 請求,分別訪問百度、淘寶和京東,不是無差異的都執(zhí)行,而是有選擇性的執(zhí)行,定義一個用戶定義的變量,如果值是 百度,就訪問百度,是淘寶就訪問淘寶......
實現(xiàn):
??1)、搭框架(測試計劃,線程組,http請求,結(jié)果樹)
????用戶定義的變量存儲變量值(百度、淘寶或京東)
????測試計劃右鍵添加-配置元件-用戶定義的變量-填寫變量名和變量值,例如name,百度
??2)、添加一個分支組件,有選擇性的執(zhí)行 http 請求
????if 控制器: 編寫條件 “${變量名}” == "指定值"
????線程組右鍵添加-邏輯控制器-如果(if)控制器
????然后再在這個if控制器去添加http請求
??3)、查看結(jié)果
????符合條件的執(zhí)行,不符合條件不執(zhí)行
需求2:
有一組關(guān)鍵字 [hello,python,測試] 要依次取出,并在百度搜索
實現(xiàn):
??1)、搭框架(測試計劃,線程組,http請求,結(jié)果樹)
??2)、使用用戶定義的變量存儲一組數(shù)據(jù)
????這里有3個關(guān)鍵字,就是創(chuàng)建3個變量
????規(guī)則:同一變量前綴_編號
??3)、在線程組中添加一個 forEach 控制器,遍歷步驟2中的數(shù)據(jù),將數(shù)據(jù)設(shè)置進(jìn) http 請求
????forEach控制器中要設(shè)置“輸入變量前綴”,索引區(qū)間,“輸出變量名”
????注意索引: 左閉右開的
????在http請求中,在需要的位置添加剛才的輸出變量名,例如/?wd=${變量名}
??4)、查看結(jié)果
需求3:
循環(huán)查詢所有學(xué)院信息10次
??線程組右鍵添加-邏輯控制器-循環(huán)控制器
??然后添加循環(huán)次數(shù),再去添加http請求就可以了
思考: 線程組屬性可以控制循環(huán)次數(shù),那么循環(huán)控制器有什么用?
??循環(huán)控制器更靈活,線程組循環(huán)是組內(nèi)所有請求都循環(huán)執(zhí)行,循環(huán)控制器可以只是讓組內(nèi)指定的請求循環(huán)
2、Jmeter組件:QPS
A、是什么?
QPS: Query Per Second ---- 每秒查詢率,每秒訪問服務(wù)器資源多少次
20QPS == 每秒訪問20次
B、為什么?
一個用戶以 20QPS 的頻率訪問服務(wù)器,持續(xù)10秒,查看服務(wù)器的平均響應(yīng)時間?
一個用戶每秒訪問20次服務(wù)器,持續(xù)10秒,查看服務(wù)器的平均響應(yīng)時間和錯誤率?
C、怎么用?
使用新的組件實現(xiàn):http請求右鍵添加-定時器-常量吞吐定時器 Timer ----> Constant Throughput Timer(對請求設(shè)置就請求右鍵添加,對線程組設(shè)置就線程組右鍵添加)
實現(xiàn)流程:
??1)、搭框架(測試計劃,線程組,http請求,聚合報告)
????線程組的循環(huán)次數(shù)設(shè)置: 頻率乘以持續(xù)時間
??2)、添加常量吞吐定時器
????將 QPS(每秒查詢數(shù)) 換算成每分鐘查詢數(shù)
??3)、查看聚合報告:有響應(yīng)時間和錯誤率等數(shù)據(jù)
????throughput 顯示的是每秒查詢數(shù),參考步驟2設(shè)置的值,實際執(zhí)行一般圍繞步驟2的值上下波動
3、Jmeter組件綜合:作用域(記住)
A、是什么?
Jmeter 組件的作用范圍(可以影響到哪些組件)
B、分類
第一類:以聚合報告為例,只對樹形結(jié)構(gòu)上自己的直接父級以及兄弟級以及子級...有效
??基本所有組件都屬于第一類
第二類:邏輯控制器,只對子級有效
第三類:取樣器可以不依賴任何組件存在,可以不對其他組件產(chǎn)生任何影響,
??取樣器無作用域概念
4、Jmeter組件綜合:執(zhí)行順序(記住)
A、是什么?
組件: Jmeter的內(nèi)置功能,每一個功能都是一個組件
元件:元件中存儲的都是性質(zhì)相似的組件(就是對組件的分類管理)
B、排序
1.各元件之間的執(zhí)行順序
1) 配置元件(config elements) : 存儲了一些程序的全局性數(shù)據(jù)
2) 前置處理程序(Per-processors) :取樣器執(zhí)行之前執(zhí)行的組件,可以存儲批量執(zhí)行的數(shù)據(jù)
3) 定時器(timers) :在請求執(zhí)行集合用戶
4) 取樣器(Sampler) :訪問服務(wù)器
5) 后置處理程序(Post-processors) :處理響應(yīng)的結(jié)果
6) 斷言(Assertions) :斷言結(jié)果
7) 監(jiān)聽器(Listeners) :最后執(zhí)行
5、Jmeter擴展組件:圖形監(jiān)視器
A、是什么?
擴展組件:不是Jmeter 官方提供的,而是自己開發(fā)的組件,就是擴展組件
圖形監(jiān)視器:是監(jiān)視服務(wù)器的如,內(nèi)存、CPU、磁盤、網(wǎng)絡(luò)等運行狀態(tài)的組件實現(xiàn)
B、為什么?
模擬生產(chǎn)環(huán)境下,服務(wù)器運行狀態(tài)的測試
在壓力測試、性能測試、負(fù)載測試...使用該組件
C、怎么用?
C-1、實現(xiàn)思想
??1)、明確應(yīng)用場景:
????學(xué)習(xí)期間:服務(wù)器和測試程序在個人 PC 機,工作時,測試程序可能需要遠(yuǎn)程訪問服務(wù)器
????我們要測試的是服務(wù)器的運行狀態(tài)
??2)、圖解流程

C-2、實現(xiàn)流程
??1)、Jmeter本身不具備該功能,下載安裝第三方實現(xiàn)
??2)、在服務(wù)器端安裝竊聽程序,在測試機端安裝(整合進(jìn) Jmeter )接收程序
????竊聽程序: Server_Agent,啟動:雙擊 serverAgent.bat 使用端口號 4444
????接收程序: 復(fù)制Jmeter_Plugins_Standard 目錄下的 jar包,到Jmeter\lib\ext
??3)、編寫測試腳本,啟動并執(zhí)行
????a)、腳本線程組的循環(huán)次數(shù)設(shè)置為無限
????b)、添加接收組件: 測試計劃右鍵添加-監(jiān)聽器 ----> jp@gc permon Metrics Collector
????c)、執(zhí)行腳本

????
6、Jmeter組件:FTP(了解)
A、是什么?
FTP:文件上傳和下載
上傳:將文件從本地上傳到服務(wù)器
下載:將服務(wù)器資源下載到本地
B、為什么?
程序中常見操作,程序中必須的環(huán)境
C、怎么用?
C-1、保證服務(wù)器程序具備文件上傳和下載的功能,安裝一個文件上傳下載服務(wù)器(FTP服務(wù)器,記住默認(rèn)端口號是21,就好像http協(xié)議端口號默認(rèn)80)
??點擊Quick Easy FTP Server.exe 運行FTP服務(wù)器,啟動FTP服務(wù)器
C-2、Jmeter內(nèi)置了 FTP請求,可以通過此請求實現(xiàn)文件傳輸測試
??線程組右鍵添加-sampler-FTP請求
??屬性中:remote file是在服務(wù)器的文件名稱
??local file是客戶端的文件路徑和名稱
??get是下載,put是上傳,use binary針對MP3,MP4文件

7、Jmeter其他組件(不重要)
A、控制臺:非測試元件之 property diaplay
顯示系統(tǒng)共享數(shù)據(jù)
B、控制臺:非測試元件之 HTTP mirror server
內(nèi)置服務(wù)器
C、TestFragment:測試片段
測試計劃右鍵添加-Test Fragment-test fragment,里面可以封裝一些請求
C-1、作用和函數(shù)類似,可以封裝某些功能
C-2、執(zhí)行也和函數(shù)類似,不調(diào)用不執(zhí)行
C-3、調(diào)用方式1:線程組右鍵添加-邏輯控制器-模塊控制器-選擇你要的test fragment
???調(diào)用方式2: 線程組右鍵添加-邏輯控制器-include Controller-選擇整個測試計劃文件
8、Jmeter項目準(zhǔn)備:接口清單提取與整理
A、接口清單組成
功能模塊,每個功能又有三要素: URL + 提交的數(shù)據(jù) + 響應(yīng)的數(shù)據(jù)
B、API文檔
Application Programming Interface 應(yīng)用程序編程接口,此文檔中聲明了
程序的功能,以及該功能描述以及訪問的資源路徑和提交響應(yīng)的數(shù)據(jù),是開發(fā)和測試共同遵守的文檔說明
C、接口清單就是從 API 文檔提取整理的
因為 API 文檔內(nèi)容冗余,測試需要從中提取,測試需要的關(guān)鍵信息
D、怎么寫 API 文檔
API文檔其實描述項目中的功能,現(xiàn)在建議遵守RESTful風(fēng)格
1)、描述性文本盡量占到50%及以上
2)、格式清晰,規(guī)范,風(fēng)格統(tǒng)一
3)、業(yè)務(wù)邏輯設(shè)計時,全面,合理
E、怎么提取接口清單?
圍繞三要素提取功能實現(xiàn)
從API文檔去找到功能,再找到功能對應(yīng)的url,提交數(shù)據(jù),響應(yīng)數(shù)據(jù)
1、項目:功能測試(重點)
A、是什么?
測試系統(tǒng)中各個接口基本功能是否能夠正常運行,提交的數(shù)據(jù):正向 + 逆向(正常的數(shù)據(jù)+不正常的數(shù)據(jù))
B、為什么?
要模擬用戶的多樣性操作,檢測程序的響應(yīng)是否合情合理(符合預(yù)期)
C、怎么用?
C-1、搭建功能測試框架(CSV 必須)
??測試計劃-線程組,結(jié)果樹,HTTP信息頭,HTTP請求默認(rèn)值都要設(shè)置
??1)、將數(shù)據(jù)存入外部文檔文件
??2)、添加組件讀取文檔(CSV Data Set Config)
??3)、JSON 數(shù)據(jù)以固定格式引入步驟2讀取的數(shù)據(jù)
C-2、設(shè)計測試用例(將用戶的操作進(jìn)行分類)
??分類原則:正向 + 逆向(重點)
1. 覆蓋所有的必選參數(shù)(正向)
2. 組合可選參數(shù)(正向_覆蓋率問題,不是越高越好,當(dāng)可選字段太多,就可以隨機取樣,組合數(shù)據(jù)提交,考慮人力和時間成本)
3. 參數(shù)邊界值(逆向_ 比如年齡邊界)
4. 如果參數(shù)的取值范圍是枚舉變量,需要覆蓋所有枚舉值(測試所有可能的數(shù)據(jù))
5. 空數(shù)據(jù)(逆向_不錄入數(shù)據(jù))
6. 包含特殊的字符(空格,+-=/....)
7. 越界的數(shù)據(jù)(逆向_比如長度過長或過短)
8. 錯誤的數(shù)據(jù)(逆向_比如錯誤的手機號、身份證號、重復(fù)的id....)
實現(xiàn)模板:

C-3、參數(shù)化覆蓋測試用例
??按照測試用例編寫測試數(shù)據(jù)

總結(jié):
測試用例是在設(shè)計測試時使用什么類型的數(shù)據(jù),就是預(yù)設(shè)條件以及預(yù)期結(jié)果 ---- 大綱
參數(shù)化覆蓋測試用例聲明使用什么樣的數(shù)據(jù)(具體的),按照測試用例實現(xiàn)的 ---- 細(xì)節(jié)
2、項目:自動化測試
A、是什么?
由程序生成測試數(shù)據(jù)且讓程序代替人工判斷響應(yīng)結(jié)果,就是自動化測試(程序代替人工)
B、為什么?
安全、高效、功能強大
C、怎么用?
C-1、自動化測試原則
??1)、測試程序的主要功能以及一些經(jīng)常被復(fù)用的功能,并非所有功能
????自動化測試是對功能測試的補充,應(yīng)用場景:程序升級時,拓展了一些功能,可能要測試之前的功能是否可用
??2)、自動化測試測試數(shù)據(jù)一般只考慮正向數(shù)據(jù)
????因為自動化測試是對功能測試的補充 + 程序生成多樣的測試數(shù)據(jù)有困難
??3)、自動化測試完畢,數(shù)據(jù)庫數(shù)據(jù)必須恢復(fù)成測試之前的狀態(tài),優(yōu)點:重復(fù)使用,功能測試不具備這個優(yōu)點
??4) 、線程組之間不要有關(guān)聯(lián),不要有業(yè)務(wù)邏輯,優(yōu)點:可以單獨測試某一個功能
C-2、實現(xiàn)流程
??1)、搭建框架(測試計劃,線程組,結(jié)果樹,抽取 http請求默認(rèn)值、http信息頭管理器、結(jié)果樹)
??2)、setUp 和 tearDown 線程組
????setUp里負(fù)責(zé)新增數(shù)據(jù)的http請求,提交的數(shù)據(jù)可以是統(tǒng)一前綴counter計數(shù)器,然后加個響應(yīng)斷言
????tearDown里負(fù)責(zé)根據(jù)setUp傳過來的id值把對應(yīng)數(shù)據(jù)刪除
????之后的修改數(shù)據(jù)和查詢數(shù)據(jù)的請求就可以放在setUp和tearDown線程組外的線程組里面,對setUp里面新增的數(shù)據(jù)進(jìn)行修改和查詢,在別的線程組用property函數(shù)獲取到這個數(shù)據(jù)
??3)、數(shù)據(jù)生成可以借助于 counter 函數(shù),數(shù)據(jù)格式:自定義前綴_調(diào)用計數(shù)器函數(shù)
??4)、使用斷言組件讓程序代替人工判斷響應(yīng)結(jié)果,可以在每個請求后面都加一個響應(yīng)斷言
??5)、跨線程組傳值
????思想:setUp 將數(shù)據(jù)導(dǎo)出到共享空間,tear down 再將數(shù)據(jù)引入
????流程: 1)、setUp 要使用 setProperty 導(dǎo)出數(shù)據(jù)
????????怎么獲取要導(dǎo)出的 id?使用正則表達(dá)式提取器
??????2)、tearDown 使用 property 函數(shù)引入數(shù)據(jù)
??6)、普通線程組結(jié)合 setUp 和 teardown 使用時的執(zhí)行順序:
???? 多個普通線程組可能并發(fā)執(zhí)行
??7)、直連數(shù)據(jù)庫
????a、Jmeter本身不具備數(shù)據(jù)連接功能,整合第三方實現(xiàn)
????b、配置數(shù)據(jù)庫連接信息
?????變量名 + 數(shù)據(jù)庫路徑 + 第三方的啟動入口 + 賬號密碼
????c、使用 JDBC Request 操作數(shù)據(jù)庫數(shù)據(jù)
?????SQL語句有類型: select statement | update statement
?????variable names: 查詢的結(jié)果賦值給的變量名
????d、將數(shù)據(jù)傳遞給 http 請求
?????結(jié)果的賦值規(guī)則:變量名_# 結(jié)果個數(shù) | 變量名_N 第N個結(jié)果
?????可以通過 debug sampler 查看底層賦值規(guī)則
3、項目:性能壓力測試
A、是什么?
模擬多種場景測試程序的響應(yīng)時間,出錯率,服務(wù)器運行狀態(tài)....等實現(xiàn)
B、為什么?
測試程序的執(zhí)行效率,執(zhí)行效率直接關(guān)系到用體驗
C、怎么用?
C-1、原則
1. 參數(shù)化:參數(shù)化盡量避免采用從外部讀取參數(shù),使用固定參數(shù)+函數(shù)形式
( 如:${__counter(TRUE,)}),這是出于性能考慮
2. 察看結(jié)果樹:必須清除單個接口內(nèi)察看結(jié)果樹
(如不去掉,非常占用測試機自身性能),在測試計劃下添加一個察看結(jié)果樹
3. 報告:性能報告可根據(jù)實際需求選擇,建議保留添加聚合報告
4. 線程組:增刪改查每一個功能點,都需建立單獨線程組,而避免在同一個線程組內(nèi)添加
多個HTTP請求完成增刪改查(以便參數(shù)化對單個請求做壓測和并發(fā))
5. 分布式:如并發(fā)數(shù)量大,采用分布式測試
6. 新增/刪除:新增和刪除接口建議不要采用時間模式(定時器:常量吞吐定時器(模擬高頻次,
一秒訪問多次),集合點(模擬高并發(fā),同一時刻很多用戶訪問))來壓測,
直接使用線程數(shù)和循環(huán)
C-2、模擬300秒內(nèi)開啟100個虛擬用戶,每個用戶循環(huán)訪問服務(wù)器資源10次,要求平均響應(yīng)時間在 30 ms內(nèi),且錯誤率為0
??區(qū)間時間300秒:使用線程組的ramp-up period 屬性指定
??100個用戶:使用線程數(shù)指定
??循環(huán)10次:循環(huán)次數(shù)
??結(jié)果查詢:使用聚合報告
C-3、模擬 100 個用戶同時訪問服務(wù)器資源,要求平均響應(yīng)時間在30ms內(nèi),且錯誤率為0
??100個用戶:使用線程數(shù)指定
??同時訪問:集合點
C-4、模擬100個用戶都以20QPS的頻率訪問服務(wù)器資源,持續(xù)10s,要求平均響應(yīng)時間在30ms內(nèi),且錯誤率為0
??100個用戶:使用線程數(shù)指定
??循環(huán)次數(shù):QPS*持續(xù)時間
??QPS設(shè)置:定時器的常量吞吐定時器
4、項目:生成 html 格式測試報告
A、是什么?
以html文檔結(jié)合餅狀圖的方式顯示測試結(jié)果
B、為什么?
因為性能相關(guān)測試取樣結(jié)果比較龐大,那么使用html文檔顯示更友好更直觀
C、怎么用?
格式1:DOS命令行下執(zhí)行測試腳本生成html格式的測試報告
??Jmeter -n -t 腳本文件 -l 日志文件 -e -o 指定目錄
????例如:在測試腳本的目錄下運行cmd,
???????輸入“Jmeter -n -t 測試計劃_性能測試.jmx -l test.txt -e -o ./outHtml”
????-n 無圖形化界面執(zhí)行
????-t 腳本文件
????-l 日志
????-e 生成
????-o 輸出
??注意1:日志文件和輸出目錄不可以有內(nèi)容
??注意2:日志文件后綴只能有三種情況:.jtl,.txt,無后綴
格式2:先使用Jmeter運行測試腳本生成日志文件,再將日志文件轉(zhuǎn)換成html格式測試報告
??在聚合報告中,點瀏覽把數(shù)據(jù)寫入一個txt文件中,如test.txt
??在test.txt文件所在目錄下運行cmd,輸入命令:
????“Jmeter -g 日志文件 -o 指定目錄”
????-g 關(guān)聯(lián)日志文件
????-o 輸出