现在的位置: 首页 > 综合 > 正文

tcltk控制chariot进行测试,并将批量数据输出成excel

2018年05月08日 ⁄ 综合 ⁄ 共 7134字 ⁄ 字号 评论关闭

直接上源码,都加了备注,应该很容易看懂

桌面新建文件夹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

抱歉!评论已关闭.