CyberFlood测试指南 - 如何调用自动化API

文摘   科技   2024-02-28 11:47   北京  

CyberFlood 测试指南合集中,小编向大家已经介绍了CyberFlood界面的使用,与Spirent TestCenter相同,CyberFlood也为大家提供了自动化接口,即RESTful API,便于大家利用自动化完成测试。

1

RESTful API

REST(英文:Representational State Transfer,直译过来表现层状态转换)提供了一组设计原则和约束条件,强调通过统一的接口(HTTP协议)对资源进行操作,是一种软件架构风格、设计风格。而满足这种设计风格的程序或接口我们称则之为RESTful。

在RESTful API中,包含许多请求方法,例如GET、POST、PUT、DELETE、HEAD和OPTIONS等,其中最常见则为以下四种:

    • GET:用于获取资源。

    • POST:用于创建资源。

    • PUT:用于更新资源。

    • DELETE:用于删除资源。

存在请求则也会有响应,对于响应部分,通常包含状态码、响应头、响应体部分。

状态码包含了三位数字,表示HTTP请求的处理结果,主要分为以下几类:

    • 1XX:指示信息,表示接受的请求正在处理。

    • 2XX:成功,表示请求已被成功接受、理解和处理。

    • 3XX:重定向,表示需要进一步的操作才能完成请求。

    • 4XX:客户端错误,表示包含语法错误或无法完成请求的请求。

    • 5XX:服务器错误,表示服务器无法完成请求。

而响应头和响应体部分一般都为JSON格式数据。

2

CyberFlood API使用

2.1

自动化手册

登录CyberFlood controller后,点击页面右上角帮助按钮,在下拉菜单中选择RESTful API Help ,即可查看CyberFlood自动化手册。

自动化手册包含了API接口相关的HTTP请求方法的说明和示例,页面中主要使用三部分的方式呈现,如图1所示。

图1 自动化手册整体


页面左侧选择或搜索特定的API接口,点击即可查看API的使用示例,如图2所示

图2 自动化手册页面左侧


页面中间为API使用时HTTP相关规范,和必须传入的值以及其他可选项,如图3所示,可以进行特定方式的过滤;

图3 自动化手册页面中部


页面右侧则可参考相关示例,展示了请求URL,请求报文、响应报文示例,同时还展出了相关错误响应报文的示例,如图4所示。

图4 自动化手册页面右侧



2.2

使用示范

CyberFlood API大多操作都是由GET、POST、PUT 、DELETE方法完成,以Tests下的相关接口为例。

GET方法列出所有测试例、所有测试的结果、下载结果文件等;

PUT方法可以运行测试例、复制测试例、生成一个测试结果报告;

DELETE可以删除测试例、测试结果等。


以查询controller中所有test为例:我们可以在上方搜索框中输入test,在结果中查找需要的API,可以看到listTestsAPI,如图5、6所示。



图5 搜索框




图6 搜索结果


在页面右侧可以查看规定的URL格式,以及正确响应内容和错误响应内容,如图7、8、9所示。



图7 请求URL格式示例






图8 正确响应报文示例






图9 错误响应报文示例


2.3

API 的调试方法

我们可以参考自动化文档中提供的调试方法来使用CyberFlood API

方法一:

在浏览器中使用OpenAPI的界面进行API调试,当前示例为OpenAPI 3.0版本,提供一个用户友好的API使用界面,如图10、11所示。



图10 API客户端





图11 API客户端使用示例




方法二:

下载Postman工具对API进行使用,可从自动化文档中下载Postman Environment for the CyberFlood APIv2 APIPostman Collection for the CyberFlood APIv2 API,将其导入Postman中即可,如图12、13所示。



图12 Postman需导入的JSON 文件






图13 Postman使用示例





2.4

简单自动化代码示例

本次示例使用Python演示,您可以选择其他语言来实现。

2.4.1 登录CyberFlood controller

在CyberFlood界面中我们执行任何操作之前需要进行登录,同理CyberFlood所有的API请求也都是受保护的,所以在发送请求时,需要在请求报文的header中携带登录时服务器生成并返回的Token,后续操作只需带上这个Token即可。

使用用户名和密码进行登录,用户管理可以参考我们微信文章Cyberflood关于管理的那些事儿之用户管理,Device管理和Queue管理

使用界面登录如下图15、16所示:



图15 登录页面





图16 登录成功



使用代码成功登录如下图17所示:

#输入controller IP地址host = "https://10.1.1.1"#组合请求urlurlLogin = host + "/api/v2/token"#输入用户名userName = "Spirent@spirent.com"#输入密码password = "spirent"#编写登录操作的请求体内容loginDetails = {"email": username,"password": password}#编写登录操作的请求头内容loginHead = {"Content-type": "application/json"}#将请求体的内容转换为JSON格式的字符串loginDetailsJson = json.dumps(loginDetails)#进行HTTP请求并将返回值存入loginRes变量loginRes =requests.post(urlLogin, headers = loginHead, data=loginDetailsJson, verify=False).json()#将响应内容中的token存入Token变量Token = loginRes['token']


图17 登录成功返回Token值




2.4.2 添加Device

在controller中您可以添加一台device。Device管理可以参考微信文章Cyberflood关于管理的那些事儿之用户管理,Device管理和Queue管理

使用界面添加Device如下图18、19所示:



图18 使用Device Manager






图19 页面创建Device



使用代码成功添加Device则如下图20所示:

#编写添加Device的请求URLcreateDeviceUrl="https://10.1.1.1/api/v2/devices"#编写添加Device的请求体内容createDevicePayload={"ip": "10.1.1.2"}#编写请求头内容header={"Content-type":"application/json","Authorization":"Bearer"+Token }#将请求体的内容转换为JSON格式的字符串createDevicePayloadJson=json.dumps(createDevicePayload)#进行HTTP请求并将返回值存入createDeviceRes变量createDeviceRes=requests.post(createDeviceUrl,headers =header,data=createDevicePayloadJson,, verify=False)


图 20 成功创建Device返回值


2.4.3 创建Queue

Queue是占用端口和资源的队列,在运行测试前我们需要创建一个Queue。Queue管理可以参考我们微信文章Cyberflood关于管理的那些事儿之用户管理,Device管理和Queue管理

使用界面创建Queue如下图21、22所示:



图21 使用Queue Manager






图22 页面创建Queue




使用代码成功创建Queue如下图23所示:

#编写获取device信息的请求URLurlGetDevice="https://10.1.1.1/api/v2/devices/10.1.1.2"#编写请求头header={"Content-type":"application/json","Authorization":"Bearer"+Token }#将获取到的device信息存入deviceInfo变量deviceInfo=(requests.get(urlGetDevice,headers=header,verify = False)).json()#在deviceInfo字典中查找是否存在key:slotsif "slots" in deviceInfo.keys():  slot=deviceInfo["slots"]  #在slots的值中取出device中的portgroup  for item in slot:    computeGroups=item["computeGroups"]    portsList=[]    #获取每个portgroup中的port    for item in computeGroups:      portsList.append(item["ports"])      portIds=[]      #获取每个port的id值      for i in range(len(portsList)):        ports=portsList[i]        for port in ports:          portIds.append(port["id"])          print(portIds)          ids=[]          #示例中只选取两个端口进行占用,并将所需port的id值存入ids变量中          ids.append(portIds[6])          ids.append(portIds[7])          print(ids)          #编写创建Queue的请求URL          urlCreateQueue="https://10.1.1.1/api/v2/queues"          #编写创建Queue的请求体          createQueueData={"name": "auto_queue","portIds":ids}          #将请求体的内容转换为JSON格式的字符串          createQueueDataJson=json.dumps(createQueueData)          #进行HTTP请求并将返回值存入createQueueRes变量          createQueueRes=requests.post(urlCreateQueue,headers=header,data=createQueueDataJson,verify = False)


图23 成功创建Queue返回值



2.4.4 运行测试

使用界面运行测试时,只需要在所需的test页面中,点击开始按钮即可。如下图24所示:



图 24 页面启动测试




使用代码运行一个已存在的test时,需要在URL中传入指定的testId,必须先根据自动化手册listTests获取到指定的testId值

本次示例中,需要执行一个名为10Gtput的test。首先根据页面中间部分所示方法,通过名字过滤的方法获取到名为10Gtput测试的testId

#编写获取test名为10Gtput的请求URLlistTestUrl="https://10.1.1.1/api/v2/tests?filter[name]=10Gtput"#编写请求头header={"Content-type":"application/json","Authorization":"Bearer"+Token }#进行HTTP请求并将返回值存入listTestRes变量listTestRes=(requests.get(listTestUrl,headers=header,verify = False)).json()print(listTestRes)#将响应内容中的testId值存入testId变量testId=listTestRes[0]['id']

根据获取到的testId成功运行此test,结果如图25所示

#编写开启测试的请求URLstartTestUrl=f"https://10.1.1.1/api/v2/tests/{testId}/start"#进行HTTP请求并将返回值存入startTestRes变量startTestRes=requests.put(startTestUrl,headers=header,data=None,verify = False)


图25 成功启动测试返回值



2.4.5 查看测试结果

利用listTestResults来查看结果,如图26所示。testId是required的参数。

图26 自动化listTestResults相关示例 


listTestResults可获取测试例运行后的所有测试结果(多次运行此测试的情况下会存在多个测试结果输出)。我们可以选择特定的某次测试结果,本次示例选择第一次运行测试的结果(listTestResults响应体会按照测试例运行时间升序排列各次测试结果)。执行测试结果返回值如图27所示。

#编写获取test名为10Gtput测试结果的请求URLlistTestResultsUrl=f"https://10.1.1.1/api/v2/tests/{testId}/results"#进行HTTP请求并将返回值存入listTestResultsRes变量listTestResultsRes=(requests.get(listTestResultsUrl,headers=header,verify = False)).json()print(listTestResultsRes)#输出第一次运行测试的测试结果testResultFirst=listTestResults_res[0]print(testResult)


图27 测试结果返回值



以上就是对CyberFlood自动化基础使用的简单介绍,后续我们会继续推出更多进阶使用的教程,关注我们,获取最新内容。


关键字:CyberFlood,自动化,RESTful API,postman,登录,添加Device,创建Queue,运行测试,查看测试结果


延伸阅读:

CyberFlood 测试指南

Cyberflood关于管理的那些事儿之用户管理,Device管理和Queue管理


推荐阅读:

Spirent TestCenter 自动化测试指南

Octobox TR398 自动化使用指南(二):接收灵敏度测试

OCTOBOX TR398 自动化使用指南(一)


联系我们:

思博伦官方网站: www.spirent.cn

技术中心热线:400-810-9529

支持邮箱:support@spirent.com

售后网站:support.spirent.com


版权归思博伦通信科技(北京)有限公司所有,思博伦技术中心(SpirentServices)原创发布,转载请联系授权。


长按识别二维码,关注思博伦技术中心

思博伦技术中心
思博伦技术中心由思博伦全球服务部的技术团队管理和维护。我们致力于提供完善的技术支持,并定期更新。通过我们的微信平台您将获取最新的产品发布信息,全面的产品使用技巧,实用的常见问题解决方案,以及完善的售后服务流程。
 最新文章