利用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中的实现的更多相关文章

  1. 第 8 章 容器网络 - 060 - 在 Docker 中使用 flannel

    在 Docker 中使用 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd/system/docker.service.d/10-machine.conf 设置 ...

  2. Docker 中的网络功能介绍 外部访问容器 容器互联 配置 DNS

    Docker 中的网络功能介绍 | Docker 从入门到实践 https://vuepress.mirror.docker-practice.com/network/ Docker 允许通过外部访问 ...

  3. 在Docker中运行torch版的neural style

    相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ 在Docker中运行to ...

  4. 在docker中初次体验.net core 2.0

    .net core的跨平台有了Linux,不能没有docker……网上的系列文章一大推,特别是docker还有了中文官网:https://www.docker-cn.com/ .上面说的很清楚了,这里 ...

  5. 在Docker中监控Java应用程序的5个方法

    译者注:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.通常情况下,监控的主要目的在于:减少宕机 ...

  6. 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理

    目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...

  7. Calico在Docker中的搭建

    一,Multi-host网络需求 开始之前推荐两篇文章 http://xelatex.github.io/2015/11/15/Battlefield-Calico-Flannel-Weave-and ...

  8. docker中管理数据

    到目前我们介绍了一些Docker的基础概念, 知道了如何使用Docker的image, 也知道了如何在多个container间通过网络通讯. 在这章里我们将介绍如何在docker的container内 ...

  9. 在 Docker 中使用 flannel - 每天5分钟玩转 Docker 容器技术(60)

    上一节我们安装和配置了 flannel,本节在 Docker 中使用 flannel. 配置 Docker 连接 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd ...

随机推荐

  1. LA 3135 - Argus

    看题:传送门 大意就是让你编写一个称为argus的系统,这个系统支持一个register的命令: Register  Q_num Period 该命令注册了一个触发器,它每Period秒就会残生一个编 ...

  2. iOS开发 - Quartz2D画图

    Quartz 2D简单介绍 是一个二维画图引擎,同一时候支持iOS和Mac系统 Quartz 2D能完毕的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成 ...

  3. OpenExeConfiguration的使用

    //应用程序的路径 string appPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App.exe"); ...

  4. embed-it_Integrator memory compile工具使用之二

    embed-it_Integrator memory compile工具使用之二 主要内容 使用ish接口自动加载memory的cfg文件运行生成memory 脚本内容 打开Integrate &am ...

  5. IOS8刷机之后

    用的4s,明显感觉卡- =BUG也非常多,点击设置都闪退..有些应用打不开. 不建议非开发人员尝试. 眼下发现的bug有:同一时候关闭多个应用会造成应用无法关闭. 常常重新启动.耗电没留意.

  6. Synopsys工艺库札记

    Synopsys工艺库札记 库的基本信息 库类 库类语句指定库名. library ( smic13HT_ss ) { ... <lirary description> ... } /*e ...

  7. 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=/ ...

  8. 定义变量let,const

    1.块级作用域let 声明变量,作用域是最近的"{}": 'use strict'; { let test = '1'; } console.log(test);//test is ...

  9. [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 ...

  10. 【hdu 3032】Nim or not Nim?

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...