軟件測試 | Dubbo協(xié)議的接口測試
Dubbo
Dubbo 解決了各服務(wù)間通信問題,是分布式服務(wù)的解決方案之一。從單一應(yīng)用架構(gòu)到流動(dòng)計(jì)算架構(gòu)的演 變,分布式服務(wù)是重中之重。隨著服務(wù)被拆分越來越細(xì),服務(wù)間的信息交互是一大痛點(diǎn)。 Dubbo 通過 注冊(cè)中心解決多服務(wù)間通訊的障礙,進(jìn)行 Dubbo 測試的關(guān)鍵是:創(chuàng)建 Dubbo 的客戶端(消費(fèi)者),使 該客戶端與服務(wù)端(生產(chǎn)者)正常通信。客戶端通過斷言函數(shù)執(zhí)行結(jié)果,完成 Dubbo 服務(wù)測試。

節(jié)點(diǎn)角色說明

調(diào)用關(guān)系說明
服務(wù)容器負(fù)責(zé)啟動(dòng),加載,運(yùn)行服務(wù)提供者。
服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù)。
服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù)。
注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊(cè)中心將基于長連接推送變更數(shù)據(jù)給消 費(fèi)者。
服務(wù)消費(fèi)者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗, 再選另一臺(tái)調(diào)用。
服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中 心。
把上述關(guān)系簡化,其中服務(wù)提供者是 QA 需要測試的對(duì)象。QA 需要搭符合注冊(cè)中心的服務(wù)消費(fèi)者,利 用服務(wù)消費(fèi)者對(duì)服務(wù)提供者進(jìn)行測試:

問題關(guān)鍵在于如何搭建服務(wù)消費(fèi)者,不同注冊(cè)中心提供不同的搭建方案,比如:
Nacos 注冊(cè)中心
Zookeeper 注冊(cè)中心
Multicast 注冊(cè)中心
Redis 注冊(cè)中心
Simple 注冊(cè)中心
有些公司內(nèi)部會(huì)開發(fā)自己的注冊(cè)中心,各位自行查找參考手冊(cè),下面以 Zookeeper 為例,簡述配置過 程,詳細(xì)內(nèi)容可參考 Zookeeper 官網(wǎng), Zookeeper 通過配置文件配置注冊(cè)中心的信息,比如:
# The number of milliseconds of each tick?
tickTime=2000
# The number of ticks that the initial?
# synchronization phase can take?
initLimit=10?
# The number of ticks that can pass between?
# sending a request and getting an acknowledgement?
syncLimit=5?
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just?
# example sakes.
dataDir=/tmp/zookeeper?
# the port at which the clients will connect
clientPort=2181
通過終端啟動(dòng)Zookeeper注冊(cè)中心服務(wù),下面是在2181端口啟動(dòng)單節(jié)點(diǎn)注冊(cè)中心服務(wù)的提示信息:
sudo ./zkServer.sh status
/usr/bin/java?
ZooKeeper JMX enabled by default
?Using config: /usr/local/zookeeper/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.?
Mode: standalone
服務(wù)消費(fèi)者可以通過 Spring Boot 項(xiàng)目進(jìn)行搭建,編寫項(xiàng)目的 application.yaml 文件配置 Zookeeper 注 冊(cè)中心服務(wù)地址即可完成訂閱。以下是服務(wù)消費(fèi)者樣例, 通過 demoService.sayHello("mercyblitz") 調(diào)用服務(wù)提供者的函數(shù),函數(shù)的返回結(jié)果即是調(diào)用結(jié)果:
@EnableAutoConfiguration?
public class DubboAutoConfigurationConsumerBootstrap {
private final Logger logger = LoggerFactory.getLogger(getClass());
@DubboReference(version = "1.0.0", url = "dubbo://127.0.0.1:12345")
private DemoService demoService;
public static void main(String[] args) {
SpringApplication.run(DubboAutoConfigurationConsumerBootstrap.class).close();
}
@Bean
public ApplicationRunner runner() {
return args -> {
logger.info(demoService.sayHello("mercyblitz"));
};
}
}
可以看出,上述 demoService.sayHello("mercyblitz") 的調(diào)用過程與一般接口測試無區(qū)別, QA 利用服務(wù)消費(fèi)者訪問服務(wù)提供者,配合 Junit 對(duì)執(zhí)行結(jié)果進(jìn)行斷言即可。
