如何用jmeter做接口測試(怎樣用jmeter做接口測試

      網(wǎng)友投稿 1142 2025-03-31

      目錄


      1?????? 前言... 3

      2?????? 什么是Jmeter?... 4

      3?????? 安裝Jmeter 5

      3.1??????? 下載安裝包... 5

      3.2??????? 安裝軟件... 6

      3.3??????? 啟動JMeter 6

      4?????? 使用指南... 7

      4.1??????? 主界面... 7

      4.2??????? 工具欄... 7

      4.3??????? 工程窗口... 9

      4.3.1???????? 創(chuàng)建新工程... 9

      4.3.2???????? Thread Group(線程組)... 9

      4.3.3???????? Test Fragment(測試片段)... 11

      4.3.4???????? Listerner(-)... 11

      4.3.5???????? Config Element(配置元件)... 13

      4.3.6???????? Sampler(取樣器)... 14

      4.3.7???????? Logic Controller(邏輯控制器)... 15

      4.3.8???????? Pre/Post Processor(前置/后置處理器)... 17

      4.3.9???????? Timer(定時器)... 17

      5?????? API接口示例詳解... 18

      5.1??????? 總覽... 18

      5.1.1???????? 設(shè)置-... 18

      5.1.2???????? 設(shè)置變量... 18

      5.1.3???????? 設(shè)置線程組... 19

      5.1.4???????? 設(shè)置Test ?Fragment 21

      5.2??????? 單個用例執(zhí)行... 23

      5.3??????? 用例連跑... 25

      6?????? 改進(jìn)... 27

      1????? 前言

      你是不是剛剛脫離手工測試的苦海,又走進(jìn)寫go語言自動化用例的另一片苦海?是否對代碼中高度重復(fù)性的工作感到心累?如果是,那么,你的福利來了~~~

      本文應(yīng)用JMeter的背景是:PaaS 1.2開放K8S原生API,針對開放的90+原生接口,開始遍歷各種場景寫自動化用例,首先自動化用例不能嵌套太深,其次,在低耦合的情況下,代碼冗余很嚴(yán)重(我們做的可是接口參數(shù)校驗(yàn)啊),每一個測試點(diǎn)的差異都是一個冗長的測試用例。后來在夏老師的指導(dǎo)下,開始使用JMeter對接口進(jìn)行定義,調(diào)試方便,結(jié)果直觀,運(yùn)行只在秒級,尤其在檢視《API 接口》文檔時發(fā)揮了無與倫比的優(yōu)勢。這樣的神器,你值得掌握~~~

      由于小女子也才接觸不多時日,本文旨在給想要使用JMeter進(jìn)行接口測試的童鞋提供一點(diǎn)點(diǎn)幫助,想要更深入的了解JMeter的功能,也可以咨詢夏老師~~~如果有哪些改進(jìn)建議,也歡迎與我聯(lián)系,如果想獲得本文的示例代碼,那就只能與我聯(lián)系了,我不會告訴你,已經(jīng)更新到SVN上了,地址為:http://hghsvn04-rd:6801/svn/CRDU_PaaS_V100R002_SVN/DOC/04.Test/99 測試交流/CCE服務(wù)/OpenAPI/測試設(shè)計/驗(yàn)收用例

      2????? 什么是JMeter?

      Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。其原本的目的是提供一款易用且功能強(qiáng)大的Web服務(wù)器性能測試工具,但隨著不斷的發(fā)展,JMeter已經(jīng)可以完成很多的性能測試場景,其支持的協(xié)議包括:FTP, HTTP, JDBC, SOAP, LDAP, SMTP等等。

      3????? 安裝JMeter

      3.1????? 下載安裝包

      -:http://jmeter.apache.org/

      Step 1:

      Step 2:

      Step 3:

      Step 4:用戶可以根據(jù)需要下載JMeter的版本。本文寫作時所用版本為JMeter 3.0。

      3.2????? 安裝軟件

      JMeter本身并不需要安裝,下載后解壓到本地即可,但需要有Java環(huán)境的支持,在JMeter的主頁已經(jīng)說明清楚,并對Java版本有具體要求。

      如何用jmeter做接口測試(怎樣用jmeter做接口測試)

      3.3????? 啟動JMeter

      在解壓后的JMeter目錄有一個bin子目錄,進(jìn)入bin子目錄后雙擊jmeter.bat即可啟動JMeter。啟動JMeter時,會彈出一個Dos窗口,如果關(guān)閉該窗口,則JMeter自身也會關(guān)閉。

      可以寫一個vbs腳本啟動JMeter而不必彈出Dos窗口。腳本內(nèi)容如下:

      Dim wsh

      Set ? wsh=WScript.CreateObject("WScript.Shell")

      wsh.run "jmeter.bat",0

      將以上腳本保存為JMeter.vbs并存放到JMeter的bin目錄,再雙擊JMeter.vbs即可運(yùn)行JMeter且不彈出Dos窗口。

      4????? 使用指南

      4.1????? 主界面

      Jmeter的主界面比較簡潔,分為工具欄,工程窗口和屬性窗口。當(dāng)選中工程窗口中的節(jié)點(diǎn)時,屬性窗口會顯示相關(guān)的屬性。

      4.2????? 工具欄

      (1)----打開已有的工程;

      (2)----選中/去選中某個已選中的用例,灰色表示這個下面的所有用例均不會被選中參與用例執(zhí)行;

      (3)----運(yùn)行測試任務(wù);

      (4)---停止測試任務(wù);

      (5)----清除歷史結(jié)果;前一個按鈕只會清除選中的Listener的結(jié)果, 后一個按鈕會清除所有的結(jié)果;

      (6)----獲取聯(lián)機(jī)幫助:在工程窗口選中樣本,在工具欄上點(diǎn)擊幫助按鈕,會彈出如下的幫助窗口;

      (7)----調(diào)試窗口

      4.3????? 工程窗口

      4.3.1??????? 創(chuàng)建新工程

      點(diǎn)擊工具欄第一個按鈕可以新建一個工程。新工程分為兩個節(jié)點(diǎn):Test Plan(測試計劃),WorkBench(工作臺),Test Plan中的任務(wù)就是整個測試工程的核心,在其中會創(chuàng)建線程組,配置元件,樣本等等。

      在測試計劃中選中“Run Thread Groups consecutively”(獨(dú)立運(yùn)行每個線程組),則可以設(shè)置線程組順序執(zhí)行。如果Test Plan下有多個Thread Group,則會按前后順序等前一個線程組執(zhí)行完成后,后面的線程組才會執(zhí)行。如果不選中“Run Thread Groups consecutively”,則所有活動的線程組將會并發(fā)執(zhí)行。

      測試計劃是使用JMeter進(jìn)行測試的起點(diǎn),它是其他JMeter測試元件的容器。下面介紹JMeter使用的主要元件。

      4.3.2??????? Thread Group(線程組)

      線程組就是測試任務(wù),可以指定該任務(wù)執(zhí)行多少次,是否自動停止等。一個Test Plan可以添加多個線程組,相當(dāng)于多個測試任務(wù),多個測試任務(wù)可以并行執(zhí)行,也可以順序執(zhí)行。

      線程組代表一定數(shù)量的并發(fā)用戶,它可以用來模擬并發(fā)用戶發(fā)送請求。實(shí)際的請求內(nèi)容在Sampler中定義,Sampler被線程組包含。

      添加線程組

      在Test Plan上單擊右鍵,選擇“Add => Threads(Users) => Thread Group”。

      線程組類型

      ① Setup Thread Group

      該種類型的線程組相當(dāng)于一個預(yù)處理線程組,其任務(wù)會在Thread Group線程組前執(zhí)行,可以用于設(shè)置一些預(yù)置條件。

      ② Teardown Thread Group

      Teardown Thread Group剛好和setUp Thread Group作用相反,它用于執(zhí)行后置條件,可以用于測試任務(wù)完成后進(jìn)行環(huán)境恢復(fù)等運(yùn)作。

      ③ Thread Group

      使用最多的就是這種類型的線程組,該線程組就是測試任務(wù)的載體。

      線程組配置

      ① Number of Threads

      用于配置線程數(shù)的個數(shù),線程數(shù)越多,發(fā)送的消息量也越大。

      ② Ramp-Up Period

      可以理解為爬坡時間,該時間是指從任務(wù)啟動開始,到創(chuàng)建完所有的線程。比如100個線程,所需要的時間。如果Ramp-Up Period設(shè)置為10,而Number of Threads設(shè)置為100, 則表示這個100個線程,要花費(fèi)10秒,平均每秒會啟動10個線程。

      ③ Loop Count

      表示線程循環(huán)執(zhí)行多少次,如果是進(jìn)行調(diào)試測試工程,一般都會先設(shè)置成1次。而到正式執(zhí)行壓力測試時,會設(shè)置成“Forever”,即待久執(zhí)行,由用戶手工停止。

      4.3.3??????? Test Fragment(測試片段)

      測試片段是控制器上的一個種特殊的線程組,它在測試樹上與線程組處于一個層級。它與線程組有所不同,因?yàn)樗槐粓?zhí)行,除非它是一個模塊控制器或者是被控制器所引用時才會被執(zhí)行。為了在調(diào)試過程中可以隨意指定執(zhí)行哪個測試用例,所以本文將所有的組件都設(shè)置成了Test Fragment。

      4.3.4??????? Listerner(-)

      Jmeter中通過監(jiān)視元件(Listener)來觀察樣本發(fā)送的消息的狀態(tài)。常用的監(jiān)視元件有:View Results Tree和Summary Report。

      添加監(jiān)聽元件

      (2)View Results Tree(察看結(jié)果樹)

      該監(jiān)視元件會將樣本發(fā)送的每條消息的請求和響應(yīng)都詳細(xì)的記錄下來,方便進(jìn)行調(diào)試,可以協(xié)助測試人員在測試工程制作階段排除問題。

      (3)Summary Report(聚合報告)

      該監(jiān)視元件不會記錄詳細(xì)的請求和響應(yīng)報文,而只是記錄各個樣本請求和響應(yīng)的次數(shù),成功率及時間指標(biāo)等信息,該監(jiān)視元件對于系統(tǒng)的評價實(shí)測系統(tǒng)的各項(xiàng)指標(biāo)能提供直觀的數(shù)據(jù)。

      各個標(biāo)題的意義如下:

      Label: 樣本的名稱,如果工程中使用了多個樣本,可以通過label進(jìn)行區(qū)分;

      Samples: 總計發(fā)送的消息數(shù)

      Average: 消息的平均時延, 單位是ms

      Median:中位數(shù),也就是?50% 用戶的響應(yīng)時間

      90% Line:90% 用戶的響應(yīng)時間

      Min: 消息的最小時延: 單位是ms

      Max: 消息的最大時延: 單位ms

      Error: 失敗比例

      Throughput: 吞吐量,可以理解為TPS,即每秒發(fā)送的消息個數(shù)

      KB/Sec: 每秒發(fā)送的數(shù)據(jù)量

      4.3.5??????? Config Element(配置元件)

      配置元件(Config Element)相當(dāng)于協(xié)議管理器,主要用來管理協(xié)議連接,用的最多的主要是一些協(xié)議的默認(rèn)請求模板。比如要測試HTTP協(xié)議,就會用到HTTP類型的配置元件。需要注意的是,配置元件并不是消息驅(qū)動器,而只是協(xié)議管理器,只添加配置元件,并不能發(fā)送消息。

      (1)添加配置元件

      添加配置元件通過線程節(jié)點(diǎn),或者在Test Plan節(jié)點(diǎn)上單擊右鍵,選擇“Add => Config Element => HTTP Request Defaults”,如下圖所示:

      (2)配置元件作用范圍

      配置元件對同級別的后續(xù)節(jié)點(diǎn)生效,對子節(jié)點(diǎn)生效。配置元件并不是必須的,可以直接添加樣本元件,并進(jìn)行相關(guān)協(xié)議接口的配置。

      (3)添加變量

      使用變量的一個好處是可以通過一處修改,所有引用該變量的元件都會相應(yīng)修改。在測試計劃中添加的變量,在整個工程中都可以使用。如下圖所示:

      使用“User Defined Variables”配置元件來定義變量,比在測試計劃節(jié)點(diǎn)定義變量更靈活,用戶變量配置元件可以添加到不同的節(jié)點(diǎn)下,用來限制其作用范圍。

      4.3.6??????? Sampler(取樣器)

      Config Element相對來說是一個靜態(tài)的配置器,其并不會發(fā)送或者接收消息,而只會對同類型的樣本提供配置參考,如果樣本沒有配置服務(wù)器,而配置元件中配置了服務(wù)器信息,則樣本參照配置元件中的服務(wù)器配置信息進(jìn)行鏈路建立及消息收發(fā)。

      樣本是真正的執(zhí)行器,因此對一個工程來說,樣本是不可少的。

      添加樣本:樣本的類型決定了測試接口的類型

      Debug Sampler

      一般而言,View Results Tree就能滿足我們簡單調(diào)試工程的需要,但對于復(fù)雜的工程,特別是參數(shù)引用及變量引用非常多時,可能會出現(xiàn)要跟蹤各種變量的情況,Jmeter提供了一個元件叫Debug Sampler,該樣本可以在View Results Tree中顯示,并把所有的變量結(jié)果打印出來。可以添加多個Debug Sampler在不同的樣本后面, 這樣, 每個樣本執(zhí)行后的變量的狀態(tài)都可以進(jìn)行跟蹤。

      4.3.7??????? Logic Controller(邏輯控制器)

      邏輯控制器可以自定義JMeter發(fā)送請求的行為邏輯,它與Sampler結(jié)合使用可以模擬復(fù)雜的請求序列。Logic Controller類似于編程語言中的for循環(huán)那樣的控制結(jié)構(gòu),它可以控制樹形結(jié)構(gòu)下面包含的Samplers的執(zhí)行方式。

      添加Logic Controller

      (2)邏輯控制器類型

      ①僅一次控制器

      例如我們需要進(jìn)行一次用戶登陸操作,每一個用戶(Thread)都需要單獨(dú)login,但是在一個用戶的所有HTTP requests中(即一個session)只需要login一次。因此如果可以將這個Sampler放到Once Only Controller下面,即可保證login只在一個session中執(zhí)行一次。

      ②簡單控制器

      本文在K8S接口測試中,定義了大量的簡單控制器,其功能類似于Ginkgo中的Context,給用例添加說明,方便區(qū)分不同的用例級別。K8S的所有接口都定義在了簡單控制器中。

      ③模塊控制器

      本文在K8S接口測試中,同樣使用了大量的模塊控制器。前文提到,為了方便調(diào)試,把可以定義線程組的地方定義成了Test Fragment,因此,執(zhí)行這些Test Fragment就需要模塊控制器。如下圖,點(diǎn)擊模塊控制器,可以選擇執(zhí)行哪個定義的組件。

      4.3.8??????? Pre/Post Processor(前置/后置處理器)

      前置/后置處理器負(fù)責(zé)在生成請求之前和之后完成工作。前置處理器常常用來修改請求的設(shè)置,后置處理器則常常用來處理響應(yīng)的數(shù)據(jù)。比如Pre-processor(預(yù)處理器)可以在Sampler向Server發(fā)送請求之前定義一些變量或做處理;而Post-Processor可以在得到Response之后作一些操作。

      4.3.9??????? Timer(定時器)

      定時器負(fù)責(zé)定義請求之間的延遲間隔。例如需要在兩個HTTP請求之間延時一個時間段,可以加上定時器,這樣不至于給服務(wù)器造成過多的影響。

      5????? API接口示例詳解

      5.1????? 總覽

      整個K8S接口測試的工程結(jié)構(gòu)如上圖所示。

      5.1.1??????? 設(shè)置-

      本工程共設(shè)置了兩個-:察看結(jié)果樹和聚合報告,用于查看每次測試用例執(zhí)行的情況。

      5.1.2??????? 設(shè)置變量

      為了展示方便,本文針對PaaS 1.2開放的API接口各個組件的變量分別進(jìn)行了定義:

      k8s相關(guān)變量

      該節(jié)點(diǎn)定義了整個工程公共的變量,主要包括api gateway的ip和port,iam的ip和port以及測試過程中應(yīng)用到的鏡像。

      組件相關(guān)變量

      K8S開放的API接口主要概括為8部分:Cluster(自研)、RC、Service、Pod、Secret、Namespace、PodTemplate以及Endpoint。為了方便查看、修改,針對每個接口分別設(shè)置了一個變量模塊,定義的內(nèi)容主要是接口中會引用到的name、labels等信息。以RC為例如下所示:

      5.1.3??????? 設(shè)置線程組

      本工程共設(shè)置了兩個線程組:

      SetUp Thread Group

      該線程組的任務(wù)會在Thread Group線程組前執(zhí)行,可以用于設(shè)置一些預(yù)置條件。這里設(shè)置的預(yù)置條件包括獲取token,獲取集群Clusteruuid,作為其他組件執(zhí)行前的頭域。且將其設(shè)置為僅一次控制器,這樣在執(zhí)行線程組時,只需要執(zhí)行一次獲取token操作,不需要重復(fù)獲取。

      ①獲取token:按照具體的用戶名、密碼等獲取token;

      ②獲取token變量:這里添加了一個后置處理器來獲取token變量保存token值,方便后續(xù)引用;

      ③獲取集群clustername、clusteruuid

      ④設(shè)置全局屬性:將token、clustername、clusteruuid通過函數(shù)設(shè)置為全局變量;

      Thread Group線程組(命名為“單用例執(zhí)行”):該部分是整個工程執(zhí)行的入口;

      ①HTTP信息頭管理器:定義了用例的執(zhí)行需要攜帶的頭域信息。

      ②RUN:這是一個模塊控制器,在這里可以選擇要執(zhí)行的用例。

      5.1.4??????? 設(shè)置Test Fragment

      上文提到過,Test Fragment和線程組的區(qū)別是Test Fragment不被執(zhí)行,但可以被模塊控制器執(zhí)行。因此,這里將K8S開放的API接口以組件為單位進(jìn)行了定義,以RC為例,如下圖所示:

      (1)每一個接口定義為一個簡單控制器,沒有特殊的功能,主要是定義一些描述信息(暫時這么理解),由于沒有統(tǒng)一的寫作規(guī)范,所以定義的接口可能給讀者閱讀帶來不便,簡單說明如下:

      Create:創(chuàng)建一個RC;

      Delete:刪除指定的RC;

      ……

      (2)添加Sample:HTTP請求,這是接口的核心部分,定義了請求的URL及body體。有了這部分,就可以發(fā)送請求了。

      Test Fragment的模塊控制器

      如上圖所示,RC組件中的Replace接口有一個Read的模塊控制器,像鏈接一樣連接到了其他接口。沒錯,這就是模塊控制器與簡單控制器的區(qū)別,在執(zhí)行RC組件的Replace接口之前,需要先獲取接口信息,如果再重新定義一個Read接口,顯然是多余的,因此就可以添加一個模塊控制器,直接點(diǎn)擊其要“鏈接”的接口就可以獲取接口信息了,是不是很方便呢?

      5.2????? 單個用例執(zhí)行

      至此,JMeter的關(guān)鍵元件就介紹完了,定義的接口各部分也作了說明,下面就執(zhí)行一個完整的K8S用例看一下吧。還是以RC為例,執(zhí)行以下用例(各組件均已提前定義好名稱):

      創(chuàng)建Namespace

      接口定義:

      用例執(zhí)行

      查看結(jié)果:

      清理數(shù)據(jù):

      創(chuàng)建RCà更新RCà列舉RCà刪除RCà刪除Namespace:同樣的方法執(zhí)行這些操作,可以在結(jié)果樹中查看每一步的執(zhí)行情況;

      5.3????? 用例連跑

      這樣執(zhí)行用例怎么行呢,有100個用例我不是很心累嘛~~嗯,也許你已經(jīng)想到解決辦法了,沒錯,當(dāng)然就是使用模塊控制器啦,想怎么安排用例就怎么安排用例。

      創(chuàng)建一個Test Fragment,命名為“RC的一系列操作”;

      再創(chuàng)建一系列模塊控制器,“鏈接”到某個接口,如下圖:

      執(zhí)行測試用例時,只需要選中“RC的一系列操作”,就可以將該Test Fragment下的所有用例運(yùn)行起來了;

      察看一下運(yùn)行結(jié)果

      所有的用例都一次性執(zhí)行,并且可以看到,與之前執(zhí)行結(jié)果不同的是,SetUp Thread Group中定義的內(nèi)容只執(zhí)行一次,為什么?翻翻前面的內(nèi)容就知道了~~~

      5.4????? 結(jié)果展示

      今天發(fā)現(xiàn)了一個不錯的功能,如圖:

      默認(rèn)情況下,察看結(jié)果樹為“Test”類型,響應(yīng)的body體堆疊不能清晰識別,或者還要找一個Josn的解析器來幫我們分析一下響應(yīng)body體。然而察看結(jié)果樹的展示類型是可選擇的,如下圖:

      選擇顯示的類型為“Json”結(jié)構(gòu),Jmeter就可以輕松幫我們呈現(xiàn)結(jié)構(gòu)清晰的響應(yīng)body體。

      6????? 改進(jìn)

      (1)在測試過程中,測試人員都是根據(jù)自己的使用習(xí)慣進(jìn)行各個節(jié)點(diǎn)的定義、引用,沒有統(tǒng)一的規(guī)范,維護(hù)需要一定的成本,如果推廣JMeter的使用,應(yīng)該定義一個統(tǒng)一的規(guī)范。

      Java 自動化測試 任務(wù)調(diào)度

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:2003版excel表格怎么刪除相同項(xiàng)(2003刪除重復(fù)項(xiàng) excel)
      下一篇:erp生產(chǎn)管理(ERP生產(chǎn)管理如何解決盲目生產(chǎn)問題)
      相關(guān)文章
      亚洲bt加勒比一区二区| 亚洲美女免费视频| 久久精品九九亚洲精品天堂| 亚洲日韩AV一区二区三区四区 | 99久久亚洲综合精品成人网| 亚洲精品成人片在线播放| 亚洲成?v人片天堂网无码| 亚洲热妇无码AV在线播放| 亚洲精品麻豆av| 亚洲AV无码一区二区一二区| 亚洲乱码一二三四区乱码| 亚洲一卡2卡3卡4卡乱码 在线 | 亚洲av日韩av无码黑人| 亚洲AV日韩AV高潮无码专区| 亚洲伦另类中文字幕| 精品亚洲A∨无码一区二区三区| 亚洲gv猛男gv无码男同短文| 亚洲国产精品婷婷久久| 亚洲综合婷婷久久| 亚洲国产精久久久久久久| 亚洲一区二区三区夜色 | 亚洲av永久无码精品网址 | 亚洲一区影音先锋色资源| 亚洲视频在线观看| 亚洲系列国产精品制服丝袜第| 亚洲色av性色在线观无码| 亚洲videosbestsex日本| 久久乐国产综合亚洲精品| 亚洲av乱码一区二区三区按摩| 成a人片亚洲日本久久| 亚洲成AⅤ人影院在线观看| 亚洲午夜国产精品无码| 亚洲av色影在线| 亚洲免费中文字幕| 亚洲精品9999久久久久无码| 亚洲精品国精品久久99热| 亚洲精品国产字幕久久不卡| 亚洲人成在线影院| 亚洲精品国产精品国自产网站| 亚洲免费网站观看视频| 亚洲一区二区三区无码影院|