• [Valkyrie网络测试仪-软件使用技巧] - Scheduler动作录制,定制打流过程(中途启停/调整带宽/使能部分流量)


    在UI界面下将脚本的事情就做完了!  -- ValkyrieManager Scheduler

    在网络测试打流过程中,我们经常会遇到要对比在不同报文长度下,端口的转发性能是否有影响,改变报文长度,对转发系统的延迟处理会带来多大的影响,需要实施动态的流量压力测试,并根据实际的场景,可能需要规划模拟某些流量进行定时定次的发送等场景,传统的解决方法是直接拿API进行脚本调取进行二次开发,学习起来比较费事,ValkyrieManager的Scheduler功能可以很好的解决以上痛点。

    Xena Scheduler可以在打流过程中进行动态的参数调整,实现动态流量模型,如变更发包的报文长度Packet length,发包的带宽Rate/PPS,动态的启停某些流量等

    适用硬件型号及软件版本

    以下分享,适用于以下机箱及测试板卡

    • ValkyrieBay,ValkyrieCompact
    • Odin-1G-3S-6P,Odin-1G-3S-6P-T1-RJ45,Odin-1G-3S-6P-E-TSN
    • Odin-10G-5S-6P-CU,Odin-10G-1S-6P,Odin-10G-4S-6P
    • Loki-100G-5S-2P,Loki-100G-5S-4P
    • Thor-400G-7S-1P,Thor-400G-4S-2P,Thor-400G-4S-4P
    • Freya-800G-4S-1P-QDD,Freya-800G-4S-1P-OSFP,Freya-800G-4S-E

    软件版本,ValkyrieManager版本Release40及后续版本


    Scheduler界面设定

    默认该页面在最下面折叠了,方便查看,可以将它先右上角固定住,再拖动到与其他常用界面齐平

    Scheduler支持设定的动作

    • Set parameter value改变流数据参数(指定来了的PPS/Rate%数据)
    • Wait period插入等待时间
    • Start traffic开启端口发包
    • Stop traffic停止端口发包
    • Clear Statistics统计数据清零
    • Enable Stream使能流量
    • Disable Stream禁用流量
    • Suspend暂停流量
    • Custom Port/ Stream Command自定义命令行数据(端口级别/流级别)

    范例1,动态调整发包带宽-改变Rate/PPS

    测试过程中调整带宽,用于观察带宽增加或降低速率时,接受端口的Rx数据,Rx Latency等数据变化

    模型设计如下

     

    实施效果

     底层逻辑实现

    (不重要)

    1. {
    2. "Operations": [
    3. {
    4. "OperType": "StopTraffic",
    5. "ParamType": 0,
    6. "OperValue": null,
    7. "PortTargetList": [
    8. {
    9. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    10. "ModuleIndex": 1,
    11. "PortIndex": 4
    12. }
    13. ],
    14. "StreamTargetList": [],
    15. "AllTargetsSelected": false,
    16. "FullInfo": "Stop Traffic",
    17. "Operations": [],
    18. "ItemId": "b165a6b3-4749-4fb5-bd83-0392d4a4b4e1",
    19. "ParentId": ""
    20. },
    21. {
    22. "OperType": "SetParamValue",
    23. "ParamType": "PS_RATEFRACTION",
    24. "OperValue": 10.0,
    25. "PortTargetList": [],
    26. "StreamTargetList": [],
    27. "AllTargetsSelected": true,
    28. "FullInfo": "Set Parameter Value",
    29. "Operations": [],
    30. "ItemId": "105e9b4f-5b67-48e8-a252-a3a6e3f241fe",
    31. "ParentId": ""
    32. },
    33. {
    34. "OperType": "StartTraffic",
    35. "ParamType": 0,
    36. "OperValue": null,
    37. "PortTargetList": [
    38. {
    39. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    40. "ModuleIndex": 1,
    41. "PortIndex": 4
    42. }
    43. ],
    44. "StreamTargetList": [],
    45. "AllTargetsSelected": false,
    46. "FullInfo": "Start Traffic",
    47. "Operations": [],
    48. "ItemId": "b641191c-5095-472a-9c72-026c4006c3f3",
    49. "ParentId": ""
    50. },
    51. {
    52. "OperType": "Wait",
    53. "ParamType": 0,
    54. "OperValue": 10.0,
    55. "PortTargetList": [],
    56. "StreamTargetList": [],
    57. "AllTargetsSelected": true,
    58. "FullInfo": "Wait Period",
    59. "Operations": [],
    60. "ItemId": "eff4459b-71c6-47b1-9b8e-76908d20c175",
    61. "ParentId": ""
    62. },
    63. {
    64. "OperType": "StopTraffic",
    65. "ParamType": 0,
    66. "OperValue": null,
    67. "PortTargetList": [
    68. {
    69. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    70. "ModuleIndex": 1,
    71. "PortIndex": 4
    72. }
    73. ],
    74. "StreamTargetList": [],
    75. "AllTargetsSelected": false,
    76. "FullInfo": "Stop Traffic",
    77. "Operations": [],
    78. "ItemId": "59afa5f4-eaf5-447d-873a-f07417a9831c",
    79. "ParentId": ""
    80. },
    81. {
    82. "OperType": "SetParamValue",
    83. "ParamType": "PS_RATEFRACTION",
    84. "OperValue": 1.0,
    85. "PortTargetList": [
    86. {
    87. "StreamId": 0,
    88. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    89. "ModuleIndex": 1,
    90. "PortIndex": 4
    91. },
    92. {
    93. "StreamId": 1,
    94. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    95. "ModuleIndex": 1,
    96. "PortIndex": 4
    97. },
    98. {
    99. "StreamId": 2,
    100. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    101. "ModuleIndex": 1,
    102. "PortIndex": 4
    103. }
    104. ],
    105. "StreamTargetList": [
    106. {
    107. "StreamId": 0,
    108. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    109. "ModuleIndex": 1,
    110. "PortIndex": 4
    111. },
    112. {
    113. "StreamId": 1,
    114. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    115. "ModuleIndex": 1,
    116. "PortIndex": 4
    117. },
    118. {
    119. "StreamId": 2,
    120. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    121. "ModuleIndex": 1,
    122. "PortIndex": 4
    123. }
    124. ],
    125. "AllTargetsSelected": false,
    126. "FullInfo": "Set Parameter Value",
    127. "Operations": [],
    128. "ItemId": "61c840e3-287b-4c17-bb54-99d6e2b7efed",
    129. "ParentId": ""
    130. },
    131. {
    132. "OperType": "SetParamValue",
    133. "ParamType": "PS_RATEFRACTION",
    134. "OperValue": 20.0,
    135. "PortTargetList": [
    136. {
    137. "StreamId": 3,
    138. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    139. "ModuleIndex": 1,
    140. "PortIndex": 4
    141. },
    142. {
    143. "StreamId": 4,
    144. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    145. "ModuleIndex": 1,
    146. "PortIndex": 4
    147. }
    148. ],
    149. "StreamTargetList": [
    150. {
    151. "StreamId": 3,
    152. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    153. "ModuleIndex": 1,
    154. "PortIndex": 4
    155. },
    156. {
    157. "StreamId": 4,
    158. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    159. "ModuleIndex": 1,
    160. "PortIndex": 4
    161. }
    162. ],
    163. "AllTargetsSelected": false,
    164. "FullInfo": "Set Parameter Value",
    165. "Operations": [],
    166. "ItemId": "036b3749-57b0-4830-a521-380cc88de4f7",
    167. "ParentId": ""
    168. },
    169. {
    170. "OperType": "StartTraffic",
    171. "ParamType": 0,
    172. "OperValue": null,
    173. "PortTargetList": [
    174. {
    175. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    176. "ModuleIndex": 1,
    177. "PortIndex": 4
    178. }
    179. ],
    180. "StreamTargetList": [],
    181. "AllTargetsSelected": false,
    182. "FullInfo": "Start Traffic",
    183. "Operations": [],
    184. "ItemId": "db72a383-79ad-40f9-b3eb-7e7c722d3928",
    185. "ParentId": ""
    186. }
    187. ],
    188. "ItemId": "c61dd725-211f-4098-b850-285faecb3c52",
    189. "ParentId": "",
    190. "FullInfo": "New Schedule 3"
    191. }

    范例2,动态调整发包带宽-Multi-Streams多流之间调度

    Suspend暂停<-->Enable启用,状态之间切换

    Stream有3种状态,Enable启用/Disable禁用/Suspend暂停

    在端口发包的时候,Stream状态可以在Suspend/Enable之间切换

    Suspend的Stream会占用该端口下的流设定带宽,但发包的时候不会发送

     实施效果

     

     底层实现代码展现

    (不重要)

    1. {
    2. "Operations": [
    3. {
    4. "OperType": "StopTraffic",
    5. "ParamType": 0,
    6. "OperValue": null,
    7. "PortTargetList": [
    8. {
    9. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    10. "ModuleIndex": 1,
    11. "PortIndex": 4
    12. }
    13. ],
    14. "StreamTargetList": [],
    15. "AllTargetsSelected": false,
    16. "FullInfo": "Stop Traffic",
    17. "Operations": [],
    18. "ItemId": "58f4e426-79b5-4be3-8744-84554c04cc05",
    19. "ParentId": ""
    20. },
    21. {
    22. "OperType": "SetParamValue",
    23. "ParamType": "PS_RATEFRACTION",
    24. "OperValue": 20.0,
    25. "PortTargetList": [
    26. {
    27. "StreamId": 0,
    28. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    29. "ModuleIndex": 1,
    30. "PortIndex": 4
    31. },
    32. {
    33. "StreamId": 1,
    34. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    35. "ModuleIndex": 1,
    36. "PortIndex": 4
    37. },
    38. {
    39. "StreamId": 2,
    40. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    41. "ModuleIndex": 1,
    42. "PortIndex": 4
    43. },
    44. {
    45. "StreamId": 3,
    46. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    47. "ModuleIndex": 1,
    48. "PortIndex": 4
    49. },
    50. {
    51. "StreamId": 4,
    52. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    53. "ModuleIndex": 1,
    54. "PortIndex": 4
    55. }
    56. ],
    57. "StreamTargetList": [
    58. {
    59. "StreamId": 0,
    60. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    61. "ModuleIndex": 1,
    62. "PortIndex": 4
    63. },
    64. {
    65. "StreamId": 1,
    66. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    67. "ModuleIndex": 1,
    68. "PortIndex": 4
    69. },
    70. {
    71. "StreamId": 2,
    72. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    73. "ModuleIndex": 1,
    74. "PortIndex": 4
    75. },
    76. {
    77. "StreamId": 3,
    78. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    79. "ModuleIndex": 1,
    80. "PortIndex": 4
    81. },
    82. {
    83. "StreamId": 4,
    84. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    85. "ModuleIndex": 1,
    86. "PortIndex": 4
    87. }
    88. ],
    89. "AllTargetsSelected": false,
    90. "FullInfo": "Set Parameter Value",
    91. "Operations": [],
    92. "ItemId": "fe083ec2-a572-457f-9228-b2757d08c288",
    93. "ParentId": ""
    94. },
    95. {
    96. "OperType": "StartTraffic",
    97. "ParamType": 0,
    98. "OperValue": null,
    99. "PortTargetList": [
    100. {
    101. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    102. "ModuleIndex": 1,
    103. "PortIndex": 4
    104. }
    105. ],
    106. "StreamTargetList": [],
    107. "AllTargetsSelected": false,
    108. "FullInfo": "Start Traffic",
    109. "Operations": [],
    110. "ItemId": "d99797fb-b7b8-4730-8192-d7a970063c7e",
    111. "ParentId": ""
    112. },
    113. {
    114. "OperType": "Wait",
    115. "ParamType": 0,
    116. "OperValue": 10.0,
    117. "PortTargetList": [],
    118. "StreamTargetList": [],
    119. "AllTargetsSelected": true,
    120. "FullInfo": "Wait Period",
    121. "Operations": [],
    122. "ItemId": "be43e4b9-3c3a-49b7-9c1d-842fea62b6cf",
    123. "ParentId": ""
    124. },
    125. {
    126. "OperType": "SuspendStream",
    127. "ParamType": 0,
    128. "OperValue": null,
    129. "PortTargetList": [
    130. {
    131. "StreamId": 1,
    132. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    133. "ModuleIndex": 1,
    134. "PortIndex": 4
    135. },
    136. {
    137. "StreamId": 2,
    138. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    139. "ModuleIndex": 1,
    140. "PortIndex": 4
    141. },
    142. {
    143. "StreamId": 3,
    144. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    145. "ModuleIndex": 1,
    146. "PortIndex": 4
    147. },
    148. {
    149. "StreamId": 4,
    150. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    151. "ModuleIndex": 1,
    152. "PortIndex": 4
    153. }
    154. ],
    155. "StreamTargetList": [
    156. {
    157. "StreamId": 1,
    158. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    159. "ModuleIndex": 1,
    160. "PortIndex": 4
    161. },
    162. {
    163. "StreamId": 2,
    164. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    165. "ModuleIndex": 1,
    166. "PortIndex": 4
    167. },
    168. {
    169. "StreamId": 3,
    170. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    171. "ModuleIndex": 1,
    172. "PortIndex": 4
    173. },
    174. {
    175. "StreamId": 4,
    176. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    177. "ModuleIndex": 1,
    178. "PortIndex": 4
    179. }
    180. ],
    181. "AllTargetsSelected": false,
    182. "FullInfo": "Suspend Stream",
    183. "Operations": [],
    184. "ItemId": "0d738010-2e51-4fe0-aeca-c34ad7df4f08",
    185. "ParentId": ""
    186. },
    187. {
    188. "OperType": "Wait",
    189. "ParamType": 0,
    190. "OperValue": 10.0,
    191. "PortTargetList": [],
    192. "StreamTargetList": [],
    193. "AllTargetsSelected": true,
    194. "FullInfo": "Wait Period",
    195. "Operations": [],
    196. "ItemId": "1328f903-477d-4899-a901-d83af4eff5fc",
    197. "ParentId": ""
    198. },
    199. {
    200. "OperType": "EnableStream",
    201. "ParamType": 0,
    202. "OperValue": null,
    203. "PortTargetList": [
    204. {
    205. "StreamId": 1,
    206. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    207. "ModuleIndex": 1,
    208. "PortIndex": 4
    209. }
    210. ],
    211. "StreamTargetList": [
    212. {
    213. "StreamId": 1,
    214. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    215. "ModuleIndex": 1,
    216. "PortIndex": 4
    217. }
    218. ],
    219. "AllTargetsSelected": false,
    220. "FullInfo": "Enable Stream",
    221. "Operations": [],
    222. "ItemId": "6d832bd5-5421-4ba9-8dfe-c819086492d3",
    223. "ParentId": ""
    224. },
    225. {
    226. "OperType": "Wait",
    227. "ParamType": 0,
    228. "OperValue": 10.0,
    229. "PortTargetList": [],
    230. "StreamTargetList": [],
    231. "AllTargetsSelected": true,
    232. "FullInfo": "Wait Period",
    233. "Operations": [],
    234. "ItemId": "0543fd21-97a9-40b4-ab8d-6de2e8d6c651",
    235. "ParentId": ""
    236. },
    237. {
    238. "OperType": "EnableStream",
    239. "ParamType": 0,
    240. "OperValue": null,
    241. "PortTargetList": [
    242. {
    243. "StreamId": 2,
    244. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    245. "ModuleIndex": 1,
    246. "PortIndex": 4
    247. }
    248. ],
    249. "StreamTargetList": [
    250. {
    251. "StreamId": 2,
    252. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    253. "ModuleIndex": 1,
    254. "PortIndex": 4
    255. }
    256. ],
    257. "AllTargetsSelected": false,
    258. "FullInfo": "Enable Stream",
    259. "Operations": [],
    260. "ItemId": "58aa8fb1-8827-4a9c-8dfa-b025e09002fe",
    261. "ParentId": ""
    262. },
    263. {
    264. "OperType": "Wait",
    265. "ParamType": 0,
    266. "OperValue": 10.0,
    267. "PortTargetList": [],
    268. "StreamTargetList": [],
    269. "AllTargetsSelected": true,
    270. "FullInfo": "Wait Period",
    271. "Operations": [],
    272. "ItemId": "58ed510b-6122-4295-b759-7396916d5317",
    273. "ParentId": ""
    274. },
    275. {
    276. "OperType": "EnableStream",
    277. "ParamType": 0,
    278. "OperValue": null,
    279. "PortTargetList": [
    280. {
    281. "StreamId": 0,
    282. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    283. "ModuleIndex": 1,
    284. "PortIndex": 4
    285. },
    286. {
    287. "StreamId": 1,
    288. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    289. "ModuleIndex": 1,
    290. "PortIndex": 4
    291. },
    292. {
    293. "StreamId": 2,
    294. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    295. "ModuleIndex": 1,
    296. "PortIndex": 4
    297. },
    298. {
    299. "StreamId": 3,
    300. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    301. "ModuleIndex": 1,
    302. "PortIndex": 4
    303. },
    304. {
    305. "StreamId": 4,
    306. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    307. "ModuleIndex": 1,
    308. "PortIndex": 4
    309. }
    310. ],
    311. "StreamTargetList": [
    312. {
    313. "StreamId": 0,
    314. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    315. "ModuleIndex": 1,
    316. "PortIndex": 4
    317. },
    318. {
    319. "StreamId": 1,
    320. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    321. "ModuleIndex": 1,
    322. "PortIndex": 4
    323. },
    324. {
    325. "StreamId": 2,
    326. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    327. "ModuleIndex": 1,
    328. "PortIndex": 4
    329. },
    330. {
    331. "StreamId": 3,
    332. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    333. "ModuleIndex": 1,
    334. "PortIndex": 4
    335. },
    336. {
    337. "StreamId": 4,
    338. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    339. "ModuleIndex": 1,
    340. "PortIndex": 4
    341. }
    342. ],
    343. "AllTargetsSelected": false,
    344. "FullInfo": "Enable Stream",
    345. "Operations": [],
    346. "ItemId": "6d56fa25-eed3-4f4c-abbd-1cf2e2403dc3",
    347. "ParentId": ""
    348. },
    349. {
    350. "OperType": "SuspendStream",
    351. "ParamType": 0,
    352. "OperValue": null,
    353. "PortTargetList": [
    354. {
    355. "StreamId": 1,
    356. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    357. "ModuleIndex": 1,
    358. "PortIndex": 4
    359. },
    360. {
    361. "StreamId": 2,
    362. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    363. "ModuleIndex": 1,
    364. "PortIndex": 4
    365. },
    366. {
    367. "StreamId": 4,
    368. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    369. "ModuleIndex": 1,
    370. "PortIndex": 4
    371. }
    372. ],
    373. "StreamTargetList": [
    374. {
    375. "StreamId": 1,
    376. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    377. "ModuleIndex": 1,
    378. "PortIndex": 4
    379. },
    380. {
    381. "StreamId": 2,
    382. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    383. "ModuleIndex": 1,
    384. "PortIndex": 4
    385. },
    386. {
    387. "StreamId": 4,
    388. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    389. "ModuleIndex": 1,
    390. "PortIndex": 4
    391. }
    392. ],
    393. "AllTargetsSelected": false,
    394. "FullInfo": "Suspend Stream",
    395. "Operations": [],
    396. "ItemId": "0f42335b-b714-4e5e-9b8b-cf08077e7222",
    397. "ParentId": ""
    398. },
    399. {
    400. "OperType": "Wait",
    401. "ParamType": 0,
    402. "OperValue": 10.0,
    403. "PortTargetList": [],
    404. "StreamTargetList": [],
    405. "AllTargetsSelected": true,
    406. "FullInfo": "Wait Period",
    407. "Operations": [],
    408. "ItemId": "8a7d181a-4b54-44b6-b299-fab062a65cfa",
    409. "ParentId": ""
    410. },
    411. {
    412. "OperType": "StopTraffic",
    413. "ParamType": 0,
    414. "OperValue": null,
    415. "PortTargetList": [
    416. {
    417. "ChassisId": "d1af7b63-48a1-493a-a3fb-0a3313c41a89",
    418. "ModuleIndex": 1,
    419. "PortIndex": 4
    420. }
    421. ],
    422. "StreamTargetList": [],
    423. "AllTargetsSelected": false,
    424. "FullInfo": "Stop Traffic",
    425. "Operations": [],
    426. "ItemId": "52ade31d-50b7-4f8b-a456-23d7dd3e73da",
    427. "ParentId": ""
    428. }
    429. ],
    430. "ItemId": "66c608ed-98ab-4160-bf60-b3de90f6dfae",
    431. "ParentId": "",
    432. "FullInfo": "New Schedule 1"
    433. }

  • 相关阅读:
    五面阿里巴巴回来分享面经总结,定级P7架构师
    Android设计模式--状态模式
    技术分享 | 实战详解接口测试请求方式Get、post
    《JAVA SE》包装类
    NFTScan 正式上线 Blast NFTScan 浏览器和 NFT API 数据服务
    3、树(上篇)
    SpringBoot 开放HTTPS HTTP ,并且强制HTTP转HTTPS端口
    SwiftUI中应用Hero动画(Hero Animation)时一些需要填的坑
    Groovy4的新特性概览
    selenium自动化chrome
  • 原文地址:https://blog.csdn.net/pangzi_sh/article/details/126808727