一、设置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. vue引入百度地图api组件封装(根据地址定位)

    Map.vue <template> <div class="Map" :style="{ height: this.height+'px', widt ...

  2. 最近做了一个通达OA的大料:20170905最新版本破解可改单位名称,无限制安装

    最近做了一个通达OA的大料:20170905最新版本破解可改单位名称,无限制安装 用户约七十家,总体不错,修改了两次注册授权文件,完美使用中 可联系麦枫http://www.mfsun.com管理员Q ...

  3. 【深入Java虚拟机】之七:Javac编译与JIT编译

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理 ...

  4. MongoDB学习之路(二)

    MongDB特点 MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器的性能. MongoDB旨在为WEB应用提供可拓展的高 ...

  5. SNS团队Beta阶段第二次站立会议(2017.05.23)

    1.立会照片 2.每个人的工作 每个成员的分工: 成员 今天已完成的工作 明天计划完成的工作 罗于婕 完善代码规范文档 辅助完善生词本 龚晓婷 界面优化  辅助开发新功能 林仕庄 界面图标不对齐bug ...

  6. 第二次项目冲刺(Beta阶段)5.23

    1.提供当天站立式会议照片一张 会议内容: ①检查前一天的任务情况,将遇到的瓶颈反馈,看看团队成员是否有好的建议. ②制定新一轮的任务计划. 2.每个人的工作 (1)工作安排 队员 今日进展 明日安排 ...

  7. 个人作业1——四则运算题目生成程序(java代码,基于控制台)

    一.题目描述: 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: ...

  8. Python[小甲鱼009了不起的分支和循环3]

    for语句语法: for 目标 in 表达式: 循环体 例子1: favourite = 'Idmask' for i in favourite: print(i, end= ' ') 上面的输出结果 ...

  9. 201521123007《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 补充上周异常 异常堆栈追踪:获得异常发生的根源 创建自己的异常 自定义异常类不是由Java系统监测到的异常, ...

  10. 201521145048《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 Q1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jm ...