网络故障模拟,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 qdisc add dev $netcard root netem loss $Packet_loss;sleep 10;tc qdisc add dev $netcard root;
测试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以执行任何其他网络任务。
网络故障模拟,cpu高压以及docker中的实现的更多相关文章
- 第 8 章 容器网络 - 060 - 在 Docker 中使用 flannel
在 Docker 中使用 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd/system/docker.service.d/10-machine.conf 设置 ...
- Docker 中的网络功能介绍 外部访问容器 容器互联 配置 DNS
Docker 中的网络功能介绍 | Docker 从入门到实践 https://vuepress.mirror.docker-practice.com/network/ Docker 允许通过外部访问 ...
- 在Docker中运行torch版的neural style
相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ 在Docker中运行to ...
- 在docker中初次体验.net core 2.0
.net core的跨平台有了Linux,不能没有docker……网上的系列文章一大推,特别是docker还有了中文官网:https://www.docker-cn.com/ .上面说的很清楚了,这里 ...
- 在Docker中监控Java应用程序的5个方法
译者注:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.通常情况下,监控的主要目的在于:减少宕机 ...
- 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理
目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...
- Calico在Docker中的搭建
一,Multi-host网络需求 开始之前推荐两篇文章 http://xelatex.github.io/2015/11/15/Battlefield-Calico-Flannel-Weave-and ...
- docker中管理数据
到目前我们介绍了一些Docker的基础概念, 知道了如何使用Docker的image, 也知道了如何在多个container间通过网络通讯. 在这章里我们将介绍如何在docker的container内 ...
- 在 Docker 中使用 flannel - 每天5分钟玩转 Docker 容器技术(60)
上一节我们安装和配置了 flannel,本节在 Docker 中使用 flannel. 配置 Docker 连接 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd ...
随机推荐
- LA 3135 - Argus
看题:传送门 大意就是让你编写一个称为argus的系统,这个系统支持一个register的命令: Register Q_num Period 该命令注册了一个触发器,它每Period秒就会残生一个编 ...
- iOS开发 - Quartz2D画图
Quartz 2D简单介绍 是一个二维画图引擎,同一时候支持iOS和Mac系统 Quartz 2D能完毕的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...
- OpenExeConfiguration的使用
//应用程序的路径 string appPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App.exe"); ...
- embed-it_Integrator memory compile工具使用之二
embed-it_Integrator memory compile工具使用之二 主要内容 使用ish接口自动加载memory的cfg文件运行生成memory 脚本内容 打开Integrate &am ...
- IOS8刷机之后
用的4s,明显感觉卡- =BUG也非常多,点击设置都闪退..有些应用打不开. 不建议非开发人员尝试. 眼下发现的bug有:同一时候关闭多个应用会造成应用无法关闭. 常常重新启动.耗电没留意.
- Synopsys工艺库札记
Synopsys工艺库札记 库的基本信息 库类 库类语句指定库名. library ( smic13HT_ss ) { ... <lirary description> ... } /*e ...
- Tomcat生产中优化JVM的配置实例
root 1208 1 0 11月25 ? 00:15:32 /home/root/jvm/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/ ...
- 定义变量let,const
1.块级作用域let 声明变量,作用域是最近的"{}": 'use strict'; { let test = '1'; } console.log(test);//test is ...
- [NPM] Add comments to your npm scripts
The need for comments in your package.json file becomes desirable the more and more npm scripts you ...
- 【hdu 3032】Nim or not Nim?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...