JMeter的 WebSocket负载测试
我想通过WebSocket API的响应,完全动态地使用JSR223后置处理器(Groovy语言)来构造WS Play API请求。应该怎么实现?
WS Play API请求:
{
"guidance_order": [
0,
2,
4
],
"session_type": 3,
"session_start_mood": "calm",
"session_end_mood": "calm",
"genre": "Hip Hop",
"sub_genre": "Hip Hop / Rap",
"playlist_recommender": "PlaylistContinuator v1.6.3",
"confidence_score": 0.5389271378517151,
"video_category": "",
"guidance_category": "Breathwork",
"audio_playlist_urls": [
"https://s3.us-west-1.wasabisys.com/dbapp/converted_music/GBCBR0700022/config_44/70a62d169c6dde5ca218.m3u8",
"https://s3.us-west-1.wasabisys.com/dbapp/converted_music/GBCBR0700021/config_44/b88aa4b71dfeba37732a.m3u8",
"https://s3.us-west-1.wasabisys.com/dbapp/converted_music/USIR28700379/config_44/06bc853058a2db54e084.m3u8",
"https://s3.us-west-1.wasabisys.com/dbapp/converted_music/GBCBR0700020/config_44/f83b8153c9de17c27aa7.m3u8"
],
"video_playlist_urls": [
],
"guidance_playlist_urls": [
"https://s3.us-west-1.wasabisys.com/dbapp/converted_guidance/Ian/CALM_BREATHWORK_478Breathwork_Elise_1.m3u8",
"https://s3.us-west-1.wasabisys.com/dbapp/converted_guidance/Ian/CALM_BREATHWORK_478Breathwork_Elise_3.m3u8",
"https://s3.us-west-1.wasabisys.com/dbapp/converted_guidance/Ian/CALM_BREATHWORK_478Breathwork_Elise_5.m3u8"
],
"artist_name_list": [
"Run D.M.C.",
"Run D.M.C.",
"Eric B. & Rakim",
"Run D.M.C."
],
"track_id_list": {
"iscrs": [
"GBCBR0700022",
"GBCBR0700021",
"USIR28700379",
"GBCBR0700020"
],
"video_ids": [
],
"guidance_ids": [
"18",
"20",
"22"
],
"audio_ids": [
"14246",
"13604",
"7633",
"12593"
]
},
"track_name_list": {
"song_titles": [
"King Of Rock (Live)",
"Medley: Rock Box Sucker MC's Freestyle Here We Go Beats To The Rhyme (Live)",
"Paid In Full (Seven Minutes Of Madness - The Coldcut Remix)",
"It's Tricky (Live)"
],
"video_titles": [
],
"guidance_titles": [
"CALM_BREATHWORK_478Breathwork_Elise_1",
"CALM_BREATHWORK_478Breathwork_Elise_3",
"CALM_BREATHWORK_478Breathwork_Elise_5"
]
},
"video_metadata": {
"videos_duration": [
],
"videos_length": [
],
"videos_start_time": [
]
},
"track_durations": {
"audio_durations": [
172.173333,
314.52,
430.213696,
214.586667
],
"video_durations": [
],
"guidance_durations": [
110.36025,
29.904875,
10.844167
]
},
"playlist_id": "a2a304d9-6623-413b-aa96-89d5fb1e0f94",
"playlist_thumbnail_image": "https://s3.us-west-1.wasabisys.com/dbapp/playlists/artwork_a2a304d9-6623-413b-aa96-89d5fb1e0f94.jpg"
}
WebSocket API响应:
会话类型可以是音频、视频和指引,在WS Play API请求中以1、2和 3传递。
{
"session_type": "guidance",
"genre": "Pop",
"sub_genre": "Pop",
"infused_music": [
{
"id": "1498",
"emotion": "Perform_v1",
"distribution_url": "https://s3.us-west-1.wasabisys.com/dbapp/converted_music/USUM70729755/config_54/08c110a021be67c992dc.m3u8",
"duration": 211.08,
"ISRC": "USUM70729755",
"tags": "",
"genre": "Pop",
"subgenre": "Modern Pop",
"artist_name": "Maroon 5",
"album_title": "Makes Me Wonder",
"title": "Makes Me Wonder",
"explicit": true,
"artwork_URL": "https://s3.us-west-1.wasabisys.com/dbapp/converted_artwork/album/album_2168_artwork.jpg"
},
{
"id": "4019",
"emotion": "Perform_v1",
"distribution_url": "https://s3.us-west-1.wasabisys.com/dbapp/converted_music/USJAY0300079/config_54/6639e93fcab9ea96a174.m3u8",
"duration": 174.804469,
"ISRC": "USJAY0300079",
"tags": "",
"genre": "Pop",
"subgenre": "Modern Pop",
"artist_name": "Maroon 5",
"album_title": "Top Of The Spot 2004",
"title": "Harder To Breathe",
"explicit": true,
"artwork_URL": "https://s3.us-west-1.wasabisys.com/dbapp/converted_artwork/album/album_2321_artwork.jpg"
},
{
"id": "489",
"emotion": "Perform_v1",
"distribution_url": "https://s3.us-west-1.wasabisys.com/dbapp/converted_music/USUG12202492/config_54/5fd2fb2250cbac8acae8.m3u8",
"duration": 75.546213,
"ISRC": "USUG12202492",
"tags": "",
"genre": "Pop",
"subgenre": "Modern Pop",
"artist_name": "Justin Bieber",
"album_title": "I Feel Funny",
"title": "I Feel Funny",
"explicit": true,
"artwork_URL": "https://s3.us-west-1.wasabisys.com/dbapp/converted_artwork/album/album_456_artwork.jpg"
},
{
"id": "17780",
"emotion": "Perform_v1",
"distribution_url": "https://s3.us-west-1.wasabisys.com/dbapp/converted_music/USUM70737444/config_54/8d3f75f38259afd777f6.m3u8",
"duration": 214.826667,
"ISRC": "USUM70737444",
"tags": "Pop",
"genre": "Pop",
"subgenre": "Modern Pop",
"artist_name": "Maroon 5",
"album_title": "Makes Me Wonder",
"title": "Makes Me Wonder (Harry Choo Choo Romero's Bambossa Mix Edit)",
"explicit": true,
"artwork_URL": "https://s3.us-west-1.wasabisys.com/dbapp/converted_artwork/album/album_2168_artwork.jpg"
}
],
"thumbnail_image": "https://s3.us-west-1.wasabisys.com/dbapp/playlists/artwork_0b6608a5-0d71-4052-beaa-e51cbb6eb068.jpg",
"count": 4,
"user_id": "61",
"playlist_id": "0b6608a5-0d71-4052-beaa-e51cbb6eb068",
"starting_emotion": "Perform_v1",
"ending_emotion": "Perform_v1",
"mood": "Perform_v1",
"is_video_present": false,
"music_recommendation": 0.5834436416625977,
"playlist_recommender": "PlaylistContinuator v1.6.3",
"video": "",
"music_visuals": [
],
"guidance": "Breathwork",
"music_guidance": [
{
"index": 0,
"id": "32",
"title": "MOTVT_BREATHWORK_Movement_Elise_1",
"url": "https://s3.us-west-1.wasabisys.com/dbapp/converted_guidance/Ian/MOTVT_BREATHWORK_Movement_Elise_1.m3u8",
"tags": null,
"emotion": "Perform",
"duration": 91.257833
},
{
"index": 4,
"id": "36",
"title": "MOTVT_BREATHWORK_Movement_Elise_5",
"url": "https://s3.us-west-1.wasabisys.com/dbapp/converted_guidance/Ian/MOTVT_BREATHWORK_Movement_Elise_5.m3u8",
"tags": null,
"emotion": "Perform",
"duration": 9.217542
}
]
}
此外,指引的顺序也可以是动态的。
解决方案
- 在需要动态创建数据的请求下添加 JSR223 PreProcessor 作为子组件
- 将以下代码放入Script区域:
``` import groovy.json.JsonSlurper import groovy.json.JsonOutput
def prevResponse = prev.getResponseDataAsString()
def json = new JsonSlurper().parseText(prevResponse)
def infusedMusic = json.infused_music ?: []
def musicGuidance = json.music_guidance ?: []
def guidanceOrder = musicGuidance.collect { it.index as int }
def requestBody = [
guidance_order : guidanceOrder,
session_type : (vars.get("session_type") ?: "3") as int,
session_start_mood : vars.get("session_start_mood") ?: "calm",
session_end_mood : vars.get("session_end_mood") ?: "calm",
genre : json.genre ?: vars.get("genre") ?: "",
sub_genre : json.sub_genre ?: vars.get("sub_genre") ?: "",
playlist_recommender: json.playlist_recommender ?: "",
confidence_score : json.music_recommendation as double,
video_category : "",
guidance_category : json.guidance ?: "",
audio_playlist_urls : infusedMusic.collect { it.distribution_url },
video_playlist_urls : [],
guidance_playlist_urls: musicGuidance.collect { it.url },
artist_name_list : infusedMusic.collect { it.artist_name },
track_id_list: [
iscrs : infusedMusic.collect { it.ISRC },
video_ids : [],
guidance_ids: musicGuidance.collect { it.id as String },
audio_ids : infusedMusic.collect { it.id as String }
],
track_name_list: [
song_titles : infusedMusic.collect { it.title },
video_titles : [],
guidance_titles : musicGuidance.collect { it.title }
],
video_metadata: [
videos_duration : [],
videos_length : [],
videos_start_time: []
],
track_durations: [
audio_durations : infusedMusic.collect { it.duration as double },
video_durations : [],
guidance_durations: musicGuidance.collect { it.duration as double }
],
playlist_id : json.playlist_id ?: "",
playlist_thumbnail_image: json.thumbnail_image ?: ""
]
def bodyStr = JsonOutput.toJson(requestBody)
vars.put("next_request_body", bodyStr)
``
3. 需要使用生成的请求数据时,请使用${next_request_body}`。
更多信息:
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。