一、设置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. javaScript数组去重方法

    在JAvascript平时项目开发中经常会用到数组去重的操作.这时候就要用到JS数组去重的方法了. demo1: 第一种:JS数组去重操作方法是利用遍历原数组,利用数组的indexOf()方法来来判断 ...

  2. Entity Framework Core 2.0 数据库迁移

    看见过几篇其他大神写的关于EFCore2.0的文章.本人有点小白,一开始看文档的时候除了一些基本操作外其他部分几乎没有读懂,我估计会有一部分人跟我一样,因为人家读懂了的早就懂了. 在这里我写一下我自己 ...

  3. [自制操作系统] BMP格式文件读取&图形界面系统框架/应用接口设计

    本文将介绍在本人JOS中实现的简单图形界面应用程序接口,应用程序启动器,以及一些利用了图形界面的示例应用程序. 本文主要涉及以下部分: 内核/用户RW/RW调色板framebuffer共享区域 8bi ...

  4. VHDL学习记录

    VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language ,是一种标准硬件描述语言.下面通过60进制计数器来分析VH ...

  5. centos 7 && dotnet core 2.0 && nginx && supervisor

    前提 系统:centos 7 目录:/home/wwwroot/www.wuball.com dotnet core 2.0 官方指引 sudo rpm --import https://packag ...

  6. python re group()

    python group() 正则表达式中,group()用来提出分组截获的字符串,()用来分组 import re a = "123abc456" print re.search ...

  7. JS内置对象-自定义对象

    1.基本概念: ①对象:对象是拥有一系列无序属性和方法的集合. ②键值对:对象中的数据是以键值对的形式存在,对象的每个属性和方法,都对应值一个键名,以键取值. ③属性:描述对象特征的一系列变量称为属性 ...

  8. 团队作业8----第二次项目冲刺(beta阶段)5.21

    1. 开会 会议内容:1.总结昨天的任务工作 2. 由潘益靖同学对当天的代码修改及功能的改善做个简单的阐述 3.每个人对项目的发表一些意见及建议 4.组长分配任务 每日讨论图片(拍摄者小组成员 武健男 ...

  9. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  10. 201521123035《Java程序设计》第十四周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...