@@ -3,7 +3,7 @@ use crate::config::{Config, Scenario};
33use crate :: metrics:: { MetricsCollector , RequestResult } ;
44use anyhow:: Result ;
55use chrono:: Utc ;
6- use jsonpath_rust:: JsonPathFinder ;
6+ use jsonpath_rust:: JsonPath ;
77use std:: collections:: { HashMap , HashSet } ;
88use std:: sync:: Arc ;
99use std:: time:: Instant ;
@@ -261,39 +261,23 @@ impl Executor {
261261 ) {
262262 for ( var_name, json_path) in & scenario. extract {
263263 match serde_json:: from_str :: < serde_json:: Value > ( body) {
264- Ok ( _json) => {
265- match JsonPathFinder :: from_str ( body, json_path) {
266- Ok ( finder) => {
267- let result = finder. find ( ) ;
268- if let serde_json:: Value :: Array ( arr) = result {
269- if let Some ( value) = arr. first ( ) {
270- let extracted = match value {
271- serde_json:: Value :: String ( s) => s. clone ( ) ,
272- serde_json:: Value :: Number ( n) => n. to_string ( ) ,
273- serde_json:: Value :: Bool ( b) => b. to_string ( ) ,
274- _ => value. to_string ( ) ,
275- } ;
276-
277- debug ! ( "Extracted variable '{}' = '{}'" , var_name, extracted) ;
278- variables. insert ( var_name. clone ( ) , extracted) ;
279- }
280- } else if result != serde_json:: Value :: Null {
281- // Single value result
282- let extracted = match result {
283- serde_json:: Value :: String ( s) => s,
284- serde_json:: Value :: Number ( n) => n. to_string ( ) ,
285- serde_json:: Value :: Bool ( b) => b. to_string ( ) ,
286- _ => result. to_string ( ) ,
287- } ;
288- debug ! ( "Extracted variable '{}' = '{}'" , var_name, extracted) ;
289- variables. insert ( var_name. clone ( ) , extracted) ;
290- }
291- }
292- Err ( e) => {
293- warn ! ( "JSONPath error for '{}': {}" , json_path, e) ;
264+ Ok ( json) => match json. query ( json_path) {
265+ Ok ( results) => {
266+ if let Some ( value) = results. first ( ) {
267+ let extracted = match value {
268+ serde_json:: Value :: String ( s) => s. clone ( ) ,
269+ serde_json:: Value :: Number ( n) => n. to_string ( ) ,
270+ serde_json:: Value :: Bool ( b) => b. to_string ( ) ,
271+ _ => value. to_string ( ) ,
272+ } ;
273+ debug ! ( "Extracted variable '{}' = '{}'" , var_name, extracted) ;
274+ variables. insert ( var_name. clone ( ) , extracted) ;
294275 }
295276 }
296- }
277+ Err ( e) => {
278+ warn ! ( "JSONPath error for '{}': {}" , json_path, e) ;
279+ }
280+ } ,
297281 Err ( e) => {
298282 warn ! ( "Failed to parse JSON response: {}" , e) ;
299283 }
0 commit comments