性能测试工具 IxChariot:Tcl脚本调用方法介绍

news2024/11/18 16:38:39

ixChariot是一款功能强大的性能测试软件,可用来测试有线和无线性能,可以模拟真实应用程序流量,并提供关键性能指标,包括吞吐量、丢包、抖动、延迟、MOS等。本文简单介绍如何使用IxChariot Tcl API来实现自动化跑流。

目录

  • IxChariot测试网络
  • IxChariot API简介
  • IxChariot环境安装
    • 1. 安装IxChariot
    • 2. 安装endpoint
    • 3. 安装Tcl
  • IxChariot Tcl API
    • chrRunOpts
    • chrPair set
    • chrPair useScript
    • chrPair setScriptVar
    • 读取结果
  • Tcl脚本示例
    • pair创建实例
    • VoIPPair创建实例
  • 其它
    • 执行tst文件
    • Python执行TCL脚本

IxChariot测试网络

一个基本的IxChariot测试网络主要包括三个部分:

  • IxChariot控制端:可以安装IxChariot软件的Windows PC
  • Endpoint 1:接收IxChariot控制端的测试脚本和数据,与Endpoint 2 进行跑流测试,并将所有测试结果返回到IxChariot控制端。
  • Endpoint 2:与Endpoint 1通信,接收Endpoint 1的测试脚本和数据,并将测试结果返回给Endpoint 1

通常在IxChariot控制端电脑的IxChariot软件配置跑流脚本,在Endpoint 1Endpoint 2 两个电脑上安装并启动Endpoint。然后就可以在IxChariot控制端运行跑流脚本,测试结果会返回到控制端。

IxChariot软件页面的手动配置这里就不介绍了,下面主要介绍如何使用Chariot API来实现自动化跑流。

IxChariot API简介

IxChariot API支持使用C语言和Tcl脚本来驱动IxChariot跑流,我们可以通过IxChariot API来创建、执行、保存和提取测试结果。

下图是IxChariot包与IxChariot API、endpoint之间的工作流程。

IxChariot API中的对象是分层的,其包含的分层结构如下图:

以下对象在测试对象中单独实例化,然后添加到测试对象示例中:

pair

hardware pair

VoIP pair

VoIP hardware pair

application group

video pair

multicast group

video multicast group

multicast pair

channel

receiver

IxChariot测试必须至少包含一个 pair 对象:pair,hardware pair, VoIP pair, video pair, multicast group, 或者 video multicast group对象实例。当测试开始执行时,会自动创建时间记录(timing record)对象实例。

IxChariot Tcl包提供的方法可在帮助文档中查看。

IxChariot环境安装

本文主要介绍IxChariot Tcl API的简单使用,这里介绍Tcl跑流的环境安装步骤。

1. 安装IxChariot

在IxChariot控制端电脑(Windows系统)上安装,我使用的是默认安装路径:C:\Program Files (x86)\Ixia\IxChariot

2. 安装endpoint

安装系统平台对应的endpoint,支持Windows、Linux和macOS系统。

1、Windows系统安装

Windows系统双击安装即可。

启动endpoint的cmd命令:

$ net start IxiaEndpoint

停止endpoint进程的cmd命令:

$ net stop IxiaEndpoint

2、Linux系统安装

Linux rpm包安装方法:

$ rpm -ivh pelinux_amd64_95.rpm

Linux 源码包安装方法:

$ cd endpoint
$ tar -xvzf pelinux_amd64_730.tar.gz
$ ./endpoint.install accept_license

启动endpoint:

$ setsid  /usr/local/Ixia/endpoint

停止endpoint进程:

$ /usr/local/Ixia/endpoint –k

3. 安装Tcl

使用IxChariot Tcl API时,建议在命令行执行Tcl脚本来运行IxChariot:

$ tclsh myTest.tcl

因此需要安装一下Tcl环境,Tcl下载地址:https://www.tcl.tk/software/tcltk/download.html

安装完成后,需要将tcl安装bin目录添加到环境变量。

IxChariot Tcl API

下面列举一些 IxChariot Tcl 包创建普通 pair 的一些常用方法。

chrRunOpts

用于定义和获取测试运行选项,比如设置跑流时间:

set test [chrTest new]
#设置测试时间值
set runOpts [chrTest getRunOpts $test]
chrRunOpts set $runOpts TEST_END FIXED_DURATION
chrRunOpts set $runOpts TEST_DURATION 30

必须将 TEST_END 设置为 FIXED_DURATION时,TEST_DURATION 值才会生效。

chrPair set

设置pair属性

chrPair set pair1 PROTOCOL $pro; # 设置协议
chrPair set pair1 E1_ADDR IP地址; # 设置Endpoint 1 address
chrPair set pair1 E2_ADDR IP地址; # 设置Endpoint 2 address

chrPair useScript

给pair设置测试脚本

chrPair useScript pair1 Throughput.scr;

chrPair setScriptVar

设置脚本变量,比如

chrPair setScriptVar pair1 file_size $filesize};#发送字节数
chrPair setScriptVar pair1 send_buffer_size $buffersize; # buffer大小
chrPair setScriptVar pair1 send_data_rate $datarate};#发送速率

读取结果

可以使用 chrCommonResults getchrPairResults get 方法来读取测试结果。

set runingtime [chrCommonResults get pair1 MEAS_TIME; # 运行时间
set throughput [chrPairResults get pair1 THROUGHPUT; # THROUGHPUT结果

更多API用法可参考接口文档,下面列举创建pair和VoIPPair的示例。

Tcl脚本示例

pair创建实例

set e1 "localhost"
set e2 "localhost"
set script "c:/Program Files/Ixia/IxChariot/Scripts/Throughput.scr"
set testFile "c:/Program Files/Ixia/IxChariot/tests/lbtest.tst"
set timeout 60

# (1)加载Chariot包
load ChariotExt
package require ChariotExt

# (2)创建测试对象
set test [chrTest new]
set runOpts [chrTest getRunOpts $test]
chrRunOpts set $runOpts TEST_END FIXED_DURATION
chrRunOpts set $runOpts TEST_DURATION $timeout; #设置测试运行时间
    
# (3)创建pair对象
set pair [chrPair new]

# (4)设置pair属性
chrPair set $pair E1_ADDR $e1 E2_ADDR $e2
chrPair set $pair PROTOCOL TCP; #设置协议

# (5)设置测试脚本
chrPair useScript $pair $script
chrPair setScriptVar $pair file_size 1000000;#发送字节数
chrPair setScriptVar $pair send_buffer_size 1500;#buffer大小
chrPair setScriptVar $pair send_data_rate "20 Mb";#发送速率

# (6)添加pair到测试对象中
chrTest addPair $test $pair

# (7)运行测试
chrTest start $test

# (8)等待测试结束
set $timeout [expr 10 + $timeout]
if {![chrTest isStopped $test $timeout]} {
 puts "ERROR: Test didn’t stop"
 chrTest delete $test force
 return
}

# (9)打印

puts "==========="
puts "Test setup:\n----------"
puts "Number of pairs = [chrTest getPairCount $test]"
puts "E1 address : [chrPair get $pair E1_ADDR]"
puts "E2 address : [chrPair get $pair E2_ADDR]"
# We didn’t set the protocol, but let’s show it anyway.
puts "Protocol : [chrPair get $pair PROTOCOL]"
# We’ll show both the script filename and
# the application script name.
puts "Script filename : [chrPair get $pair SCRIPT_FILENAME]"
puts "Appl script name: [chrPair get $pair APPL_SCRIPT_NAME]"

# (10)读取测试结果: 吞吐量
puts ""
puts "Test results:\n------------"
puts "Number of timing records = \
[chrPair getTimingRecordCount $pair]"

set throughput [chrPairResults get $pair THROUGHPUT]
set avg [format "%.3f" [lindex $throughput 0]]
set min [format "%.3f" [lindex $throughput 1]]
set max [format "%.3f" [lindex $throughput 2]]
puts "Throughput:"
puts " avg $avg min $min max $max"

# (11)保存测试结果
puts "Save the test..."
chrTest save $test $testFile

# (12)清理
chrTest delete $test force

return

VoIPPair创建实例

set e1 "localhost"
set e2 "localhost"
set timeout 60

# (1)加载Chariot包
load ChariotExt
package require ChariotExt

# (2)创建测试对象
set test [chrTest new]
set runOpts [chrTest getRunOpts $test]
chrRunOpts set $runOpts TEST_END FIXED_DURATION
chrRunOpts set $runOpts TEST_DURATION $timeout; #设置测试运行时间

# (2)创建voippair对象
set voippair1 [chrVoIPPair new]; # VoIP Pair创建

# (3)设置pair属性
chrPair set $voippair1 E1_ADDR $e1 E2_ADDR $e2
chrPair set $voippair1 QOS_NAME "VoIPQoS";
chrVoIPPair set $voippair1 CODEC "G711u";    

# (4)添加voippair1到测试对象中
chrTest addPair $test $voippair1

# (5)运行测试
chrTest start $test

# (6)等待测试结束
if {![chrTest isStopped $test $timeout]} {
 puts "ERROR: Test didn’t stop in 2 minutes!"
 chrTest delete $test force
 return
}

# (7)读取测试结果
# MOS
set mos [chrPairResults get $voippair1 MOS_ESTIMATE]
set mos_avg [format "%.3f" [lindex $mos 0]]
puts "MOS_avg $mos_avg"        

# 时延
set delay [chrPairResults get $voippair1 END_TO_END_DELAY]
set delay_avg [lindex $delay 0]
set delay_avg [format "%.1f" $delay_avg]
puts "END_TO_END_DELAY $delay_avg"

# 丢包率
set bytes_recv_e2 [chrCommonResults get $voippair1 BYTES_RECV_E2]
# puts ""
# puts "BYTES_RECV_E2: $bytes_recv_e2"
set bytes_sent_e1 [chrCommonResults get $voippair1 BYTES_SENT_E1]
# puts "BYTES_SENT_E1: $bytes_sent_e1"
set bytes_lost_rate [format "%.4f" [expr ($bytes_sent_e1 - $bytes_recv_e2)/$bytes_sent_e1]]
set bytes_lost_rate [expr $bytes_lost_rate*100]
puts "BYTES_LOST_RATE $bytes_lost_rate"

# (11)保存测试结果
puts "Save the test..."
chrTest save $test $testFile

# (12)清理
chrTest delete $test force

return

其它

执行tst文件

可以使用runtst工具来执行创建的tst文件:

$ cd C:\Program Files (x86)\Ixia\IxChariot
$ runtst.exe -t20 C:\\Users\DELL\\Documents\\IxChariot\\TESTS\\demo.tst d:\\test\\demo.tst

Python执行TCL脚本

除了使用Python的 os.popen 或者 subprocess.Popen 调用编写好的Tcl脚本执行测试外,也可以使用Python的Tcl库来执行Tcl命令:

from Tkinter import Tcl

tcl = Tcl()
# 加载ChariotExt库
tcl.eval("load ChariotExt")
tcl.eval("package require ChariotExt")

注意:

  1. 执行此Python脚本的电脑必须安装好IXChariot控制端软件,否则无法加载ChariotExt.dll动态链接库。
  2. 如果ChariotExt.dll为32位VC++环境编译,Python也需要32位。
--THE END--

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3399平台开发系列讲解(调试篇)断言的使用

🚀返回专栏总目录 文章目录 一、什么是断言二、静态断言三、运行时断言沉淀、分享、成长,让自己和他人都能有所收获!😄 📢断言为我们提供了一种可以静态或动态地检查程序在目标平台上整体状态的能力,与它相关的接口由头文件 assert.h 提供。 一、什么是断言 在编程中…

浏览器状态同步和路由-SSR和单页面应用的分析 【单页面应用和服务端渲染】

目录 单页面应用(优缺点)(Single Page Application) 优点: SPA的缺点: 服务端渲染(Server Side Rendering) SSR示例(一个ssr小引擎) SSR优缺点分析 总结…

Opencv+Python笔记(八)轮廓检测

目录 一、轮廓的检测和绘制1.读入图像2.将读入图像转化为灰度图3.对灰度图进行二值化 [图像的阈值化处理](https://blog.csdn.net/Ggs5s_/article/details/130301816?spm1001.2014.3001.5501)4.进行轮廓检测5.在原图中显示轮廓 二、轮廓层级关系1.RET_LIST2.RETR_EXTERNAL3. R…

座椅内饰如何「跟上」智能电动?这款智能概念座舱看到未来

进入智能电动汽车时代,理想的车内空间应该是怎样的?作为“内饰空间创造者”、全球三大汽车座椅及内饰厂商之一,丰田纺织在2023上海车展上给出了一系列解决方案。 4月19日,丰田纺织携诸多产品亮相本次上海车展,包括面向…

【速卖通】 AliExpress(速卖通)关键词搜索结果采集

采集场景 在AliExpress(速卖通) 首页中 http://www.aliexpress.com 中输入关键词,采集关键词搜索后得到的商品列表信息。 采集字段 关键词、标题、商品id、商品图片地址、商品详情链接、价格、免费退送货、星级、已出售数量、店铺名 采集结果 采集结果可导出为E…

C语言入门篇——函数篇

1、什么是函数 首先,什么是函数?函数(function)是完成特定任务的独立程序代码。单元语法规则定义了函数的结构和使用方式。虽然C中的函数和其他语言中的函数、子程序、过程作用相同,但是细节上略有不同。 为什么使用函数? 首先…

刷题训练2之AcWing第 96 场周赛

竞赛 - AcWing 一、完美数 4876. 完美数 - AcWing题库 1、题目 如果一个正整数能够被 2520 整除,则称该数为完美数。 给定一个正整数 n,请你计算 [1,n]范围内有多少个完美数。 输入格式 一个整数 n。 输出格式 一个整数,表示 [1,n] 范…

【社区图书馆】操作系统的经典书籍

操作系统的经典书籍 一、引言二、书籍的选择三、优缺点3.1、《操作系统》3.2、《计算机操作系统》 小结 一、引言 《操作系统》罗宇和《计算机操作系统》汤小丹这两本书都是关于操作系统的经典书籍,各有优势。 二、书籍的选择 首先,从内容深度上&…

倾斜摄影超大场景的三维模型的顶层合并常见的问题分析

倾斜摄影超大场景的三维模型的顶层合并常见的问题分析 倾斜摄影超大场景的三维模型顶层合并是将多个局部区域的点云或网格数据进行融合,生成一个整体的三维模型的过程。在这个过程中,常见的问题包括: 1、数据不一致。由于数据采集时间、空间…

SAP SM30表格维护生成器隐藏记录日志字段

1.背景 在表格维护生成器中往往会隐藏记录日志字段,不让用户直接查看,而供运维或者开发部门使用,如下所示: 2.实现 2.1 SM30逻辑流和屏幕元素中删除日志记录字段 2.2 创建事件,写入记录日志代码 2.2.1 记录日志方式…

Node.js使用CORS解决跨域问题的三种方法

目录 1、通过CORS中间键解决2、设置响应头3、app.all解决4、解决跨域问题案例 现如今,实现跨域数据请求,最主要的两种解决方案,分别是JSONP和CORS. JSONP:出现的早,兼容性好(兼容低版本IE)。是前端程序员为…

m1下利用dockerdesktop安装ELK

一、背景:公司有一个需求,就是将txt中的数据加载到es中,之前没用过es,想着先在本地安装一个,然后再做测试。 二、安装docker desktop 打开docker的官网,下载苹果芯片的docker 网址:https://ww…

当DevOps遇见AI,智能运维的黄金时代开启

文章目录 1. 当DevOps遇见AI,智能运维的黄金时代2. 什么是DevOpts?改变开发格局:测开、运开必然趋势3. 什么是Docker容器化,它会替代掉VM虚拟机吗?4. 运维的终点是开发5. 实际项目的部署案例6. 誉天程序员课程 1. 当De…

顶象推出应用隐私合规检测服务

为帮助开发者更高效地进行App隐私合规检测,顶象推出应用隐私合规检测服务,快速发现App可能存在的各类隐私安全漏洞,并提供详细的检测报告,给出专业的合规整改建议。该服务可应用于上架前和合规检测,通过个人信息保护分…

map<int,int>和map<int,int>::iterator

map< int,int >和map< int,int >::iterator 一、map<int,int>、map<string, string>的含义二、map<int,int>::iterator的作用三、map<int,XXX>的自动升序特点 一、map<int,int>、map<string, string>的含义 map容器是CSTL的一…

学成在线笔记+踩坑(7)——绑定媒资

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题 目录 8 绑定媒资 8.1 需求分析 8.1.1 业务流程 8.1.2 数据模型 8.2 接口定义 8.2.1 抽取模型类 8.2.2 定义接口层 8.3 接口开发 8.3.1…

23.4.21总结

正则表达式 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串&#xff0c;通常被用来检索、替换那些符合某个模式&#xff08;规则&#xff09;的文本。 正则表达式是一种对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些…

【Java 数据结构】十大排序 (动图解析)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

微搭低代码学习之销售员销售目标采集系统开发

四月二十三&#xff0c;春意渐浓&#xff0c; 草木抽出新枝&#xff0c;鸟儿唱响欢融。 花开满园&#xff0c;香气袭人&#xff0c; 阳光明媚&#xff0c;人们心情舒畅。 愿这美好的日子&#xff0c;伴随你一生。 ——使用Notion AI提问“写一首关于4月23日的诗” 文章目录 前言…

【深度学习入门系列】 pytorch实现多层感知机(MLP)(内含分类、回归任务实例)

文章目录 0. BP和MLP1 分类1.0 数据集1.1 网络架构1.2 代码1.3 结果 2 回归2.0 数据集2.1 网络架构2.2 代码2.3 结果 3 代码&#xff08;可直接食用&#xff09; 众所周知&#xff0c;sklearn提供了MLP函数。个人认为这个东西虽然蛮好用的——有的时候比你自己写的效果都好&…