diff --git a/.gitignore b/.gitignore index 6df9c8e29..7ad3331b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ bin/ .idea/ +coverage.out diff --git a/Makefile b/Makefile index 0537c8252..8be683d3f 100644 --- a/Makefile +++ b/Makefile @@ -6,4 +6,5 @@ build: copy: build sudo cp bin/atest /usr/local/bin/ test: - go test ./... -cover + go test ./... -cover -v -coverprofile=coverage.out + go tool cover -func=coverage.out diff --git a/pkg/runner/reporter_memory.go b/pkg/runner/reporter_memory.go index 13dce18b6..b9d29dfe4 100644 --- a/pkg/runner/reporter_memory.go +++ b/pkg/runner/reporter_memory.go @@ -20,6 +20,8 @@ func NewMemoryTestReporter() TestReporter { type ReportResultWithTotal struct { ReportResult Total time.Duration + First time.Time + Last time.Time } // PutRecord puts the record to memory @@ -50,6 +52,13 @@ func (r *memoryTestReporter) ExportAllReportResults() (result ReportResultSlice, item.Error += record.ErrorCount() item.Total += duration item.Count += 1 + + if record.EndTime.After(item.Last) { + item.Last = record.EndTime + } + if record.BeginTime.Before(item.First) { + item.First = record.BeginTime + } } else { resultWithTotal[api] = &ReportResultWithTotal{ ReportResult: ReportResult{ @@ -59,6 +68,8 @@ func (r *memoryTestReporter) ExportAllReportResults() (result ReportResultSlice, Min: duration, Error: record.ErrorCount(), }, + First: record.BeginTime, + Last: record.EndTime, Total: duration, } } @@ -66,6 +77,9 @@ func (r *memoryTestReporter) ExportAllReportResults() (result ReportResultSlice, for _, r := range resultWithTotal { r.Average = r.Total / time.Duration(r.Count) + if duration := int(r.Last.Sub(r.First).Seconds()); duration > 0 { + r.QPS = r.Count / duration + } result = append(result, r.ReportResult) } diff --git a/pkg/runner/reporter_memory_test.go b/pkg/runner/reporter_memory_test.go index 333f2c593..f78e8e0a3 100644 --- a/pkg/runner/reporter_memory_test.go +++ b/pkg/runner/reporter_memory_test.go @@ -69,6 +69,7 @@ func TestExportAllReportResults(t *testing.T) { Average: time.Second, Max: time.Second, Min: time.Second, + QPS: 1, Count: 1, Error: 0, }}, diff --git a/pkg/runner/simple.go b/pkg/runner/simple.go index 7e9348e18..ba090154f 100644 --- a/pkg/runner/simple.go +++ b/pkg/runner/simple.go @@ -64,6 +64,7 @@ type ReportResult struct { Average time.Duration Max time.Duration Min time.Duration + QPS int Error int } diff --git a/pkg/runner/writer_std.go b/pkg/runner/writer_std.go index f5013f490..da5a0522d 100644 --- a/pkg/runner/writer_std.go +++ b/pkg/runner/writer_std.go @@ -24,10 +24,10 @@ func NewDiscardResultWriter() ReportResultWriter { // Output writer the report to target writer func (w *stdResultWriter) Output(result []ReportResult) error { - fmt.Fprintf(w.writer, "API Average Max Min Count Error\n") + fmt.Fprintf(w.writer, "API Average Max Min QPS Count Error\n") for _, r := range result { - fmt.Fprintf(w.writer, "%s %v %v %v %d %d\n", r.API, r.Average, r.Max, - r.Min, r.Count, r.Error) + fmt.Fprintf(w.writer, "%s %v %v %v %d %d %d\n", r.API, r.Average, r.Max, + r.Min, r.QPS, r.Count, r.Error) } return nil } diff --git a/pkg/runner/writer_std_test.go b/pkg/runner/writer_std_test.go index 9bc58125f..5701b77d7 100644 --- a/pkg/runner/writer_std_test.go +++ b/pkg/runner/writer_std_test.go @@ -45,7 +45,7 @@ func TestNewStdResultWriter(t *testing.T) { name: "result is nil", buf: new(bytes.Buffer), results: nil, - expect: `API Average Max Min Count Error + expect: `API Average Max Min QPS Count Error `, }, { name: "have one item", @@ -55,11 +55,12 @@ func TestNewStdResultWriter(t *testing.T) { Average: 1, Max: 1, Min: 1, + QPS: 10, Count: 1, Error: 0, }}, - expect: `API Average Max Min Count Error -api 1ns 1ns 1ns 1 0 + expect: `API Average Max Min QPS Count Error +api 1ns 1ns 1ns 10 1 0 `, }} for _, tt := range tests {