1. 程式人生 > >Jmeter簡單介紹與搭配Jenkins實現自動化測試實踐

Jmeter簡單介紹與搭配Jenkins實現自動化測試實踐

Bioneck 豈安科技研發工程師

負責 Stalker 專案的部分研發與測試工作,程式設計愛好者,樂於使用程式碼解決生活中的重複工作。

最近有個需要依靠 Jmeter+Jenkins 實現自動化測試後部署的需求,於是看了看Jmeter的資料,這裡給大家分享下。

Jmeter簡介

Apache JMeter 是 Apache 組織開發的基於 Java 的壓力測試工具。用於對軟體做壓力測試,它最初被設計用於 Web應用測試,但後來擴充套件到其他測試領域。 它可以用於測試靜態和動態資源,例如靜態檔案、Java 小服務程式、CGI 指令碼、Java 物件、資料庫、FTP 伺服器, 等等。JMeter 可以用於對伺服器、網路或物件模擬巨大的負載,來自不同壓力類別下測試它們的強度和分析整體效能。另外,JMeter 能夠對應用程式做功能/迴歸測試,通過建立帶有斷言的指令碼來驗證你的程式返回了你期望的結果。為了最大限度的靈活性, JMeter 允許使用正則表示式建立斷言。


Apache jmeter 可以用於對靜態的和動態的資源(檔案,Servlet,Perl 指令碼,java 物件,資料庫和查詢,FTP 伺服器等等)的效能進行測試。它可以用於對伺服器、網路或物件模擬繁重的負載來測試它們的強度或分析不同壓力型別下的整體效能。你可以使用它做效能的圖形分析或在大併發負載測試你的伺服器/指令碼/物件。

>>>>

Jmeter安裝

Jmerter 是基於 java的,所以安裝 Jmeter 之前必須先安裝 JDK 依賴,JDK 安裝的方法網上許多這裡就不多介紹了(建議安裝8.0以上版本)。

安裝好 java 後到 Jmeter 官網下載對應系統的壓縮包解壓到本地任意位置就可以使用了,這裡我建議下載3.0以上版本的 Jmeter,因為從3.0開始 Jmeter 可以直接生成視覺化的 HTML 報告,不再需要安裝外掛來生成。

>>>>

Jmeter測試元件

(1)負載發生器:用於產生負載,通常以多執行緒或是多程序的方式模擬使用者行為。 

(2)使用者執行器:通常是一個指令碼執行引擎,使用者執行器附加線上程或程序上,根據指令碼要求模擬指定的使用者行為。 

(3)資源生成器:用於生成測試過程中伺服器、負載機的資源資料。

(4)報表生成器:根據測試產生的資料生成報表,提供視覺化的資料顯示方式。

Test Plan (測試計劃):用來描述一個性能測試,包含與本次效能測試所有相關的功能。也就說本次的效能測試的所有內容是於基於一個計劃的。

下面看一下一個計劃下面都有哪些主要的功能模組(右鍵單擊“測試計劃”彈出選單)。

Threads (Users)執行緒 使用者

 
雖然有三個新增執行緒組的選項,名字不一樣, 建立之後,其介面是完全一樣的。之前的版本只有一個執行緒組的名字。現在多一個 setUp theread Group 與 terDown Thread Group。

setup thread group

可用於執行預測試操作,這種型別的執行緒執行測試前進行定期執行緒組的執行。

 teardown thread group.

可用於執行測試後動作,這種型別的執行緒執行測試結束後執行定期的執行緒組。

thread group(執行緒組).

這個就是我們通常新增執行的執行緒。通俗的講一個執行緒組,,可以看做一個虛擬使用者組,執行緒組中的每個執行緒都可以理解為一個虛擬使用者。執行緒組中包含的執行緒數量在測試執行過程中是不會發生改變的。

>>>>

測試片段

測試片段是在2.5版本之後新加的一個選項。

測試片段元素是控制器上的一個種特殊的執行緒組,它在測試樹上與執行緒組處於一個層級。它與執行緒組有所不同,因為它不被執行,除非它是一個模組控制器或者是被控制器所引用時才會被執行。

組成

>>>>

控制器

JMeter 有兩種型別的控制器:取樣器(sample)和邏輯控制器(Logic Controller),用這些原件來驅動處理一個測試。

>>>>

取樣器(Sample)

取樣器(Sample)是效能測試中向伺服器傳送請求,記錄響應資訊,記錄響應時間的最小單元,JMeter 原生支援多種不同的 sampler ,如 HTTP Request Sampler 、 FTP Request Sample 、TCP Request Sample 、JDBC Request Sampler 等,每一種不同型別的 sampler 可以根據設定的引數向伺服器發出不同型別的請求。

>>>>

邏輯控制器(Logic Controller)

邏輯控制器,包括兩類元件,一類是用於控制 test plan 中 sampler 節點發送請求的邏輯順序的控制器,常用的有 如果(If)控制器 、switch Controller 、Runtime Controller、迴圈控制器等。另一類是用來組織可控制 sampler 來節點的,如 事務控制器、吞吐量控制器。

>>>>

配置元件(Config Element)

配置元件(config element)用於提供對靜態資料配置的支援。CSV Data Set config 可以將本地資料檔案形成資料池(Data Pool),而對應於 HTTP Request Sampler 和 TCP Request Sampler 等型別的配置原件則可以修改 Sampler 的預設資料。(例如,HTTP Cookie Manager 可以用於對 HTTP Request Sampler 的cookie 進行管理)

>>>>

定時器(Timer)

定時器(Timer)用於操作之間設定等待時間,等待時間是效能測試中常用的控制客戶端 QPS 的手段。類似於 python 中的 sleep。JMeter 定義了 Bean Shell Timer、Constant Throughput Timer、固定定時器等不同型別的 Timer。

>>>>

前置處理器(Per Processors)

用於在實際的請求發出之前對即將發出的請求進行特殊處理。例如,HTTP URL 重寫修飾符則可以實現URL重寫,當 RUL中有 sessionID  一類的 session 資訊時,可以通過該處理器填充發出請求的實際的 sessionID 。

>>>>

後置處理器(Post Processors)

用於對 Sampler 發出請求後得到的伺服器響應進行處理。一般用來提取響應中的特定資料。例如,正則表示式提取器 則可以用於提取響應資料中通過匹配正則表示式獲得的資料。

>>>>

斷言(Assertions) 

斷言用於檢查測試中得到的相應資料等是否符合預期,斷言一般用來設定檢查點,用以保證效能測試過程中的資料互動是否與預期一致。

>>>>

監聽器(Listener)

監聽器可以用來對測試結果資料進行處理和視覺化展示的一系列元件。 圖行結果、檢視結果樹、聚合報告。都是我們經常用到的元件。

以上就是 Jmeter 的基本組成元件,我們用到的絕大部分測試計劃就是依靠以上元件完成。

接下來我就根據我們的專案測試例項來實際演示一下以上元件的用法,目前專案的測試需求主要是業務測試,如果需要壓力測試只需要把檢查資料正確性的步驟去掉,簡單的測試流程為向一個介面 get 請求將資料傳輸過去後,檢查日誌和資料庫中是否有正確的資料。 
這是我配置好後的測試計劃:

新增執行緒組

一個測試請求是基於一個執行緒組完成的。一個測試計劃必須有一個執行緒組。測試計劃新增執行緒組非常簡單。在測試計劃右鍵彈出下拉選單(新增-->Threads(Users)--->執行緒組)中選擇執行緒組即可。

jmeter 中 每個測試計劃至少需要包含一個執行緒組,當然也可以在一個計劃中建立多個執行緒組,多個執行緒組在測試計劃下面是並行執行的,也就是說這些執行緒組是同時被初始化並同時執行執行緒組下的 Sampler。


執行緒組主要包含三個引數:執行緒數、準備時長(Ramp-Up Period(in seconds))、迴圈次數。

  • 執行緒數:虛擬使用者數。一個虛擬使用者佔用一個程序或執行緒。設定多少虛擬使用者數在這裡也就是設定多少個執行緒數。

  • 準備時長: 設定的虛擬使用者數需要多長時間全部啟動。如果執行緒數為20 ,準備時長為10 ,那麼需要10秒鐘啟動20個執行緒。也就是每秒鐘啟動2個執行緒。

  • 迴圈次數:每個執行緒傳送請求的次數。如果執行緒數為20 ,迴圈次數為100 ,那麼每個執行緒傳送100次請求。總請求數為20*100=2000 。如果勾選了“永遠”,那麼所有執行緒會一直髮送請求,一到選擇停止執行指令碼。

在這裡,因為是檢查資料正確性只需要執行一次,所以全部設定為1。

新增引數

新增引數常用讀取 CSV 檔案將檔案內容設定為變數,我比較喜歡的是新增Beanshell元件,編寫java指令碼直接生成資料。 
線上程組上右鍵選單選擇新增--->配置元件--->CSV Data Set Config 就能新增 CSV文 件讀取。

主要設定的引數有: 

  • FileName: 填寫被讀取的 CSV 檔案地址和檔名。 

  • File Encoding: 預設為 ANSI。 

  • Varible Names: 定義文字檔案中的引數名,以逗號分隔例如 a,b,c,定義後可在指令碼在以 Shell 變數的同樣的方式引用。 

  • Delimiter: 定義分隔符,用於將變數分開,這裡定義的某個分隔符,則在 Variable Names 用這裡定義的分隔符,例如 a,b,c 那麼分隔符就是“,”。 

  • Recycle on EOF: 設定為 True 後,允許迴圈取值。 

  • Stop Thread on EOF: 當 Recycle on EOF 為 false 並且 Stop Thread on EOF為true,則讀完 csv 檔案中的記錄後,停止執行。 

  • Sharing Mode: 設定是否執行緒共享。

新增 Beanshell 需要線上程組上右鍵選單選擇新增--->Sampler--->Beanshell Sampler 就能新增 Beanshell 指令碼檔案讀取。

beanshell 十分強大,除了生成引數外也可以 import java 的包來完成許多複雜的邏輯,這裡就不細說了。

引數設定後可以在後續的元件中以 $ {引數名}的形式呼叫。

新增HTTP請求

生成引數後線上程組上右鍵選單(新增--->Sampler--->HTTP請求)選擇 HTTP 請求。對於 jmeter 來說,取樣器(Sampler)是與伺服器進行互動的單元。一個取樣器通常進行三部分的工作: 


1.向伺服器傳送請求 
2.記錄伺服器的響應資料 
3.記錄相應時間資訊 

HTTP Sampler 中可以設定的引數很多,這裡就說一下一些經常使用的:

  • 名稱:本屬性用於標識一個取樣器,建議使用一個有意義的名稱。 

  • 註釋:對於測試沒有任何作用,僅使用者記錄使用者可讀的註釋資訊。 

  • 協議:向目標伺服器傳送 HTTP 請求時的協議,可以是 http 或者是 https ,預設值為 http 。 

  • 伺服器名稱或 IP :HTTP 請求傳送的目標伺服器名稱或IP地址。 

  • 埠號:目標伺服器的埠號,預設值為80 。 

  • 方法:傳送HTTP請求的方法,可用方法包括 GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE 等。 

  • 路徑:目標 URL 路徑(不包括伺服器地址和埠)。 

    相關推薦

    Jmeter簡單介紹搭配Jenkins實現自動化測試實踐

    Bioneck 豈安科技研發工程師 負責 Stalker 專案的部分研發與測試工作,程式設計愛好者,樂於使用程式碼解決生活中的重複工作。 最近有個需要依靠 Jmeter+Jenkins 實現自動化測試後部署的需求,於是看了看Jmeter的資

    第七篇 Postman+Node.js+Newman+Jenkins實現自動化測試

    今天終於不咋忙了,學習整理一下一直想做卻沒實現的事兒,這事已經摺磨團隊半年之久了。因為專案是B端業務的測試,測試過程中需要生產大量的測試資料,而且都是跨多個系統的測試,對於後置流程的測試,這些同學往往要想有一條測試資料,就要自個去一步步的操作前置流程,最關鍵的是太耗時間,一條資料可能要花掉1個小時左右,加上測

    jmeter+ant+jenkins實現自動化介面測試

    一、安裝前準備 1.JDK:jdk-8u121-windows-x64 2.jmeter工具:apache-jmeter-2.13 3.ANT工具:apache-ant-1.9.7-bin 4.jenkins工具:jenkins-2.32.2 以上安裝包工具及版本下

    MQTT 簡單介紹實現

    1. MQTT 介紹 它是一種 機器之間通訊 machine-to-machine (M2M)、物聯網 Internet of Things (IoT)常用的一種輕量級訊息傳輸協議 適用於網路頻寬較低的場合 包含釋出、訂閱模式,通過一個代理伺服器(broke

    Ant+Jmeter+Jenkins實現介面測試自動化

    用Jmeter編寫介面測試用例,把用例儲存到svn中,利用Jenkins上實現持續整合,Jenkins中用Ant進行構建操作,Jenkins中加入HTML報告、效能報告、郵件傳送等功能。 以後每次可以用Jmeter寫介面測試用例,上傳svn,觸發Jenkins,實現介面測

    MQTT簡單介紹實現

    rac har machine 允許 load 不同 path esp 單個 1. MQTT 介紹它是一種 機器之間通訊 machine-to-machine (M2M)、物聯網 Internet of Things (IoT)常用的一種輕量級消息傳輸協議適用於網絡帶寬較低

    內核調試神器SystemTap — 簡單介紹使用(一)

    kprobe utils its preview response art sym about output a linux trace/probe tool. 官網:https://sourceware.org/systemtap/ 簡單介紹 S

    WebService的簡單介紹入門使用

    編程 子集 amp 分布 使用 互操作 開發 配置 ebs WebService是一個平臺獨立的,低耦合的,自包含的、基於可編程的web的應用程序,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發布、發現、協調和配置這些應用程序,用於開發分布式的互操作的應用

    Apache shiro的簡單介紹使用(spring整合使用)

    簡單介紹 ace .cn album spring 整合 amp 介紹 pri http://pic.cnhubei.com/space.php?uid=1774&do=album&id=1343605http://pic.cnhubei.com/space

    shell腳本基礎的簡單介紹簡單應用

    shell 變量 基礎 Shell腳本是Linux中很重要的一種“程序”。什麽shell腳本?shell腳本是提前設計的可執行語句,用來完成特定任務的文件。Shell腳本可分為交互式和非交互式交互式:指腳本在運行時,需要一些人為的參與,比如,鍵盤輸入數據,確認選項等。因為有人為的參與,所以運行時更加智能化,但

    搭建jenkins實現自動化部署

    ubunt 關閉 kcon 部署 epo java gpo add perm 1、安裝Jenkins Install Jenkins On Ubuntu wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.ke

    圖像處理 - ImageMagick 簡單介紹案例

    ans per function 博客 解析 滿足 文本水印 ast 坐標系統 在客戶端我們可以用 PhotoShop 等 GUI 工具處理靜態圖片或者動態 GIF 圖片,不過在服務器端對於 WEB 應用程序要處理圖片格式轉換,縮放裁剪,翻轉扭曲,PDF解析等操作, G

    jenkins--Jenkins+Git+codding+maven 實現自動化測試持續集成

    保存 app nbsp 添加 設置環境變量 webapp 系統管 text lan x1.打開Jenkins官網,下載jenkins.war https://jenkins.io/download/ 2.將該war包直接放置到Tomcat的webapp

    cassandra簡單介紹基本操作

    一、使用場景:   是一款分散式的結構化資料儲存方案(NoSql資料庫),儲存結構比Key-Value資料庫(像Redis)更豐富,但是比Document資料庫(如Mongodb)支援度有限;適合做資料分析或資料倉庫這類需要迅速查詢且資料量大的應用   相關概念:   &n

    使用jenkins實現自動化部署的案例記錄:tomcat+svn+maven+ssh+jenkins

    使用jenkins實現自動化部署的案例記錄:tomcat+svn+maven+ssh+jenkins 1.全域性配置,配置專案對應的tomcat伺服器的ssh登入地址,埠,密碼,路徑(寫/即可) 2.2-系統maven配置 3.構建一個maven風格的專案,選擇jdk版本

    Maven、Jenkins實現自動化部署

    工程例項程式碼:https://github.com/chocolateBlack/multi_env_folder_maven 利用Maven、Jenkins實現專案自動化部署,能夠按照bin、conf、lib檔案進行打包,並能夠通過Jenkins按照環境一鍵發不到伺服器上 首先通過Maven外掛

    Kafka的簡單介紹使用,生產者和消費者的JavaApi

    一、簡介 2、實時流資料管道,可以在 3、構建流式引用 4、是一個分散式流式處理平臺, 統稱訊息佇列或訊息中介軟體,有生產者和消費者之分 消費者去kafka中拉資料(而不是kafka給資料) 其實kafka就是一個臨時儲存的外掛,但是這個外掛效能很強大 kafka 是用scala編譯的 0.

    在Centos7搭建jenkins實現自動化部署springboot專案

    在Centos7搭建jenkins實現自動化部署springboot專案 安裝前要把基本的環境裝好 1.jdk安裝 關於centos上的java    Jenkins不支援在centos的預設的jdk上工作。所以要刪除自己裝 查詢jdk命令 rpm -qa | grep jdk 或者 rpm

    KVM簡單介紹管理

    簡介 KVM(Kernel-basedVirtual Machine,基於核心的虛擬機器)是適用於包含虛擬化擴充套件(Intel VT或AMD-V)的x86硬體上的Linux的完全虛擬化解決方案。它由可載入的核心模組kvm.ko組成,它提供核心虛擬化基礎架構和處理器特定模組,kvm-in

    Django簡單介紹環境搭建

    Django:MVC(model:主要封裝對資料庫層的訪問,對資料庫中的資料進行增刪改查操作。view:用於封裝結果,生成頁面展示的html內容。controller:用於接受請求請求,處理業務邏輯,與Model和View互動,返回結果)核心思想:解耦,讓不同的程式碼塊之間降低耦合,增強程式