- 测量网络带宽和网络质量
- 提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息
TCP
- 测试网络带宽
- 支持多线程,在客户端与服务端支持多重连接
- 报告MSS/MTU值的大小
- 支持TCP窗口值自定义
UDP
- 可以设置指定带宽的UDP数据流
- 可以测试传输延时、丢包数
- 支持多播测试
- 支持多线程,在客户端与服务端支持多重连接
官网下载链接:
- 通用参数
- -p, --port #,Server 端监听、Client 端连接的端口号;
- -f, --format [KMG],报告中所用的数据单位,Kbits, Mbits, KBytes, Mbytes;
- -i, --interval #,每次报告的间隔,单位为秒;
- -F, --file name,测试所用文件的文件名。如果使用在 Client 端,发送该文件用作测试;如果使用在 Server 端,则是将数据写入该文件,而不是丢弃;
- -V, --verbose,运行时输出更多细节;
- -J, --json,运行时以 JSON 格式输出结果;
- -logfile f,输出到文件;
- -d, --debug,以 debug 模式输出结果;
- -v, --version,显示版本信息并退出;
- -h, --help,显示帮助信息并退出。
- Server 端参数:
- -s, --server,以 Server 模式运行;
- -D, --daemon,在后台以守护进程运行;
- -I, --pidfile file,指定 pid 文件;
- -1, --one-off,只接受 1 次来自 Client 端的测试,然后退出。
- Client 端参数
- -c, --client ,以 Client 模式运行,并指定 Server 端的地址
- -u, --udp,以 UDP 协议进行测试
- -b, --bandwidth #[KMG][/#],限制测试带宽。UDP 默认为 1Mbit/秒,TCP 默认无限制
- -t, --time #,以时间为测试结束条件进行测试,默认为 10 秒
- -n, --bytes #[KMG],以数据传输大小为测试结束条件进行测试
- -k, --blockcount #[KMG],以传输数据包数量为测试结束条件进行测试;
- -l, --len #[KMG],读写缓冲区的长度,TCP 默认为 128K,UDP 默认为 8K;
- --cport ,指定 Client 端运行所使用的 TCP 或 UDP 端口,默认为临时端口;
- -P, --parallel #,测试数据流并发数量;(多线程)
- -R, --reverse,反向模式运行(Server 端发送,Client 端接收)
- -w, --window #[KMG],设置套接字缓冲区大小,TCP 模式下为窗口大小;
- -C, --congestion ,设置 TCP 拥塞控制算法(仅支持 Linux 和 FreeBSD );
- -M, --set-mss #,设置 TCP/SCTP 最大分段长度(MSS,MTU 减 40 字节);
- -N, --no-delay,设置 TCP/SCTP no delay,屏蔽 Nagle 算法;
- -4, --version4,仅使用 IPv4;
- -6, --version6,仅使用 IPv6;
- -S, --tos N,设置 IP 服务类型(TOS,Type Of Service);
- -L, --flowlabel N,设置 IPv6 流标签(仅支持 Linux);
- -Z, --zerocopy,使用 “zero copy”(零拷贝)方法发送数据;
- -O, --omit N,忽略前 n 秒的测试;
- -T, --title str,设置每行测试结果的前缀;
- --get-server-output,从 Server 端获取测试结果;
- --udp-counters-64bit,在 UDP 测试包中使用 64 位计数器(防止计数器溢出)
iperf服务端:iperf3 -s -p 8889,如下图则启动成功

iperf3的TCP客户端:iperf3 -c 127.0.0.1 -p 8889 -b 30M -t 300

iperf3的UDP客户端:iperf3 -u -c 127.0.0.1 -p 8889 -b 30M -t 300

在这段输出中,“Jitter”列表示抖动时间,或者称为传输延迟,“Lost/Total”列表示丢失的数据包和总的数据包数量 ,后面的0%是平均丢包的比率,“Datagrams”列显示的是总共传输数据包的数量。
网络延迟100ms以下算是正常的。
1、1~30ms:极快,几乎察觉不出有延迟,玩任何游戏速度专都特别顺畅。属
2、31~50ms:良好,可以正常游戏,没有明显的延迟情况。
3、51~100ms:普通,对抗类游戏能感觉出明显延迟,稍有停顿。
4、>100ms:差,无法正常游戏,有卡顿,丢包并掉线现象。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您