一、设置python环境

1. 从以下路径中将StcPython.py文件拷贝出来

Linux:

/Installdir/Spirent_TestCenter_4.xx/Spirent_TestCenter_Application_Linux/API/Python

Windows:

C:\Program Files (x86)\Spirent Communications\Spirent TestCenter 4.xx\SpirentTestCenter Application\API\python

2. 将StcPython.py文件放到您的工作文件夹中

3. 编辑StcPython.py文件,修改STC_PRIVATE_INSTALL_DIR变量,将路径指向STC的安装文件夹

Linux:

os.environ['STC_PRIVATE_INSTALL_DIR'] = "/opt/Spirent_TestCenter_4.xx/Spirent_TestCenter_Application_Linux/"  

Windows:

os.environ['STC_PRIVATE_INSTALL_DIR'] = "C:\Program Files (x86)\SpirentCommunications\Spirent TestCenter 4.xx\Spirent TestCenter Application"

4. 加载STC的python包  

from StcPython import StcPython
stc = StcPython()
print stc.get('system1','version')

运行结果:

'4.66.8916.0000'

二、testcenter代码阅读

1. StcPython.py

self.stcInt = __import__('StcIntPython27')  #根据python版本,导入StcIntPython,相对于给StcIntPython27取了一个别名,取名为stcInt,后续的connect、create、delete、disconnect均使用此别名

python2.7导入StcIntPython27.py

其他的导入StcIntPython.py

2.StcIntPython27.py

import _StcIntPython27    #这个文件的后缀为pyd文件,pyd为python扩展文件,一般用C、C++编写

有四个静态方法:

  1. _unpackArgs
  2. _packKeyVal
  3. _unpackGetResponseAndReturnKeyVal
  4. _unpackPerformResponseAndReturnKeyVal

三、python API的添加

STC已经提供了tcl API,打算按照测试需要将其转换为python格式的API,具体分为以下几步:

1.先手动在STC GUI界面中确认需要组什么包,完成什么的操作,需要哪些参数,确认手动操作是OK的。

2.查看STC API官方手册Spirent_TestCenter_Automation_Obj_Ref.pdf,找到相应的命令接口。

3.使用tcl手动发下命令,确认找到的命令是否合适,参数输入是否正确。

4.转义为python格式的API。

比如说有如下需求,要求提供python接口的IGMPV3 API,按照如上步骤:

1.略

2.pdf文档中IGMPV3在Page1540、Page1391、Page1392

3.STC的本地安装路径中已经有tcl可执行程序,无法单独下载,个人电脑路径如下:

c:\Program Files (x86)\Spirent Communications\Spirent TestCenter 4.66\Spirent TestCenter Application\Tcl\bin\tclsh85.exe

如下是tcl中输入的代码,请参考:

#引用STC API ,SpirentTestCenter.tcl的路径
source {c:/Program Files (x86)/Spirent Communications/Spirent TestCenter 4.66/Spirent TestCenter Application/SpirentTestCenter.tcl} #配置机框Ip 槽位 端口号
set classisAddress "10.27.130.21"
set slotPort1 "11/5"
set slotPort2 "11/6" #创建一个项目
set ProjectA [stc::create project] #在项目ProjextA 下创建一个发送端口 和一个接收端口
set TxPort [stc::create port -under $ProjectA]
set RxPort [stc::create port -under $ProjectA] set portReturn [stc::config $TxPort -location "//$classisAddress/$slotPort1"]
set portReturn [stc::config $RxPort -location "//$classisAddress/$slotPort2"] #在发送端口下创建StreamBlock(1)
set StreamBlock(1) [stc::create "StreamBlock" -under $TxPort -frameConfig "" -FrameLengthMode "FIXED" -FixedFrameLength "222" -name "StreamBlock_1"] 在StreamBlock(1)中添加EthII头
set StrEthII [stc::create ethernet:EthernetII -under $StreamBlock(1) -name eht_1 -srcMac 11:11:11:11:11:11 -dstMac 22:22:22:22:22:22] #添加IPv4头
set strIPv4 [stc::create ipv4:IPv4 -under $StreamBlock(1) -name Ipv4_1 -sourceAddr 10.10.10.10 -destAddr 20.20.20.20] #####################################################################################
#添加igmpv3 join report
set strigmp_report [stc::create igmp:Igmpv3Report -under $StreamBlock(1) -name igmp_1 -type 22]
#添加igmpv3 join report全部参数list
set strigmp_report [stc::create igmp:Igmpv3Report -under $StreamBlock(1) -name igmp_1 -numGrpRecords 0 -type 22] #igmp3头上添加Group Records
set grerecords [stc::create grpRecords -under $strigmp_report]
stc::create GroupRecord -under $grerecords -recordType CHANGE_TO_EXCLUDE_MODE
#igmp3头上添加Group Records全部参数list
stc::create GroupRecord -under $grerecords -auxDataLen 0 -mcastAddr 225.0.0.1
-Name
my_mygrouprecord -numSource 0 -recordType 4 #####################################################################################
#如果添加igmpv2 join报文,改写如下
stc::create igmp:Igmpv2Report -under $StreamBlock(1) -name igmp_1 -type 16 -maxRespTime 0 -groupAddress 225.0.0.1 #如果添加igmpv2 leave报文,改写如下
stc::create igmp:Igmpv2Report -under $StreamBlock(1) -name igmp_1 -type 17 -maxRespTime 0 -'groupAddress 225.0.0.1
#####################################################################################
#如果添加igmpv1 join报文,改写如下
stc::create igmp:Igmpv1 -under $StreamBlock(1) -name igmp_1 -type 2 -groupAddress 225.0.0.1 -unused 0 #如果添加igmpv1 leave报文,改写如下
stc::create igmp:Igmpv1 -under $StreamBlock(1) -name igmp_1 -type 1 -groupAddress 225.0.0.1 -unused 0 #保存xml文件
stc::perform SaveAsXml -config $ProjectA -filename d:/igmp.xml

Spirent_TestCenter_Automation_Obj_Ref.pdf中给出的均是参数列表,编程时如何拼接使用,请参考Spirent-TestCenter-Automation-Conf-Prog-Guide.pdf

以IGMPV3为例,PDF中作如下描述:

Igmpv3Report的父节点是StreamBlock,所以tcl代码如下:

set strigmp_report [stc::create igmp:Igmpv3Report -under $StreamBlock(1) -name igmp_1 -numGrpRecords 0 -type 22]

grpRecords是Igmpv3Report的子节点,参数为空,tcl代码如下:

set grerecords [stc::create grpRecords -under $strigmp_report]

GroupRecord的父节点是grpRecords,所以tcl代码如下:

stc::create GroupRecord -under $grerecords -auxDataLen 0 -mcastAddr 225.0.0.1 -Name my_mygrouprecord -numSource 0 -recordType 4

4.python转义语句涉及为公司写的代码,不再描述。

  

  

  

  

python之testcenter操作的更多相关文章

  1. python高级之操作数据库

    python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ...

  2. Python 文件常见操作

    # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname()  ...

  3. Python :open文件操作,配合read()使用!

    python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...

  4. 第九篇:python高级之操作数据库

    python高级之操作数据库   python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及 ...

  5. (转载)Python 列表(list)操作

    (转载)http://blog.csdn.net/facevoid/article/details/5338048 创建列表sample_list = ['a',1,('a','b')] Python ...

  6. python之数据库操作(sqlite)

    python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...

  7. python通过openpyxl操作excel

    python 对Excel操作常用的主要有xlwt.xlrd.openpyxl ,前者xlwt主要适合于对后缀为xls比较进行写入,而openpyxl主要是针对于Excel 2007 以上版本进行操作 ...

  8. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  9. python sqlite3 数据库操作

    python sqlite3 数据库操作 SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 ...

随机推荐

  1. springboot 入门一 hello world!

    微服务框架springboot,目的是用来简化新Spring应用的初始搭建以及开发过程.简化的代价,就是约定俗成很多规则,比如默认读取的配置文件名是application.properties 必需在 ...

  2. html5 canvas元素使用(一)

    html5新增了一个canvas元素,用于在网页上生成一块矩形区域,用于绘制图像,功能非常强大,下面我来简单介绍一下 在页面中添加canvas <canvas id="canvasDe ...

  3. grunt之concat、cssmin、uglify

    周末有点懒,跑去看了<智取威虎山>,手撕鬼子的神剧情节被徐老怪一条回忆线就解释过去了,牛到极致尽是这种四两拨千斤的处理方式,手撕加分,四星推荐. --------------------- ...

  4. NHibernate教程(21)——二级缓存(下)

    本节内容 引入 使用NHibernate二级缓存 启用缓存查询 管理NHibernate二级缓存 结语 引入 这篇我还继续上一篇的话题聊聊NHibernate二级缓存剩下的内容,比如你修改.删除数据时 ...

  5. C# XmlDocument操作XML

    XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Lang ...

  6. javascript中=,==,与===的区别;以及特殊值NaN的讲解

    1.在js中"="是作为赋值.var a;  a=3:给a赋值为3. 2."=="称作相等,"==="被称作严格相等.当使用"== ...

  7. 201521123053《Java设计与程序》第六周学习总结

    ---恢复内容结束--- 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结.   注1:关键词与内容不求多,但 ...

  8. 201521123005 《java程序设计》 第六周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  9. 201521123097《Java程序设计》第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synch ...

  10. logback:logback和slf4j中的:appender、logger、encoder、layout

    (1)appender 1.appender标签是logback配置文件中重要的组件之一.在logback配置文件中使用appender标签进行定义.可 以包含0个或多个appender标签. 2.a ...