使用 MeterSphere 進行 Dubbo 介面測試
關於 Dubbo
Dubbo 是阿里巴巴公司開源的一個Java高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合,隨著近幾年微服務架構的興起,因為其理念很契合微服務,在國內有著比較廣泛的使用者群體。
Dubbo 架構
節點角色說明
- Provider:暴露服務的服務提供方
- Consumer:呼叫遠端服務的服務消費方
- Registry:服務註冊與發現的註冊中心
- Monitor:統計服務的呼叫次數和呼叫時間的監控中心
- Container:服務執行容器
呼叫關係說明
- 服務容器負責啟動,載入,執行服務提供者。
- 服務提供者在啟動時,向註冊中心註冊自己提供的服務。
- 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
- 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。
- 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。
- 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。
部署 Dubbo 服務
要針對 Dubbo 介面進行測試,首先我們需要有一套基於 Dubbo 框架的應用系統。這裡我準備了一個使用了 Dubbo 框架的 SpringBoot Demo 應用來進行說明,專案地址:https://github.com/metersphere/dubbo-docker(在此感謝下 原專案 作者 binblee 提供的專案)。如果大家自己已經有了現成的基於 Dubbo 框架的應用,可以忽略掉這一部分。
應用整體比較簡單,只提供瞭如下的一個介面兩個方法。
package com.example.service.producer;
import com.example.service.Greetings;
import com.example.service.User;
/**
* Created by libin on 9/19/16.
*/
public class GreetingsImpl implements Greetings {
public String say(String name) {
return "Greetings from " + name;
}
public String hello(User user) {
return "Name: "+user.name+", Age: "+user.age+", Gender: "+user.gender;
}
}
專案的啟動方式在 GitHub 上的 README 中已經有說明了,在此就不再贅述。當我們將專案執行起來以後,通過 HTTP GET 方法請求下 consumer 的 / 路徑,可以看到 consumer 給我們返回瞭如下資訊,說明 provider 是可以正常提供服務的。
[~/Documents/workspace/dubbo-docker/docker]# curl http://localhost:8899
Greetings from Dubbo Docker
常見的 Dubbo 介面測試方法
像 Dubbo 這樣的 RPC 框架,其提供的介面更多是一個應用系統之間各個元件/服務內部通訊使用的,不像基於 HTTP 的介面那樣,其實可選擇的測試工具不是特別多。
根據我自己的經驗,一般有如下幾種方式來進行 Dubbo 介面的測試,如果大家有其他更好的方式和工具,歡迎聯絡作者進行補充。
- 自己寫 Java 或 Python 等程式碼註冊成一個 consumer 呼叫服務進行測試
- 像上面例子裡的 consumer 一樣,由開發團隊把需要測試的介面再包裝成 HTTP 介面,通過測試 HTTP 介面測手段進行測試
- 在測試環境中通過官方提供的 telnet 命令,直接 invoke 特定服務進行測試
[~/Documents/workspace/dubbo-docker]# telnet localhost 20880
Trying ::1...
Connected to localhost.
Escape character is '^]'.
dubbo>ls
com.example.service.Greetings
dubbo>ls com.example.service.Greetings
say
hello
dubbo>invoke com.example.service.Greetings.say("Tom")
"Greetings from Tom"
elapsed: 0 ms.
dubbo>
- 使用 JMeter 配合 Dubbo Sampler 外掛進行測試
使用 MeterSphere 持續測試平臺進行 Dubbo 介面測試
除了上面提到的方法以外,我們還可以使用 MeterSphere 這樣的完全相容 JMeter 的測試平臺來進行 Dubbo 介面測試。關於 MeterSphere 的詳細介紹及部署使用方式,可以參考下面提供的連結。在這篇文章中,我們只聚焦於使用 MeterSphere 進行 Dubbo 介面測試進行介紹。
準備工作
- 已經部署了 MeterSphere 環境,並且有具有執行介面測試許可權的賬號
- 準備 Dubbo 介面相關資訊,包括註冊中心連線資訊、介面定義等
- 如果使用了本文中提到的 Duboo Demo 專案,由於服務註冊時的 IP 地址是 producer 容器的 IP,可能會出現呼叫不通的情況。這裡我們通過 zk 命令手動地把這個 Demo 環境的 provider 資訊改一下,把原來 provider 中的容器 IP 改為部署該 Demo 應用的主機 IP。
[~/Documents/workspace/dubbo-docker/docker]# zkcli -s 192.168.2.170:2181
2020/08/06 18:55:25 Connected to 192.168.2.170:2181
>>> ls /dubbo/com.example.service.Greetings/providers
[dubbo%3A%2F%2F172.19.0.2%3A20880%2Fcom.example.service.Greetings%3Fanyhost%3Dtrue%26application%3Dproducer-app%26dubbo%3D2.5.3%26interface%3Dcom.example.service.Greetings%26methods%3Dsay%2Chello%26pid%3D1%26revision%3D1.0-SNAPSHOT%26side%3Dprovider%26timestamp%3D1596709972791]
>>> delete /dubbo/com.example.service.Greetings/providers/dubbo%3A%2F%2F172.19.0.2%3A20880%2Fcom.example.service.Greetings%3Fanyhost%3Dtrue%26application%3Dproducer-app%26dubbo%3D2.5.3%26interface%3Dcom.example.service.Greetings%26methods%3Dsay%2Chello%26pid%3D1%26revision%3D1.0-SNAPSHOT%26side%3Dprovider%26timestamp%3D1596709972791
Deleted /dubbo/com.example.service.Greetings/providers/dubbo%3A%2F%2F172.19.0.2%3A20880%2Fcom.example.service.Greetings%3Fanyhost%3Dtrue%26application%3Dproducer-app%26dubbo%3D2.5.3%26interface%3Dcom.example.service.Greetings%26methods%3Dsay%2Chello%26pid%3D1%26revision%3D1.0-SNAPSHOT%26side%3Dprovider%26timestamp%3D1596709972791
>>> create /dubbo/com.example.service.Greetings/providers/dubbo%3A%2F%2F192.168.2.170%3A20880%2Fcom.example.service.Greetings%3Fanyhost%3Dtrue%26application%3Dproducer-app%26dubbo%3D2.5.3%26interface%3Dcom.example.service.Greetings%26methods%3Dsay%2Chello%26pid%3D1%26revision%3D1.0-SNAPSHOT%26side%3Dprovider%26timestamp%3D1596709972791
Created /dubbo/com.example.service.Greetings/providers/dubbo%3A%2F%2F192.168.2.170%3A20880%2Fcom.example.service.Greetings%3Fanyhost%3Dtrue%26application%3Dproducer-app%26dubbo%3D2.5.3%26interface%3Dcom.example.service.Greetings%26methods%3Dsay%2Chello%26pid%3D1%26revision%3D1.0-SNAPSHOT%26side%3Dprovider%26timestamp%3D1596709972791
>>>
建立專案
登入 MeterSphere 平臺後,點選在上方選單中選擇「介面測試」,在專案列表中點選「建立專案」
建立介面測試
點選介面上方中央的【建立測試按鈕】,建立新的介面測試集
在介面測試建立頁面選擇該測試所屬的專案,並填入介面測試集名稱
配置場景資訊
點選左側場景列表中的場景配置,在右側的場景資訊中,填入場景名稱,並選擇「Dubbo 配置」標籤頁。
在該頁面中把準備的註冊中心連線資訊,介面版本等資訊填好。
在場景中配置的變數、HTTP 請求頭、Dubbo 配置等資訊試用於該場景下的所有請求
新增 Dubbo 請求
點選左側場景列表中新增請求按鈕,選擇 Dubbo 型別的介面進行新增
填寫該請求的名稱後,點選「Get Providers List」從註冊中心中獲取服務列表,從下拉選單中選擇需要測試的介面及方法,根據該方法的定義,傳入所需的引數
上面新增的介面只有一個 String 型別的引數,再次新增一個引數型別為自定義類的請求。這裡我們檢視一下程式碼中這個介面的定義,發現其需要一個 User 類的物件作為引數
package com.example.service;
/**
* Created by libin on 9/19/16.
*/
public interface Greetings {
String say(String name);
String hello(User user);
}
同時結合 User 類的定義
package com.example.service;
enum Gender {
MALE, FEMALE;
}
public class User {
public String name;
public Integer age;
public Gender gender;
}
我們可以通過這樣的形式傳入引數值 {"name":"姓名", "age":年齡, "gender": "MALE 或 FEMALE"}
當介面請求都新增完成後,我們先把預設新增的那個 HTTP 請求刪掉,然後就可以點選「儲存並執行」按鈕進行 Dubbo 介面的測試了
檢視報告
測試執行完成後,即可在頁面上檢視到測試執行的結果報告
點選報告中的場景及請求,可檢視到請求的詳細內容及響應內容
轉化為效能測試
介面測試執行通過後,我們還可以通過 MeterSphere 提供的介面測試轉效能測試的功能,直接發起針對 Dubbo 介面的效能測試。
在「介面測試」頁面的「測試」下拉選單中,選擇我們剛建立的測試,點選更多操作中的「建立效能測試」選項
在彈出的頁面中根據需求配置壓力引數後,點選「儲存並執行」按鈕即可發起效能測試
相關文章
- MeterSphere 案例分享丨易盛資訊 MeterSphere 介面測試使用經驗
- [雪峰磁針石部落格]使用jython進行dubbo介面及ngrinder效能測試
- 介面測試怎麼進行,如何做好介面測試
- 乾貨 | Dubbo 介面測試技術,測試開發進階必備
- 使用java+TestNG進行介面迴歸測試Java
- postman進行http介面測試PostmanHTTP
- postman工具進行介面測試Postman
- charles 如何進行介面測試?
- Jmeter實現 Dubbo介面測試JMeter
- 使用 EOLINKER 進行介面測試的最佳路徑 (下)
- 使用抓包工具fiddler和apipost進行介面測試API
- 使用抓包工具 fiddler 和 apipost 進行介面測試API
- Postman 如何進行 Websocket 介面測試PostmanWeb
- 『動善時』JMeter基礎 — 52、使用JMeter測試Dubbo介面JMeter
- 開源測試平臺--MeterSphere
- 使用PostMan進行API測試PostmanAPI
- 使用 HTTPie 進行 API 測試HTTPAPI
- 使用Loadrunner進行效能測試
- 真的要進行介面測試自動化?
- python+requests進行get、post方法介面測試Python
- python+requests 進行 get、post 方法介面測試Python
- 開發者測試(4)-採用精準測試工具對dubbo微服務應用進行測試微服務
- 使用JUnit進行單元測試
- 使用jest進行單元測試
- 使用JMeter進行壓力測試JMeter
- 使用 Sysbench 進行 Linux 效能測試Linux
- 使用Wiremock進行整合測試 - kubilayREMMock
- 介面測試進階篇
- 介面測試的時候如何生成隨機資料進行測試隨機
- 基於 Django 的 Dubbo 介面測試工具平臺Django
- 如何測試有 dubbo 隱式傳參的介面
- metersphere 介面自動化中sql場景使用SQL
- 使用Jest進行React單元測試React
- 使用 PostMan 進行自動化測試Postman
- 使用PostMan進行自動化測試Postman
- 如何使用MOQ進行單元測試
- 使用 Spring Boot 和 @SpringBootTest 進行測試Spring Boot
- 使用 Spring Boot 進行單元測試Spring Boot