zoukankan      html  css  js  c++  java
  • 网络故障模拟,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以执行任何其他网络任务。

  • 相关阅读:
    Openstack Nova 源码分析 — Create instances (nova-conductor阶段)
    openstack nova 源码解析 — Nova API 执行过程从(novaclient到Action)
    Fiddler抓包9-保存会话(save)
    Fiddler抓包10-会话框添加查看get与post请求类型
    Fiddler抓包11-HTTPS证书Actions无法导出问题
    Fiddler抓包7-post请求(json)
    Fiddler抓包8-打断点(bpu)
    Fiddler抓包3-查看get与post请求
    Fiddler抓包4-工具介绍(request和response)
    Fiddler抓包5-接口测试(Composer)
  • 原文地址:https://www.cnblogs.com/onlyac/p/9942070.html
Copyright © 2011-2022 走看看