我需要對 pgbouncer 執行負載測驗。所有客戶端在建立到資料庫的資料庫連接之前執行 SSH 隧道(通過 pgbouncer)。它是這樣的:
sshpass -p 'MY_PSW' ssh -o StrictHostKeyChecking=no -N -L LOCAL_PORT:127.0.0.1:63666 PGBOUNCER_USER@PGBOUNCER_ADDRESS -p PORT >/dev/null 2>&1 &
我的 Jmeter 專案目前有三個執行緒組:
設定執行緒組:在其中我連接到不同的資料庫以選擇隨機用戶名和架構
查詢執行緒組:在其中我使用以前的用戶(它成為使用
props.put("schema", vars.get("schema_1"));BeanShell 斷言的屬性)和查詢執行 JDBC 連接TearDown 執行緒組:我在其中關閉了 ssh 隧道。
現在每次我第一次從 GUI 運行測驗時,資料選擇(JDBC 請求)到查詢執行緒組都會給我一個錯誤:
Cannot create PoolableConnectionFactory (FATAL: "trust" authentication failed)
之后,如果我再次運行測驗,一切正常。我用除錯采樣器檢查了變數和屬性的內容,一切都是正確的。
當我在沒有 GUI 的情況下運行測驗時,主要問題就開始了。它總是因為那個錯誤而失敗。
我實際上不喜歡我必須使用 OS Process Sampler 建立運行命令的 SSH 隧道這一事實,但我找不到任何更好的解決方案。SSH 隧道是測驗的一部分,JMeter 的主/從配置不需要它。
我非常感謝您提供解決方案或建議來完成這項作業。謝謝。
uj5u.com熱心網友回復:
如果您在 OS Process Sampler 中使用該命令,它會在后臺運行,因此我的期望是 OS Process Sampler 立即回傳 SampleResult 并且隧道尚未啟動。
然后,當“查詢執行緒組”按照JMeter 測驗元素執行順序啟動時, JDBC 連接配置嘗試使用未完全建立的本地埠建立連接。該問題在非 GUI 模式下可重現的事實可能證實了我的猜測,因為 JMeter 在非 GUI 中運行得更快,因為它不需要浪費時間和資源來重繪 GUI 并將示例結果傳播給偵聽器。
我的期望是,如果您將 ie Flow Control Action采樣器添加到 setUp 執行緒組并將其配置為“休眠”幾秒鐘,它應該可以解決您的問題。如果沒有 - 嘗試通過將下一行添加到log4j2.xml檔案來增加JDBC 測驗元素的JMeter 日志記錄詳細程度
<Logger name="org.apache.jmeter.protocol.jdbc" level="debug" />
并比較jmeter.log 檔案中“成功”和“失敗”執行的條目。
uj5u.com熱心網友回復:
好的,我設法找到了解決方案。感謝Dmitri T Answer,我可以跟蹤問題,這是關于屬性設定不正確。
我正在使用 BeanShell 斷言在 setUp 執行緒組中的 JDBC 請求結果之后設定屬性。顯然,BeanShell 斷言是在整個運行結束時執行的,因此最后設定的屬性。在第一次執行期間,該屬性為空。
我改用了 Beanshell 采樣器,現在它可以作業了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380948.html
標籤:PostgreSQL的 jmeter ssh-隧道 pgbouncer
