直接上源码,都加了备注,应该很容易看懂
test4.tcl
另存为 print4.tcl
桌面新建文件夹TCL
需要使用bat来驱动tcl文件
tclsh test4.tcl
test4.tcl
建立4条pair 来进行流量测试,测试时间为1小时
set array1(1) "D2B"
set array1(2) "72083C"
set array1(3) "v1.0.29"
set array1(4) "Polden"
set array1(5) "lklk"
set array1(6) "1.0.25.7"
#工具函数,获取系统时间
################################################################################################
proc tcl_get_system_time {{type dt} } {
switch $type {
"dt" {set t [clock format [clock seconds] -format %Y-%m-%d-%H-%M-%S]}
"d" {set t [clock format [clock seconds] -format %Y-%m-%d]}
"t" {set t [clock format [clock seconds] -format %H:%M:%S]}
"H" {set t [clock format [clock seconds] -format %H]}
default {puts "ERROR:Invali parameter $type"}
}
}
#初始化参数
################################################################################################
# Windows 32位环境使用
set ixchariot_installation_dir "C:/Program Files/Ixia/IxChariot"
# 设置 script 为Throughput脚本
set script "c:/Program Files/Ixia/IxChariot/Scripts/Throughput_change.scr"
#首先进入IxChariot安装目录
cd $ixchariot_installation_dir
#读取Chariot一些函数包,以便后续进行调用
load ChariotExt
package require ChariotExt
global auto_index
#工作目录,存放测试脚本和结果文件
set work_dir "C:/Users/Administrator/Desktop/TCL/proc/"
#设置超时时间,如果超时则会自动退出。
#################################################################################################
#***************************************************************
# 测试数据配置:
# 根据真实的组网配置e1, e2的IP地址.
# 测试结果文件为lbtest.tst
# 超时为120秒
#***************************************************************
set log 1
set e1 "192.168.1.100"
set e2 "1.1.1.2"
set script "c:/Program Files/Ixia/IxChariot/Scripts/Throughput_change.scr"
#set testFile "C:/Users/Administrator/Desktop/TCL/proc/lbtest.tst"
set timeout 4000
set result $work_dir[tcl_get_system_time],$array1(3).tst
#***************************************************************
#
# 脚本主要部分
# ----------------
# 每一步都用括号()说明,演示Chariot API编程指南
#
#***************************************************************
# (1)
# 加载Chariot软件包。如果这一步不通过,原因会打印出来并添加到$errorInfo。
load ChariotExt
package require ChariotExt
# (2)
# 创建一个测试对象来定义测试。或者从磁盘中加载一个测试。
puts "Create the test..."
set test [chrTest new]
# 加载系统设置
################################################################################################
# 首先,创建一个runOpts也就是系统设置
if {$log} {
puts "Create the Opts..." }
set runOpts [chrTest getRunOpts $test]
# 读取当前的TEST_END 结束测试的条件,默认为WHEN_FIRST_COMPLETES 等待所有的数据包跑完
#puts "Test End Conditions : [chrRunOpts get $runOpts TEST_END ]"
# 然后指定 TEST_END 值 FIXED_DURATION 固定持续时间
chrRunOpts set $runOpts TEST_END FIXED_DURATION
if {$log} {
puts "Test End Conditions : [chrRunOpts get $runOpts TEST_END ]" }
#接下来我们指定的时间在几秒钟内
chrRunOpts set $runOpts TEST_DURATION 3600
# (3)
# 建立一个测试对.
puts "Create the pair..."
set pair [chrPair new]
# (4)
# 给测试对添加地址属性.
puts "Set required pair attributes..."
chrPair set $pair E1_ADDR $e1 E2_ADDR $e2
# (5)
# 给测试对定义测试脚本
puts "Use a script..."
chrPair useScript $pair $script
# (6)
# 把测试对添加到测试对象中.
puts "Add the pair to the test..."
chrTest addPair $test $pair
################################################
# (3)
# 建立一个测试对.
puts "Create the pair..."
set pair1 [chrPair new]
# (4)
# 给测试对添加地址属性.
puts "Set required pair attributes..."
chrPair set $pair1 E1_ADDR $e1 E2_ADDR $e2
# (5)
# 给测试对定义测试脚本
puts "Use a script..."
chrPair useScript $pair1 $script
# (6)
# 把测试对添加到测试对象中.
puts "Add the pair to the test..."
chrTest addPair $test $pair1
################################################
################################################
# (3)
# 建立一个测试对.
puts "Create the pair..."
set pair2 [chrPair new]
# (4)
# 给测试对添加地址属性.
puts "Set required pair attributes..."
chrPair set $pair2 E1_ADDR $e1 E2_ADDR $e2
# (5)
# 给测试对定义测试脚本
puts "Use a script..."
chrPair useScript $pair2 $script
# (6)
# 把测试对添加到测试对象中.
puts "Add the pair to the test..."
chrTest addPair $test $pair2
################################################
################################################
# (3)
# 建立一个测试对.
puts "Create the pair..."
set pair3 [chrPair new]
# (4)
# 给测试对添加地址属性.
puts "Set required pair attributes..."
chrPair set $pair3 E1_ADDR $e1 E2_ADDR $e2
# (5)
# 给测试对定义测试脚本
puts "Use a script..."
chrPair useScript $pair3 $script
# (6)
# 把测试对添加到测试对象中.
puts "Add the pair to the test..."
chrTest addPair $test $pair3
################################################
# (7)
# 运行测试
puts "Run the test..."
chrTest start $test
# (8)
# 等测试结束才能拿到结果,默认等2分钟。如果2分钟后没有结束,就认为出错。
puts "Wait for the test to stop..."
if {![chrTest isStopped $test $timeout]} {
puts "ERROR: Test didn't stop in 2 minutes!"
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]"
# 前文没有设置脚本协议,但是也同样的打印出来.
#puts "Protocol : [chrPair get $pair PROTOCOL]"
# 显示脚本磁盘文件名称和和应用程序脚本名称
# 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]
# (11)
# 因为是入门例子,下面的代码片段没有包含"No such value"检查,
# 这个值在界面上显示为"n/a"。
# 在这个例子中,我们通常可以拿到吞吐量结果。其他的值都处理为出错。
# 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"
# (12)
# 保存结果到测试文件.
puts "=========="
puts "Save the test..."
chrTest save $test $result
# (13)
# 释放资源
# (测试对象会自动释放相关的测试对)
chrTest delete $test force
# 搞定!
return
读取出4条pair的平均流量,并将它们打印输出。
需要使用bat来驱动tcl文件
bat命令如下,黏贴另存为*.bat
@echo off
cd cd C:\Users\Administrator\Desktop\TCL
tclsh print4.tcl >test4.csv
另存为 print4.tcl
#首先进入IxChariot安装目录
set ixchariot_installation_dir "C:/Program Files/Ixia/IxChariot"
#set ixchariot_installation_dir "C:/Program Files/Ixia/IxChariot"
cd $ixchariot_installation_dir
load ChariotExt
package require ChariotExt
# 设置工作目录
set work_dir "C:/Users/Administrator/Desktop/TCL/proc/"
set work_dir_length [string length $work_dir]
# 结果文件匹配
#set files [glob -nocomplain -- $work_dir/*Edge*.tst]
set files [glob -nocomplain -- $work_dir/*.tst]
for { set i 0 } { $i < [llength $files] } { incr i } {
#set long [llength $files]
#puts "files $long"
#puts "work_dir_length $work_dir_length "
set tt [chrTest new]
set f [lindex $files $i]
set record_time [string range $f $work_dir_length [string length $f]]
set record_time [string range $record_time 0 38]
set script [string range $record_time 40 $work_dir_length]
puts -nonewline "$record_time, "
chrTest load $tt $f
chrTest getPairCount $tt
chrTest getPair $tt 0
set p1 [chrTest getPair $tt 0]
#puts "Number of timing records = [chrPair getTimingRecordCount $p1]"
# 提取MLR和DF文件
# 根据不同的测试需求,也可以读取吞吐量,时延,抖动,丢包率等指标
#set mlr [chrPairResults get $p1 MEDIA_LOSS_RATE ]
#set df [chrPairResults get $p1 DELAY_FACTOR]
set th [chrPairResults get $p1 THROUGHPUT ]
#puts "mlr, [lindex $mlr 0], [lindex $mlr 1], [lindex $mlr 2],\
# df, [lindex $df 0], [lindex $df 1], [lindex $df 2]"
set avg [format "%.3f" [lindex $th 0]]
#set min [format "%.3f" [lindex $th 1]]
#set max [format "%.3f" [lindex $th 2]]
#puts "$avg,$min,$max "
###################################
#chrTest getPair $tt 0
set p2 [chrTest getPair $tt 1]
set th2 [chrPairResults get $p2 THROUGHPUT ]
set avg1 [format "%.3f" [lindex $th2 0]]
###################################
set p2 [chrTest getPair $tt 2]
set th2 [chrPairResults get $p2 THROUGHPUT ]
set avg2 [format "%.3f" [lindex $th2 0]]
##################################################
set p2 [chrTest getPair $tt 3]
set th2 [chrPairResults get $p2 THROUGHPUT ]
set avg3 [format "%.3f" [lindex $th2 0]]
##################################################
puts "$avg,$avg1,$avg2,$avg3"
##################################################
chrTest delete $tt force
}
exit