网络故障模拟,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 ...
随机推荐
- shiro 静态页面资源不显示 解决方案(转)
最近做一个ssm+shiro的框架整和 不加shiro之前ssm中css和图片显示正常.加上以后无法显示. 解决方案: shiro有静态资源过滤. 配置资源匿名访问即可 <property na ...
- Android多线程研究(9)——读写锁
一.什么是锁 在Java的util.concurrent.locks包下有关于锁的接口和类如下: 先看一段代码: package com.codeing.snail.test; public clas ...
- 项目中使用Prism框架
Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Prism框架来构建基础的应用框架,并且 ...
- php修改SESSION的有效生存时间
如何修改SESSION的生存时间 我们来手动设置 Session 的生存期: <?phpsession_start(); // 保存一天 $lifeTime = 24 * 3600; setco ...
- 钢琴 - steinway
http://www.wangyanpiano.com/bbs/thread-104723-1-1.html Poston 波士顿钢琴 三角钢琴 GP-156 黑色抛光 178 ...
- 修改QList中的item(使用下标([index])才可以获得可修改的item的引用)
QList算是最常用的集合了,今儿偶然间需要修改QList中的值,结果郁闷了.QList中提供了replace函数来替换item,但不是修改.而at().value()操作均返回的是const的ite ...
- WD-保修验证(WCC7K4ARTDF1)
https://support.wdc.com/warranty/warrantystatus.aspx?lang=cn WCC7K4ARTDF1 有限保修期限内 WD40EFRX WD Red 09 ...
- 结构体(struct)与类(class)
在 C++ 的范畴里,除了 struct 结构体不支持访问权限修饰符(private.protected.public)外,已不再区分二者的其他方面语法上的差异. 因此,在 C++ 编程中,如果一个类 ...
- 三列自适应布局的实现方式(兼容IE6+)
1.绝对定位方式 <div class="nm-3-lr"> <div class="aside-f"> <p>侧边栏1固定 ...
- poj2151之概率DP
Check the difficulty of problems Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4403 ...