---
# System prepended metadata

title: "GUI-Layer-Augmented Load Testing - Running JMeter with\_SideeX"
tags: [Chinese]

---

---
title: GUI-Layer-Augmented Load Testing - Running JMeter with SideeX
tags: Chinese
---
# 擴增GUI層之負載測試 ：JMeter搭配使用SideeX

## 傳統Protocol層負載測試 vs. GUI層負載測試
JMeter是世界上最受歡迎的負載測試工具之一。它已廣泛用於負載測試Web應用程式的功能行為和性能。基本上，JMeter可以在Protocol層透過HTTP/HTTPS來模擬大量的負載連線。然而，隨著Web應用程式變得越來越複雜，尤其是從多頁式轉換為單頁式Web應用程式，越來越多交錯的AJAX HTTP/HTTPS連線是由GUI層中的用戶操作觸發的，而不單純只有頁面間跳轉的簡單HTTP/HTTPS連線。雖然目前[Web Driver Sampler](https://jmeter-plugins.org/wiki/WebDriverSampler/)(一種JMeter插件)可以使用真實的瀏覽器將負載測試提升至GUI層，但是在實務上仍然存在兩項挑戰：
1. 同時大量的開啟瀏覽器（即使是使用無頭模式）來讀取網頁，需耗費相對大量的CPU與記憶體，因此在數量上很難模擬大量的使用者。
2. 在網頁上一些看似簡單的操作，但背後常為一連串複雜的事件觸發與AJAX連線請求，而要為這些複雜行為撰寫大量WebDriver程式碼是一件繁瑣的工作。

## 混合方法：擴增GUI層之負載測試
對於這種情況，我們建議使用一種混合方法-**「使用JMeter發動大量簡單的HTTP/HTTPS請求，以模擬Web伺服器上的繁重負載，同時執行相對較少的GUI自動化操作進行側錄，藉此觀察受測系統GUI層之反應」**。至少通過這種方式，測試人員可以透過側錄結果得知當Web服務器承受沉重的負擔時，使用者在瀏覽器面前所看到的效能體驗為何。底下我們將介紹如何於JMeter上搭配使用SideeX來實現這種混合方法，JMeter可以在執行負載測試時同時運行SideeX錄製下的測試案例，在負載測試結束時，詳細的GUI層頁面呈現資訊將自動記錄到SideeX產生的測試報告中，包括每個指令的執行時間、畫面截圖、影片、時間折線圖和日誌。

## JMeter搭配使用SideeX
基本概念是讓JMeter在執行大量一般HTTP連線測試時同時透過[SideeX Runner](https://sideex.io/download/)來執行[SideeX Recorder](https://sideex.io/download/thanks)所錄下的測試案例。負載測試之後，SideeX Runner將生成包含詳細的GUI層資訊的測試報告。

> 預備工具:
> - [Java SE](https://www.oracle.com/java/technologies/javase-downloads.html)
> - [Node.js](https://nodejs.org)
### 步驟1：準備工具
1. 下載 [JMeter](https://jmeter.apache.org/download_jmeter.cgi)(已測試版本：JMeter 5.0)
2. 啟動Selenium Server
    - 下載[Selenium Server](https://www.seleniumhq.org/download/) (已測版本：3.141.59)
    - 下載[WebDriver](/@sideex/webdriver-zh#Here-are-the-browsers-currently-supported-by-SideeX)（建議使用Chrome WebDriver），並將其放置於與`selenium-server-standalone-{version}.jar`相同目錄下
    - 開啟命令列模式並且切換路徑至`selenium-server-standalone-{version}.jar`的目錄
    - 執行`java -jar selenium-server-standalone-{version}.jar`
3. 開啟命令列模式並執行`npm i -g @sideex/runner` 來安裝 [SideeX Runner](/@sideex/runner-zh)
4. 製作一個`config.json`，以下為`config.json`的範例。更多設定檔格式請參閱[附錄 A](/@sideex/runner-zh##-附錄-A---SideeX-Runner設定檔格式)。
    ```json=
    {
        "input": {
            "testSuites": ["YOUR_TESTSUITE_FILE_PATH"]
        },

        "webdriver": {
            "configs": [
                {
                    "serverUrl": "http://localhost:4444",
                    "type": "selenium",
                    "browsers":[
                        {
                            "active": true,
                            "capability": {
                                "browserName": "chrome"
                            }
                        }
                    ]
                }
            ]
        },
        "report": {
            "path": "[PATH_TO_SAVE_YOUR_TEST_REPORT]",
            "type":"html",
            "snapshot": 2,
            "snapshotQuality": 20
        }
    }
    ```


### 步驟2：在JMeter為SideeX Runner建立一個Thread Group 
1. 於TestPlan上按右鍵，`Add` =>`Threads (User)` => `Thread Group`，您可以在此設定`Number of Thread` 和其他Thread的設定
2. 於Thread Group上按右鍵，`Add` =>`Sampler` => `OS Process Sampler`
3. 設定Command與Parameter
    - 針對Windows作業系統，將`Command`設定為`CMD`，並在`Command parameters`底下加入兩個Value，`/C`與`sideex-runner -c {您config.json的路徑}`。
    - 針對MAC和Linux作業系統，將`Command`設定為`/bin/bash`，並在`Command parameters`底下加入兩個Value，`-c`與`sideex-runner -c {您config.json的路徑}`。
![](https://i.imgur.com/EAI4C7R.png)
5.  在Thread Group上按右鍵，`Add` => `Listener` => `View Results Tree`以呈現SideeX Runner之Log。
![](https://i.imgur.com/qup3Q9A.png)

### 步驟3. 執行Thread
點選toolbar上的start按鈕來執行thread
![](https://i.imgur.com/aGZkBjz.png)

### 步驟4：觀看測試報告
在執行結束後，測試報告將會被儲存至您`config.json`指定的路徑。
測試報告將顯示每個指令的時間、畫面截圖、影片、時間折線圖和日誌。測試報告可以是[HTML格式或JSON格式](/@sideex/book/%2F%40sideex%2Freportspec#HTML-Format)。此外，GUI層的動作時序顯示為三個折線圖。以下的折線圖範例顯示了第十個操作(clickAt)大約需要9秒才能完成，這顯示在伺服器處於高負載狀態時，使用者在點擊按鈕後將等待9秒。

![](https://i.imgur.com/WBqRjJO.png)