在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所示。
在页面右侧可以查看规定的URL格式,以及正确响应内容和错误响应内容,如图7、8、9所示。
2.3
API 的调试方法
我们可以参考自动化文档中提供的调试方法来使用CyberFlood API。
方法一:
在浏览器中使用OpenAPI的界面进行API调试,当前示例为OpenAPI 3.0版本,提供一个用户友好的API使用界面,如图10、11所示。
方法二:
下载Postman工具对API进行使用,可从自动化文档中下载Postman Environment for the CyberFlood APIv2 API、Postman Collection for the CyberFlood APIv2 API,将其导入Postman中即可,如图12、13所示。
2.4
简单自动化代码示例
本次示例使用Python演示,您可以选择其他语言来实现。
2.4.1 登录CyberFlood controller
在CyberFlood界面中我们执行任何操作之前需要进行登录,同理CyberFlood所有的API请求也都是受保护的,所以在发送请求时,需要在请求报文的header中携带登录时服务器生成并返回的Token,后续操作只需带上这个Token即可。
使用用户名和密码进行登录,用户管理可以参考我们微信文章Cyberflood关于管理的那些事儿之用户管理,Device管理和Queue管理。
使用界面登录如下图15、16所示:
使用代码成功登录如下图17所示:
#输入controller IP地址
host = "https://10.1.1.1"
#组合请求url
urlLogin = 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']
2.4.2 添加Device
在controller中您可以添加一台device。Device管理可以参考微信文章Cyberflood关于管理的那些事儿之用户管理,Device管理和Queue管理。
使用界面添加Device如下图18、19所示:
使用代码成功添加Device则如下图20所示:
#编写添加Device的请求URL
createDeviceUrl="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)
2.4.3 创建Queue
Queue是占用端口和资源的队列,在运行测试前我们需要创建一个Queue。Queue管理可以参考我们微信文章Cyberflood关于管理的那些事儿之用户管理,Device管理和Queue管理。
使用界面创建Queue如下图21、22所示:
使用代码成功创建Queue如下图23所示:
#编写获取device信息的请求URL
urlGetDevice="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:slots
if "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)
2.4.4 运行测试
使用界面运行测试时,只需要在所需的test页面中,点击开始按钮即可。如下图24所示:
使用代码运行一个已存在的test时,需要在URL中传入指定的testId,必须先根据自动化手册listTests获取到指定的testId值。
本次示例中,需要执行一个名为10Gtput的test。首先根据页面中间部分所示方法,通过名字过滤的方法获取到名为10Gtput测试的testId
#编写获取test名为10Gtput的请求URL
listTestUrl="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所示
#编写开启测试的请求URL
startTestUrl=f"https://10.1.1.1/api/v2/tests/{testId}/start"
#进行HTTP请求并将返回值存入startTestRes变量
startTestRes=requests.put(startTestUrl,headers=header,data=None,verify = False)
2.4.5 查看测试结果
利用listTestResults来查看结果,如图26所示。testId是required的参数。
listTestResults可获取测试例运行后的所有测试结果(多次运行此测试的情况下会存在多个测试结果输出)。我们可以选择特定的某次测试结果,本次示例选择第一次运行测试的结果(listTestResults响应体会按照测试例运行时间升序排列各次测试结果)。执行测试结果返回值如图27所示。
#编写获取test名为10Gtput测试结果的请求URL
listTestResultsUrl=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)
以上就是对CyberFlood自动化基础使用的简单介绍,后续我们会继续推出更多进阶使用的教程,关注我们,获取最新内容。
关键字:CyberFlood,自动化,RESTful API,postman,登录,添加Device,创建Queue,运行测试,查看测试结果
延伸阅读:
Cyberflood关于管理的那些事儿之用户管理,Device管理和Queue管理
推荐阅读:
Octobox TR398 自动化使用指南(二):接收灵敏度测试
联系我们:
思博伦官方网站: www.spirent.cn
技术中心热线:400-810-9529
支持邮箱:support@spirent.com
售后网站:support.spirent.com
版权归思博伦通信科技(北京)有限公司所有,思博伦技术中心(SpirentServices)原创发布,转载请联系授权。
长按识别二维码,关注思博伦技术中心