Jmeter常用控件三、Sampler


 

標簽(空格分隔): Jmeter


Sampler是性能測試過程中向服務器發送請求,記錄響應信息,記錄響應時間的最小單元。 Jmeter默認支持的請求

  • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
  • SOAP / REST Webservices
  • FTP
  • Database via JDBC
  • LDAP
  • Message-oriented middleware (MOM) via JMS
  • Mail - SMTP(S), POP3(S) and IMAP(S)
  • Native commands or shell scripts
  • TCP
  • Java Objects

Http Request Sampler (HTTP請求)

image_1cr4j6aj8tuik9e15lr1v5e15l819.png-145.5kBHttp請求用發送,接收Http/Https請求。

基本用法

  • web服務器信息:

  • 協議:http 或則https(大小寫不明感)可以為空默認為http

  • 服務器器名稱或則ip:http請求發的的目標服務器名稱或者IP地址。

  • 端口:目標服務器端口,默認為 80.

  • http請求

  • 方法:發送器http請求的法。GET,POST,PUT,PATCH

  • 路徑:目標url路徑(不包括服務器地址和端口號)

  • 內容編碼:內容編碼的方式,默認為iso8859.

  • 自動重定向:如果選中該項,發送出的http請求后得到的響應是301/302時JMETER自動重定向到新頁面。默認不選中

  • 跟隨重定向:

  • 使用KeepAlive:當選中該選項時,Jmeter和目標之前使用keep-alive方式進行http通信,默認選中。

  • 對對psot使用mutilpart/from-data:當發送http post請求是,使用mutilpart/from-data方式發送,默認不選中

  • 與瀏覽器兼容的頭:

  • 在請求中發送URL參數,對於帶參數的URL,Jmeter提供了一個簡單的對參數進行參數化的方式。用戶可以將URL中的所有參數設置在表中,表中的每一行是一個參數值對(對應url中parementrel=valuel)

  • 消息體數據 http請求體中的的數據

  • 文件上傳 在請求中發送文件。

構造http 請求

用戶中心游客登錄

  • URL:/uc/v1/login/guest
  • 請求方法:GET
  • 參數: |參數名稱|類型|說明| |--|---|--| |appId|integer|項目appId,不是游戲服務器ID| |openId|string|自定義(注冊后玩家的openId、unionId)格式要求:32位字符串| |deviceId|string| 設備類型 1:iOS,0:Android| image_1cr6go1p6h5ehse1r2mqoh1q2j1m.png-125.2kB

游客綁定微信賬號

  • URL:/uc/v1/wechat/bind
  • 請求方法:PATCH
  • 參數: |參數名稱|類型|說明| |--|---|--| |appId|integer|項目appId,不是游戲服務器ID| |openId|string|自定義(注冊后玩家的openId、unionId)格式要求:32位字符串| |gid|integer|玩家全局唯一標示| |unionId|string|玩家微信認證的unionid| |wechatAccessToken|string|玩家微信認證的accesstoken|

gid需要從游客登錄的返回中獲取,需要在在游客登錄請求中加入后置處理器,獲取gid

image_1cr6hfbgn10e2f91rf11jbu96b23.png-137.4kB

JDBC Connection Configuration 數據庫連接配置

數據庫連接配置器,用來連接數據庫,是一個連接池。 界面介紹 image_1ct6tq2s8ba35sv1b65psj1olh39.png-123.1kB

  • Variable Name for created pool:數據庫連接池的名稱,我們可以有多個jdbc connection configuration,每個可以起個不同的名稱,在jdbc request中可以通過這個名稱選擇合適的連接池進行使用。

  • Max Number of Connections:連接池的最大連接數,在大多數情況下,將其設置為零(0)。這意味着每個線程將獲得其自己的池,其中包含單個連接,即線程之間不共享連接。如果你真的想使用共享池),那么將最大鏈接數設置為與線程數相同,以確保線程不會相互等待。

  • Max Wait (ms):最大超時間

  • Time Between Eviction Runs (ms) :空閑連接池清理的時間間隔。

  • Auto Commit:事務是否自動提價選項,比如Oracle執行一條更新操作,不Commit一下,數據不會更新到數據庫中的,這個選項幫我們自動提交。

  • Transaction Isolation:JDBC事務控制 數據庫的事務控制ADIC傳送門

    • TRANSACTION_NONE:不支持的事務,TRANSACTION-NONE=0

    • TRANSACTION_READ_UNCOMMITEED:允許臟讀,不可重復讀和幻讀

    • TRANSACTION_READ_COMMITEED:禁止臟讀,允許不可重復讀和幻讀

    • TRANSACTION_REPEATABLE_READ:禁止臟讀和不可重復讀,允許幻讀

    • TRANSACTION_SERILIZABLE:禁止臟讀,不可重復讀和幻讀

    • DEFAULT:JMETER設定的。默認值是1,其實是TRANSACTION_READ_COMMITEED 禁止臟讀,允許不可重復讀和幻讀。

    • 什么是臟讀,不可重復讀,幻讀

      臟讀:一個事務讀取另外一個事務未提交的數據。
        不可重復讀:一個事務再次讀取之前的數據時,這個數據已經被另外一個事務修改。
        幻讀:一個事務重新執行一個查詢,返回的記錄包含了其他事務提交的新紀錄。
  • Test While Idle:測試池的空閑連接,請參閱BasicDataSource.html#getTestWhileIdle。查詢驗證。

  • Soft Min Evictable Idle Time(ms):

  • Validation Query:驗證SQL的語法

  • Database URL:數據庫地址,以下為不同數據庫的連接方式

    MySQL
    Driver class
    com.mysql.jdbc.Driver Database URL jdbc:mysql://host[:port]/dbname PostgreSQL Driver class org.postgresql.Driver Database URL jdbc:postgresql:{dbname} Oracle Driver class oracle.jdbc.OracleDriver Database URL jdbc:oracle:thin:@//host:port/service OR jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no}))(connect_data=(sid={sid}))) Ingress (2006) Driver class ingres.jdbc.IngresDriver Database URL jdbc:ingres://host:port/db[;attr=value] Microsoft SQL Server (MS JDBC driver) Driver class com.microsoft.sqlserver.jdbc.SQLServerDriver Database URL jdbc:sqlserver://host:port;DatabaseName=dbname Apache Derby Driver class org.apache.derby.jdbc.ClientDriver Database URL jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]] 
  • JDBC Driver class:數據庫類型,數據庫的驅動包需要放到/lib目錄下,使用mysql依賴mysql-connector-java-8.0.13.jar下載地址

  • Username:用戶名

  • Password:密碼

JDBC Request JDBC 請求

用來向數據庫發送請求

界面介紹 image_1ct2kqn3i1gv31hegmtii781n79m.png-42.1kB

  • Variable Name of Pool declared in JDBC Connection Configuration(必須) :連接池綁定的JMeter變量的名稱。這必須與JDBC連接配置的“變量名稱”字段一致。

  • Query Type:查詢類型,根據語句設置查詢的類型

    • Select Statement:執行查詢語句的時候使用。可以使用${}引入參數,不可使用占位符進行參數化
    • Update Statement :執行更新操作的時候用到,包括插入與修改。可以使用${}引入參數,不可使用占位符進行參數化。
    • Callable Statement:對應JDBC規范中的CallableStaenent對象,它為所有的DBMS提供了一種以標准形式調用存儲過程的方法,白話就是可以調用存儲過程,也就是可以有入參,有占位符。可以使用${}引入參數,也可以使用占位符引入參數。
    • Prepared Select Statement:預編譯查詢語句,與Select Statement相比效率更好,可以使用${}引入參數,可以使用占位符引入參數。
    • Prepared Update Statement:預編譯更新語句,包括查詢與插入,與Update Statement 效率更好,支持占位符引入參數。 可以使用${}引入參數,可以使用占位符引入參數。
    • Commit:當前連接狀態中的內容提交,查詢語句中的SQL在執行完成后馬上提交,使用該項時JDBC Connection Configuration 中的 Auto commint 選項為False。可以使用${}引入參數,可以使用占位符引入參數。
    • Rollback:當前連接狀態中的內容可回滾。可以使用${}引入參數,可以使用占位符引入參數。
    • Autocommit(false):指明不要自動提交,如果JDBC Connection Configuration 中的 Auto commint為true 覆蓋該選項。可以使用${}引入參數,可以使用占位符引入參數。
    • Autocommit(true):指明允許自動提價。可以使用${}引入參數,可以使用占位符引入參數。
    • Edit :變量應用,引用的為上述的任意一個變量
  • SQL Query SQL查詢語句,不需要輸入行尾的分好

  • Parameter values:參數值,多個值用,分割

  • Parameter types:參數類型,INTEGER, DATE, VARCHAR, DOUBLE

  • Variable Names:SQL的執行語句往往返回的是一個數據集,我們可以把它保存的變量中,讓后面的元件調用。

  • Result variable name :上面的 Variable Names中額變量是個數與隊列對應的,Result variable name創建一個數組,保存所有返回的結果。

  • Query timeout:定義查查詢時間

  • Handle result set:定義如何處理由callable- statements語句返回的結果

實例1 連接mysql數據庫 ,並查詢數據庫的表

  • 連接mysql數據庫,

    • 定義數據庫連接池名稱:MYSQL
    • URL:jdbc:mysql://rm-wz955w1jr2dnj6u9bo.mysql.rds.aliyuncs.com:3306/majiang
    • JDBC Driver class:com.mysql.jdbc.Driver
    • Username:
    • Password: image_1ct7bvnb31u95152hqu61oiff063m.png-69.8kB
  • 查詢全部表 image_1ct7cae2l1pjomna14j11iov1qcma3.png-45.8kB

  • 查詢結果 image_1ct7cbtqs9rl9aaj56190319mdaj.png-395.7kB

實例2 對查詢數據進行參數化

  • 使用${}引入參數 用戶自定義的變量添加用戶昵稱變量nickname image_1ct7kafab1rogsu81u12k73nhscu.png-6.1kB 在查詢語句中使用通過${nickanme}引入變量, 注意加括號,不然報錯 image_1ct7kcm8h1ddii7p18nq1ffd15lbdb.png-5kB 查詢結果 image_1ct7kfnuv1l0skvf1qrq1pvg1k2le8.png-17kB

  • 通過占位符?引入變量 Parameter values:hunan%, 9586 Parameter types:VARCHAR,INTEGER 查詢語句

    select Nike, id, unionid, openid from user where Nike like ?  and openid=?
    

    image_1ct9fiibk1odv1dvt1g9utdg1pm99.png-56.3kB查詢結果 image_1ct9fp5mo9q91uhu1iuv7oo93716.png-12.1kB

實例3引用返回的的結果

  • 通過設置Variable Names來保存變量 查詢語句

    select Nike, id, unionid, openid from user where Nike like ?      and openid<?
    

    我們的查詢語句中指定了4個返回的值,也就是說會返回4個列。在Variable Names 設置A,B,C,DA保存第一列的數據,B保存第二列的數據以此類推。那么如下變量會被設置為。

    A_#=2 (總行數) A_1=1列, 1行 A_2=1列, 2行 C_#=2 (總行數) C_1=3列, 1行 C_2=3列, 2

    如果返回結果為0,那么A_#C_#會被設置為0,其它變量不會設置值。如果第一次返回6行數據,第二次只返回3行數據,那么第一次那多的3行數據變量會被清除。可以使用可以使用${A_#}, ${A_1}...來獲取相應的值 image_1ct9i3ma818rcip1up31lh31dna33.png-57.1kB使用Beanshell Sampler 輸出結果 image_1ct9i4tfr7ov1ng11uba1aockhk3g.png-20kB 日志結果 image_1ct9i97smdofamd109s1usd3kh4d.png-137.8kB請求返回的結果 image_1ct9ia5il1dks18vg12ea1p2jefv4q.png-35kB

  • 通過Result variable name保存結果,Result variable name會將返回的結果保存為數組,通過vars.getObject("result").get(0).get("Nike")獲取值 image_1ct9t3tp01rr3fkqh08v591makm.png-115.2kB輸出語句 image_1ct9t1fppgme2g814eh1k4g9ft9.png-37.3kB 執行結果 image_1ct9t627d129p1uvs16jl1q061hrv13.png-122.5kB在http元件中使用結果,通過函數__jexl3()執行vars.getObject("result").get(0).get("Nike") image_1ct9ta69n12oo17v119avups12a620.png-16.2kB

TCP Sampler Tcp控制元件

Tcp用來與指定服務器建立TCP/IP連接,發送文本,等待服務器響應。

界面介紹 image_1cth5qh121g0iuuh13l412nl87i29.png-46.2kB

  • TCPClient classname 需要使用的Tcp客戶端,Jmeter提供了三個TCPClient,但是因為不同的傳輸編碼方式,所以測試TCP的時候大部分情況需要自己編寫TCPClinet。
    • TCPClientImpl
    • BinaryTCPClientImpl
    • LengthPrefixedBinaryTCPClientImpl
  • ServerName or IP:服務器名稱或則TCP服務器地址
  • Port Number:服務的端口號
  • Re-use connection:復用連接,勾選后將保持連接,不勾選將在讀取數據后關閉連接
  • Close connection:關閉連接,勾選后,在Tcp Sampler運行結束后關閉連接
  • Set NoDelay:勾選后使用納格算法(Nagle's algorithm)
  • SO_LINGER:創建套接字的時候指定延遲時間啊(已秒為單位),如果設置為0,可以防止大量套接字處於TIME_WAIT狀態。
  • End of line(EOL) byte value:行尾的字節值,將值設置為-128~+127之外的值可以跳過檢查。可以在jmeter.properties中設置eolByte的屬性,如果在TCP Sampler Config和jmeter.properties同時設置該了該屬性,會使用TCP Sampler Config中的設置
  • Connect Timeout:連接超時
  • Response Timeout:響應超時
  • Text to Send:需要發送的文本
  • Login User:用戶名,默認不使用
  • Password:密碼,默認不使用

實例1,發送簡單的文本信息 Classname:TCPClientImp

image_1cthmvji5sjd16aqi75ejbv736.png-97.5kB返回的信息 image_1cthn1sjl1fnbm2e1g3o16uq3od40.png-41kB


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM