基于Python 实现 Spirent TestCenter 自动化
关于Python API
1.Spirent TestCenter 自动化提供了一个基于Python语言的API。有关受支持的Python软件和操作系统版本的信息,请参见Spirent TestCenter基础和测试包的发布说明。
2.Python语言API支持标准的 API 函数集和标准的 Spirent TestCenter 数据模型。主要描述了Python API语法,提供了该API的简要概要,并描述了如何使用Python API 创建和运行 Spirent TestCenter 自动化测试的示例。
- .Python 环境中的 API 语法
- .Python API概要
- .Python 示例
3.在Linux上使用Spirent TestCenter 使用 Python API 时需要配置Python3 。Python API for Spirent TestCenter 要求在Python3.4语言设置中使用——启用-共享选项来编译libpython3.4.so文件。在使用Python3.4 API of Spirent TestCenter之前,请检查libpython3.4.so文件是否存在。注意:文件名可能略有不同,这取决于您的Linux发行版和版本,它是唯一一个在 /lib directory目录中可执行的文件。
4.使用此命令可以检查您是否有所需的Python库:$find -name “libpython3.4so” 2>/dev/null
Python环境中的API语法
在Python API中,Spirent TestCenter 自动化函数是StcPython类的实例方法。下面的代码片段创建了一个类的实例。实例化了类之后,就可以在引用API函数时使用变量stc作为前缀。
from StcPython import StcPython
stc = StcPython()
[...]
stc.apply()
注意:下面总结了应用于Spirent TestCenter的Python语法规则。有关Spirent TestCenter自动化语法元素的详细讨论,请参阅API语法。
语法元素 | 使用方法 |
---|
对象与属性引用 | Spirent TestCenter自动化函数调用中的对象和属性引用是Python方法调用中的参数。在括号中的参数列表。参数用逗号分隔。例如:stc.create('port', under='project1', name='myport') | 属性键–值对 | 1. 属性键–值对使用 = 操作符 2.属性名称不会在名称-值对中被引用 3.对于PythonAPI,破折号前缀( the dash prefix)不与属性名称一起使用。 stc.create('streamblock', under=port) | DAN引用 | 使用Descendant-Attribute Notation(DAN)的属性引用需要包含引号(并且不使用破折号前缀)。在下面的示例中,streamBlock.name是一个DAN属性引用:d = dict([('under', 'project1') , /('streamBlock.name''mystreamblock')] /stc.create('port', **d) | DDN引用 | 使用 Direct-Descendant Notation (DDN)的对象引用需要包含引号。例如 stc.get('project1.port') | handle 引用 | Handle引用没有被引用。例如: portHandle = stc.create('port', under='project1') stc.get(portHandle) | 对象类型名称 | 对象类型名称用引号括起来。例如:stc.create('project')stc.perform('GeneratorStart',generatorList=generator) | 独立属性名称 | 属性名称(独立名称)用引号括起来。例如:stc.get(streamblockHandle, 'name') | 关系引用 | 关系引用Spirent TestCenter 自动化语法中被视为属性。关系引用附在引号中。例如: stc.get(portHandle, 'children') 如果使用对象类型筛选器,请使用破折号分隔符。例如:stc.get(portHandle, 'children-generator') | 建立关系 | 使用关键字参数格式(**kwargs)来指定关系及其值。例如 stc.config(Project_1,**{"DefaultSelection-targets": [FrameLengthDistribution_1]}) stc.config(Port_1,**{"AffiliationPort-sources": [EmulatedDevice_1,EmulatedDevice_3]}) | 整数 | 整数值没有被引号引用。例如:stc.sleep(10) stc.perform('devicecreate', parentList='project1',createCount=4) 请注意,组合后的值必须用引号括起来:stc.config(portHandle, location="//10.1.1.1/1/2") |
Python API概要
以下提供了关Spirent TestCenter 自动化的PythonAPI的简要概述。
1. API函数概要
API函数概要 下表列出了API中的函数。对于每个函数,该表显示了方法调用参数列表的参数,包括返回值的类型 此表显示了每个函数的参数列表的抽象部分。有关这些函数的详细信息,请参见API函数。
函数 | 参数列表数据类型 |
---|
create | create(objectTypeString, attributeName=value [,...]) 返回值:HandleString | config | config(handleString, attributeName=value [,...]) 返回值:none | get | get(handleString) get(handleString, attributeName [,...]) 返回值:value or attribute name/value pairs | perform | perform(commandNameString)perform(commandNameString,attribute Name=value [,...]) | delete | delete(handleString) | connect | connect(hostNameString [,...]) | disconnect | disconnect(hostNameString [,...] ) | reserve | reserve(//chassis/slot/port string [,...]) | release | release(//chassis/slot/port string [,...]) | apply | apply() | sleep | sleep(numberSecondsInteger) | log | log(logLevelString, messageString) | waitUntilComplete | waitUntilComplete (timeout=numberSecondsInteger) | subscribe | unsubscribe(resultDataSetHandleString) | help | help()/help(‘commands’)/help(commandNameString)/help(handleString)/help(objectTypeString) | – | – | | |
2. dict或string(返回值)
get 和 perform 函数可以返回属性名的dict(Python 标准库对象)。如果一个特定函数调用的结果是一个属性值,则该函数将返回一个 string。否则,该函数将返回一个 dict。 例如:
stc.get(port, ‘name’)
返回一个字符串
stc.get(port)
或者返回一个含有多个条目的dirt,如果一个属性有多个值,则dict值是一个包含由空格分隔的值的字符串。
Python示例
本主题中描述的示例使用 Spirent TestCenter 机箱上的两个端口,并创建的简单测试配置如下图所示:
Python 脚本将创建项目对象、两个端口对象和一个流线块对象 Spirent TestCenter 中心将自动创建生成器、分析器和结果对象;自动对象将显示为红色。以下部分描述了 Python 脚本的示例: Initialization(初始化) Chassis, Slot, and Port Variables(机箱,板卡,端口) Project and Port Objects(项目,端口) Traffi Configuration(流量配置) Attaching Ports(连接端口) Results Subscription(查看结果) Traffic Generation(产生流量) Termination(停止)
Initialization
每个 Spirent TestCente 自动化 Python 脚本必须加载Spirent TestCenter模块,才能使用API。下面的代码片段初始化了 Spirent TestCenter 自动化环境
from StcPython import StcPython
stc = StcPython()
代码片段建立了对 Spirent TestCenter 自动化 Python API 的访问。
Chassis, Slot, and Port Variables
此代码片段声明一些变量,以标识要在测试中使用的机箱、板卡和端口。它还设置了日志记录。
chassisAddress = '10.100.20.60'
slot = 2
Python Example
p1 = 1
p2 = 2
print "using //%s/%s/%s" % (chassisAddress, slot, p1)
print "using //%s/%s/%s" % (chassisAddress, slot, p2)
stc.config( 'automationoptions', loglevel='info', logto='mylog.txt' )
Project and Port Objects
下面的代码片段将创建项目对象和端口对象。项目对象是对象层次结构的根目录。端口对象表示 Spirent TestCenter 机箱上的端口。此代码创建对象,检索并显示项目属性,并指定端口位置。
print 'Create a Project - root'
project = stc.create('project')
print 'Get Project attributes'
projectAtt = stc.get(project, 'name')
print projectAtt
print 'Create Ports under', project
port1 = stc.create('port', under=project)
port2 = stc.create('port', under=project)
print 'Configure Port locations'
stc.config(port1, location="//%s/%s/%s" % (chassisAddress, slot, p1))
stc.config(port2, location="//%s/%s/%s" % (chassisAddress, slot, p2))
Traffic Configuration
此代码片段创建一个 StreamBlock 对象,并检索生成器和分析器对象的Handle。
print 'Creating StreamBlock on Port 1'
streamBlock = stc.create('streamBlock', under=port1 )
generator = stc.get(port1, 'children-generator')
analyzer = stc.get(port2, 'children-Analyzer')
Attaching Ports
此代码片段调用附件端口命令并应用该配置。附件端口可完成以下操作:
- 连接到机箱(使用在“端口对象位置”属性中指定的机箱IP地址)
- 预订端口
- 在机箱中创建物理端口与测试配置中的逻辑表示之间的映射。
- 您可以通过调用连接功能,然后使用保留端口和映射端口命令来分别执行这些操作;但是,附加端口命令的效率更高。
print 'Attaching Ports...'
stc.perform('AttachPorts', portList=[port1, port2], autoConnect='TRUE')
stc.apply()
Results Subscription
以下对 Subscribe 函数的调用为生成器结果和分析器结果建立Subscription。调用指定一个文件名前缀,以生成一个包含以逗号分隔的值的结果输出文件。有关详细信息,请参阅Subscriptions功能的描述和关于创建Subscriptions的信息。
print 'Call Subscribe...'
port1GeneratorResult = stc.subscribe(Parent=project,
ResultParent=port1,
ConfigType='Generator',
resulttype='GeneratorPortResults',
filenameprefix="Generator_port1_
counter_%s" % port1,
Interval=2 )
port2AnalyzerResult = stc.subscribe(Parent=project,
ResultParent=port2,
ConfigType='Analyzer',
resulttype='AnalyzerPortResults',
filenameprefix="Analyzer_port2_counte %s"%port1 )
Traffic Generation
以下代码片段:
print 'Starting Traffic...'
stc.perform('AnalyzerStart', analyzerList=analyzer)
print 'start', analyzer
stc.sleep(1)
stc.perform('GeneratorStart', generatorList=generator)
print "start", generator
print 'Sleep 5 seconds...'
stc.sleep(5)
print 'Stopping Traffic...'
stc.perform('GeneratorStop', generatorList=generator)
stc.perform('AnalyzerStop', analyzerList=analyzer)
print 'stop', generator
print 'stop', analyzer
print 'Call Unsubscribe...'
stc.unsubscribe(port2AnalyzerResult)
stc.unsubscribe(port1GeneratorResult)
Termination
在测试结束时,脚本将释放端口,断开与机箱的连接,并删除项目对象以释放所有资源。下面的代码片段显示了您用于执行终止的函数调用。
print 'Call Disconnect...'
stc.disconnect(chassisAddress)
stc.delete(project)
以上 form https://support.spirent.com/
|