1. 程式人生 > >網路故障模擬,cpu高壓以及docker中的實現

網路故障模擬,cpu高壓以及docker中的實現

利用tc進行丟包

通過網路丟包來模擬網路故障,是測試中一個重要的測試專案。這對服務來說可以測試其在網路故障時的異常處理的能力,對於服務的可靠性是一個相當嚴苛的測試。

網絡卡名為$netcard,丟包率為$Packet_loss,異常時間為$interval
1.注入網路異常,使用robot framework關鍵字實現通過ssh命令執行“tc qdisc add dev $netcard root netem loss $Packet_loss

2.關閉網路異常,使用robot framework關鍵字實現通過ssh命令執行“tc qdisc add dev $netcard root;”

3.這樣就能將丟包異常進行一個相當好的模擬,通過注入和關閉網路異常兩個關鍵字,實現非常簡單

4.tc網路異常不會影響到ssh的連線過程,即使丟包達到100%,為此不需要擔心網路異常不能被關閉

 

測試tc命令是否成功 

這裡直接使用ping命令即能達到要求

例如在一個機器上進行了tc qdisc add dev eth0 root netem loss100%

那麼就會使ping 這臺機器的所有包丟失。

 

模擬cpu高壓

在cpu高壓下服務能否照常工作,這是一個非常重要的測試專案力,對於服務的可靠性也是是一個相當嚴苛的測試。首先寫一個浮點計算stress的程式跑滿

cpu

1.通過ssh命令上傳該程式

2.通過ssh會話呼叫程式,然後等待

3.斷開ssh會話cpu高壓結束

4.這個可以通過起程序的方式進行結束開啟操作

 

利用robot framework的process包
需要在資源或者測試套件中加入對應的Process,利用程序來模擬網路故障,如下所示:需要robot framework來啟動程序
http://robotframework.org/robotframework/latest/libraries/Process.html

下面給出使用Process 的例子:
在robot framework資源或者測試套件中中匯入Process 庫

使用多程序執行:
Start Process 代表後臺執行,不用等待程序執行完成
Run Process 執行執行緒,需要等待程序執行完成

分析: 

Start Process 執行的命令是,執行python 程式碼,等待100s
但是我們執行Process 的時候,並沒有等待這個程序執行完
然後就執行了 Run Process 的程序,這個程序會開啟計算器程式。
需要我們手動關閉計算機程式,Run Process 這個程序才會結束。

 

docker上的適用性

docker在原理上可以隔離物理機的cpu使用率,也可以隔絕tc命令對於物理機的影響,為此在理論上沒有問題。對於tc命令,開啟容器是需要docker run --cap-add=NET_ADMIN ,加入--cap-add=NET_ADMIN選項

 舉個例子:

下面是一個示例 Dockerfile,通過生成一個隨機檔案並將它的上傳到 /dev/null-as-a-service 以大約 25/s的近似上傳速度來演示這個示例:
FROM ubuntu
# install dependencies
RUN apt-get update
RUN apt-get install -y iproute curl
# create a large random file to upload
RUN head -c 2M </dev/urandom>/upload.data
# rate-limit the network interface and
# upload the data when docker image is run
RUN echo"#!/bin/bash">> /upload.sh
RUN echo"tc qdisc add dev eth0 root tbf rate 25kbps latency 50ms burst 2500">> /upload.sh
RUN echo"curl -d @/upload.data http://devnull-as-a-service.com/dev/null">> /upload.sh
RUN chmod a+x/upload.sh
ENTRYPOINT exec/upload.sh
假設你有名為 ratelimit的目錄的Dockerfile inside,你可以以在當前工作目錄中執行它:
docker build ratelimit -t ratelimit && docker run --cap-add=NET_ADMIN ratelimit
選項 --cap-add=NET_ADMIN 為容器許可權提供修改它的網路介面的許可權。你可以在這裡找到文件 。
Dockerfile首先安裝所需的依賴項。iproute 提供了 tc 工具,curl 允許我們發出我們在速率限制下的請求。在安裝依賴項之後,我們生成一個 2MB 個隨機檔案來上傳。下一部分構建一個指令碼檔案,它將配置速率限制並開始上傳。最後,我們將指令碼指定為在容器執行時要執行的操作。
這裡容器向網路介面新增令牌桶過濾器,以減緩到 25 kb/s的連線。可以以在這裡找到給令牌機器人篩選器的選項的文件,這裡可以以找到 。
通過刪除cURL呼叫並在它的位置( 在安裝了上傳所需的工具之後,當然) 執行上傳,可以修改這裡Dockerfile以執行任何其他網路任務。