@@ -61,7 +61,6 @@ func TestBenchSpyWithLokiQuery(t *testing.T) {
6161 currentReport .QueryExecutors = append (currentReport .QueryExecutors , lokiQueryExecutor )
6262
6363 gen .Run (true )
64- currentReport .TestEnd = time .Now ()
6564
6665 fetchCtx , cancelFn := context .WithTimeout (context .Background (), 60 * time .Second )
6766 defer cancelFn ()
@@ -72,16 +71,14 @@ func TestBenchSpyWithLokiQuery(t *testing.T) {
7271 // path, storeErr := currentReport.Store()
7372 // require.NoError(t, storeErr, "failed to store current report", path)
7473
74+ // this is only needed, because we are using a non-standard directory
75+ // otherwise, the Load method would be able to find the file
7576 previousReport := benchspy.StandardReport {
76- BasicData : benchspy.BasicData {
77- TestName : t .Name (),
78- CommitOrTag : "e7fc5826a572c09f8b93df3b9f674113372ce924" ,
79- },
8077 LocalStorage : benchspy.LocalStorage {
8178 Directory : "test_performance_reports" ,
8279 },
8380 }
84- loadErr := previousReport .Load ()
81+ loadErr := previousReport .Load (t . Name (), "e7fc5826a572c09f8b93df3b9f674113372ce924" )
8582 require .NoError (t , loadErr , "failed to load previous report" )
8683
8784 isComparableErrs := previousReport .IsComparable (& currentReport )
@@ -110,7 +107,7 @@ func TestBenchSpyWithLokiQuery(t *testing.T) {
110107 require .NoError (t , err , "failed to parse float" )
111108 previousSum += asFloat
112109 }
113- previousAverage := currentSum / float64 (len (previousReport .QueryExecutors [0 ].Results ()["vu_over_time" ]))
110+ previousAverage := previousSum / float64 (len (previousReport .QueryExecutors [0 ].Results ()["vu_over_time" ]))
114111
115112 require .Equal (t , currentAverage , previousAverage , "vu_over_time averages are not the same" )
116113}
@@ -167,16 +164,14 @@ func TestBenchSpyWithTwoLokiQueries(t *testing.T) {
167164 // path, storeErr := currentReport.Store()
168165 // require.NoError(t, storeErr, "failed to store current report", path)
169166
167+ // this is only needed, because we are using a non-standard directory
168+ // otherwise, the Load method would be able to find the file
170169 previousReport := benchspy.StandardReport {
171- BasicData : benchspy.BasicData {
172- TestName : t .Name (),
173- CommitOrTag : "e7fc5826a572c09f8b93df3b9f674113372ce924" ,
174- },
175170 LocalStorage : benchspy.LocalStorage {
176171 Directory : "test_performance_reports" ,
177172 },
178173 }
179- loadErr := previousReport .Load ()
174+ loadErr := previousReport .Load (t . Name (), "e7fc5826a572c09f8b93df3b9f674113372ce924" )
180175 require .NoError (t , loadErr , "failed to load previous report" )
181176
182177 isComparableErrs := previousReport .IsComparable (& currentReport )
@@ -235,3 +230,90 @@ func TestBenchSpyWithTwoLokiQueries(t *testing.T) {
235230 diffPrecentage := (currentRespAverage - previousRespAverage ) / previousRespAverage * 100
236231 require .LessOrEqual (t , math .Abs (diffPrecentage ), 1.0 , "responses_over_time averages are more than 1% different" , fmt .Sprintf ("%.4f" , diffPrecentage ))
237232}
233+
234+ func TestBenchSpyWithStandardLokiMetrics (t * testing.T ) {
235+ label := "benchspy-std"
236+
237+ gen , err := wasp .NewGenerator (& wasp.Config {
238+ T : t ,
239+ LokiConfig : wasp .NewEnvLokiConfig (),
240+ GenName : "vu" ,
241+ Labels : map [string ]string {
242+ "branch" : label ,
243+ "commit" : label ,
244+ },
245+ CallTimeout : 100 * time .Millisecond ,
246+ LoadType : wasp .VU ,
247+ Schedule : wasp .CombineAndRepeat (
248+ 2 ,
249+ wasp .Steps (10 , 1 , 10 , 10 * time .Second ),
250+ wasp .Plain (30 , 15 * time .Second ),
251+ wasp .Steps (20 , - 1 , 10 , 5 * time .Second ),
252+ ),
253+ VU : wasp .NewMockVU (& wasp.MockVirtualUserConfig {
254+ CallSleep : 50 * time .Millisecond ,
255+ }),
256+ })
257+ require .NoError (t , err )
258+
259+ gen .Run (true )
260+
261+ currentReport , err := benchspy .NewStandardReport ("e7fc5826a572c09f8b93df3b9f674113372ce925" , benchspy .ExecutionEnvironment_Docker , gen )
262+ require .NoError (t , err )
263+
264+ fetchCtx , cancelFn := context .WithTimeout (context .Background (), 60 * time .Second )
265+ defer cancelFn ()
266+
267+ fetchErr := currentReport .FetchData (fetchCtx )
268+ require .NoError (t , fetchErr , "failed to fetch current report" )
269+
270+ // path, storeErr := currentReport.Store()
271+ // require.NoError(t, storeErr, "failed to store current report", path)
272+
273+ // this is only needed, because we are using a non-standard directory
274+ // otherwise, the Load method would be able to find the file
275+ previousReport := benchspy.StandardReport {
276+ LocalStorage : benchspy.LocalStorage {
277+ Directory : "test_performance_reports" ,
278+ },
279+ }
280+ loadErr := previousReport .Load (t .Name (), "e7fc5826a572c09f8b93df3b9f674113372ce924" )
281+ require .NoError (t , loadErr , "failed to load previous report" )
282+
283+ isComparableErrs := previousReport .IsComparable (currentReport )
284+ require .Empty (t , isComparableErrs , "reports were not comparable" , isComparableErrs )
285+
286+ var compareAverages = func (metricName benchspy.StandardMetric ) {
287+ require .NotEmpty (t , currentReport .QueryExecutors [0 ].Results ()[string (metricName )], "%s results were missing from current report" , string (metricName ))
288+ require .NotEmpty (t , previousReport .QueryExecutors [0 ].Results ()[string (metricName )], "%s results were missing from previous report" , string (metricName ))
289+ require .Equal (t , len (currentReport .QueryExecutors [0 ].Results ()[string (metricName )]), len (previousReport .QueryExecutors [0 ].Results ()[string (metricName )]), "%s results are not the same length" , string (metricName ))
290+
291+ var currentAvgSum float64
292+ for _ , value := range currentReport .QueryExecutors [0 ].Results ()[string (metricName )] {
293+ asFloat , err := strconv .ParseFloat (value , 64 )
294+ require .NoError (t , err , "failed to parse float" )
295+ currentAvgSum += asFloat
296+ }
297+ currentAvgAverage := currentAvgSum / float64 (len (currentReport .QueryExecutors [0 ].Results ()[string (metricName )]))
298+
299+ var previousAvgSum float64
300+ for _ , value := range previousReport .QueryExecutors [0 ].Results ()[string (metricName )] {
301+ asFloat , err := strconv .ParseFloat (value , 64 )
302+ require .NoError (t , err , "failed to parse float" )
303+ previousAvgSum += asFloat
304+ }
305+ previousAvgAverage := previousAvgSum / float64 (len (previousReport .QueryExecutors [0 ].Results ()[string (metricName )]))
306+
307+ var diffPrecentage float64
308+ if previousAvgAverage != 0 {
309+ diffPrecentage = (currentAvgAverage - previousAvgAverage ) / previousAvgAverage * 100
310+ } else {
311+ diffPrecentage = currentAvgAverage * 100
312+ }
313+ require .LessOrEqual (t , math .Abs (diffPrecentage ), 1.0 , "%s averages are more than 1% different" , string (metricName ), fmt .Sprintf ("%.4f" , diffPrecentage ))
314+ }
315+
316+ compareAverages (benchspy .AverageLatency )
317+ compareAverages (benchspy .Percentile95Latency )
318+ compareAverages (benchspy .ErrorRate )
319+ }
0 commit comments