PelicanDT(Pelican Distributed Test),是ali提供的一款針對 Linux 系統的測試環境模擬工具,是主要針對分散式應用提供的整合測試解決方案,用於幫助開發者簡單、高效地測試分散式應用。
PelicanDT 具有以下特點:
- 使用 Java 語言與 Linux 系統互動。
- 本地控制遠端伺服器上的 Linux 系統執行命令。
- 通過簡單的操作對伺服器注入異常來模擬測試環境。例如:停止應用、CPU 佔用率過高、CPU 記憶體過高、網路中斷、網路流量延時等測試環境。
安裝PelicanDT
maven引入PelicanDT包
<dependency>
<groupId>com.alibaba.pelican</groupId>
<artifactId>PelicanDT</artifactId>
<version>1.0.9</version>
</dependency>
複製程式碼
執行shell命令
public static void main(String[] args) {
String ip = "127.0.0.1";
String username = "root";
String password = "root";
RemoteCmdClientConfig remoteCmdClientConfig = new RemoteCmdClientConfig();
remoteCmdClientConfig.setIp(ip);
remoteCmdClientConfig.setUserName(username);
remoteCmdClientConfig.setPassword(password);
RemoteCmdClient remoteCmdClient = new RemoteCmdClient(remoteCmdClientConfig);
RemoteCmdResult cmdResult = remoteCmdClient.execCmdWithPTY(new RemoteCmd("docker ps"));
System.out.println(cmdResult.getStdInfo());
/**
* 列印到的資訊:
* [root@izwz98p1f98lx99punh7ekz ~]$docker ps
* CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
* 8dc05b78881f hub.c.163.com/library/nginx "nginx -g 'daemon ..." 4 months ago Up 5 weeks 0.0.0.0:80->80/tcp nginx
* a8cf4f62fc84 registry.cn-shenzhen.aliyuncs.com/sunit/nacos-server "bin/docker-startu..." 4 months ago Up 3 months 0.0.0.0:8858->8848/tcp nacos
* [root@izwz98p1f98lx99punh7ekz ~]$export HISTFILE=/dev/null
* [root@izwz98p1f98lx99punh7ekz ~]$exit
* logout
*/
}
複製程式碼
通過名稱識別符號停止應用
public static void main(String[] args) {
String ip = "127.0.0.1";
String username = "root";
String password = "root";
RemoteCmdClientConfig remoteCmdClientConfig = new RemoteCmdClientConfig();
remoteCmdClientConfig.setIp(ip);
remoteCmdClientConfig.setUserName(username);
remoteCmdClientConfig.setPassword(password);
RemoteCmdClient remoteCmdClient = new RemoteCmdClient(remoteCmdClientConfig);
// 通過名稱把該應用停止, 其實內部執行的是下面這個命令
// ps -ef|grep nacos| grep -v grep | awk '{print $2}' | xargs kill -9
remoteCmdClient.killProcess("nacos");
}
複製程式碼
拉高伺服器記憶體佔用率
使用 PelicanDT 模擬伺服器記憶體佔用率為 75%、持續時間 1 分鐘的測試環境,具體操作步驟如下:
public static void main(String[] args) {
//伺服器IP
String ip = "";
//伺服器使用者名稱
String userName = "";
//伺服器登入密碼
String password = "";
RemoteCmdClientConfig config = new RemoteCmdClientConfig();
config.setIp(ip);
config.setUserName(userName);
config.setPassword(password);
RemoteCmdClient client = new RemoteCmdClient(config);
//記憶體佔用單位為M
int percent = 6144;
//持續時間單位分鐘
int delayMinutes = 1;
//記憶體佔用率拉高
MemUtils.adjustMemUsage(client, percent, delayMinutes);
}
複製程式碼
拉高伺服器 CPU 佔用率
在本示例中,將模擬 CPU 佔用率為 75%,持續時間 3 分鐘的環境
public static void main(String[] args) {
//遠端伺服器IP
String ip = "";
//遠端伺服器使用者名稱
String userName = "";
//遠端伺服器登入密碼
String password = "";
RemoteCmdClientConfig config = new RemoteCmdClientConfig();
config.setIp(ip);
config.setUserName(userName);
config.setPassword(password);
RemoteCmdClient client = new RemoteCmdClient(config);
//設定CPU佔用比例
int percent = 70;
//設定持續時間
int delayMinutes = 3;
//CPU佔用率拉高
CpuUtils.adjustCpuUsage(client, percent, delayMinutes);
}
複製程式碼
中斷伺服器網路
本示例將模擬伺服器網路中斷 30s 的環境,具體操作步驟如下:
public static void main(String[] args) {
//遠端伺服器IP
String ip = "";
//遠端伺服器使用者名稱
String userName = "";
//遠端伺服器登入密碼
String password = "";
RemoteCmdClientConfig config = new RemoteCmdClientConfig();
config.setIp(ip);
config.setUserName(userName);
config.setPassword(password);
RemoteCmdClient client = new RemoteCmdClient(config);
//設定blockIP,即需要設定網路中斷的伺服器 IP。
String blockIP = "";
//持續時間s
int delaySecond = 30;
//網路中斷
NetAccessUtils.blockIPInput(client, blockIP, delaySecond);
}
複製程式碼
延時伺服器網路
本示例將模擬伺服器網路延時為 1000 ms 且持續 10s 的測試環境,具體操作步驟如下:
public static void main(String[] args) {
//遠端伺服器IP
String ip = "";
//遠端伺服器使用者名稱
String userName = "";
//遠端伺服器登入密碼
String password = "";
RemoteCmdClientConfig config = new RemoteCmdClientConfig();
config.setIp(ip);
config.setUserName(userName);
config.setPassword(password);
RemoteCmdClient client = new RemoteCmdClient(config);
//延時時間 ms
int delayTime = 1000;
//持續時間s
int delaySecond = 10;
//網路延時
NetTrafficUtils.setNetworkDelay(client, delayTime, delaySecond);
}
複製程式碼
阿里官方幫助文件: help.aliyun.com/document_de…
github開源地址: github.com/alibaba/Pel…
----------------------------------------- 廣告時間 -----------------------------------------
各位看官, 歡迎關注公眾號,每天推送有意思的小東西哦!!! 嘻嘻