Skip to content

Commit

Permalink
chore: support to print test case count in stdout (#589)
Browse files Browse the repository at this point in the history
Co-authored-by: rick <[email protected]>
  • Loading branch information
LinuxSuRen and LinuxSuRen authored Dec 24, 2024
1 parent efb2235 commit 87fe3ee
Show file tree
Hide file tree
Showing 18 changed files with 130 additions and 46 deletions.
10 changes: 7 additions & 3 deletions cmd/run.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2023 API Testing Authors.
Copyright 2023-2024 API Testing Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -163,6 +163,10 @@ func (o *runOption) preRunE(cmd *cobra.Command, args []string) (err error) {
case "", "std":
o.reportWriter = runner.NewResultWriter(writer)
case "pdf":
if o.reportFile == "" {
err = fmt.Errorf("report file is required for pdf report")
return
}
o.reportWriter = runner.NewPDFResultWriter(writer)
case "prometheus":
if o.reportFile == "" {
Expand All @@ -189,7 +193,7 @@ func (o *runOption) preRunE(cmd *cobra.Command, args []string) (err error) {
var swaggerAPI apispec.SwaggerAPI
if o.swaggerURL != "" {
if swaggerAPI.Swagger, err = apispec.ParseURLToSwagger(o.swaggerURL); err == nil {
o.reportWriter.WithAPIConverage(&swaggerAPI)
o.reportWriter.WithAPICoverage(&swaggerAPI)
}
}
}
Expand Down Expand Up @@ -360,7 +364,7 @@ func (o *runOption) runSuite(loader testing.Loader, dataContext map[string]inter
runLogger.Info("run test suite", "name", testSuite.Name, "filter", caseFilter)
for _, testCase := range testSuite.Items {
if caseFilterObj != nil {
if filter, ok := caseFilterObj.([]string); ok && len(filter) > 0{
if filter, ok := caseFilterObj.([]string); ok && len(filter) > 0 {
match := false
for _, ff := range filter {
if strings.Contains(testCase.Name, ff) {
Expand Down
2 changes: 1 addition & 1 deletion pkg/apispec/fake.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type fakeAPISpec struct {
}

// NewFakeAPISpec creates a new instance of fakeAPISpec
func NewFakeAPISpec(apis [][]string) APIConverage {
func NewFakeAPISpec(apis [][]string) APICoverage {
return &fakeAPISpec{apis: apis}
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/apispec/swagger.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2023 API Testing Authors.
Copyright 2023-2024 API Testing Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand All @@ -24,7 +24,7 @@ import (
"strings"
)

type APIConverage interface {
type APICoverage interface {
HaveAPI(path, method string) (exist bool)
APICount() (count int)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/runner/writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ import "github.com/linuxsuren/api-testing/pkg/apispec"
// ReportResultWriter is the interface of the report writer
type ReportResultWriter interface {
Output([]ReportResult) error
WithAPIConverage(apiConverage apispec.APIConverage) ReportResultWriter
WithAPICoverage(apiCoverage apispec.APICoverage) ReportResultWriter
WithResourceUsage([]ResourceUsage) ReportResultWriter
}
2 changes: 1 addition & 1 deletion pkg/runner/writer_github_pr_comment.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ func (w *githubPRCommentWriter) setHeader(req *http.Request) {
req.Header.Set("X-GitHub-Api-Version", "2022-11-28")
}

func (w *githubPRCommentWriter) WithAPIConverage(apiConverage apispec.APIConverage) (r ReportResultWriter) {
func (w *githubPRCommentWriter) WithAPICoverage(apiConverage apispec.APICoverage) (r ReportResultWriter) {
// not have this feature
return
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/runner/writer_github_pr_comment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func TestGithubPRCommentWriter(t *testing.T) {

err = writer.Output(nil)
assert.NoError(t, err)
assert.Nil(t, writer.WithAPIConverage(nil))
assert.Nil(t, writer.WithAPICoverage(nil))
assert.NotNil(t, writer.WithResourceUsage(nil))
})

Expand Down
2 changes: 1 addition & 1 deletion pkg/runner/writer_grpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func getConnection(host string) (conn *grpc.ClientConn, err error) {
}

// WithAPIConverage sets the api coverage
func (w *grpcResultWriter) WithAPIConverage(apiConverage apispec.APIConverage) ReportResultWriter {
func (w *grpcResultWriter) WithAPICoverage(apiConverage apispec.APICoverage) ReportResultWriter {
return w
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/runner/writer_html.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (

type htmlResultWriter struct {
writer io.Writer
apiConverage apispec.APIConverage
apiConverage apispec.APICoverage
}

// NewHTMLResultWriter creates a new htmlResultWriter
Expand All @@ -40,7 +40,7 @@ func (w *htmlResultWriter) Output(result []ReportResult) (err error) {
}

// WithAPIConverage sets the api coverage
func (w *htmlResultWriter) WithAPIConverage(apiConverage apispec.APIConverage) ReportResultWriter {
func (w *htmlResultWriter) WithAPICoverage(apiConverage apispec.APICoverage) ReportResultWriter {
w.apiConverage = apiConverage
return w
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/runner/writer_html_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func TestHTMLResultWriter(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
w := runner.NewHTMLResultWriter(tt.buf)
w.WithAPIConverage(nil)
w.WithAPICoverage(nil)
err := w.Output(tt.results)
assert.NoError(t, err)
assert.Equal(t, tt.expect, tt.buf.String())
Expand Down
2 changes: 1 addition & 1 deletion pkg/runner/writer_http.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func (w *httpResultWriter) Output(result []ReportResult) (err error) {
var defaultTemplate string

// WithAPIConverage sets the api coverage
func (w *httpResultWriter) WithAPIConverage(apiConverage apispec.APIConverage) ReportResultWriter {
func (w *httpResultWriter) WithAPICoverage(apiConverage apispec.APICoverage) ReportResultWriter {
return w
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/runner/writer_json.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (w *jsonResultWriter) Output(result []ReportResult) (err error) {
}

// WithAPIConverage sets the api coverage
func (w *jsonResultWriter) WithAPIConverage(apiConverage apispec.APIConverage) ReportResultWriter {
func (w *jsonResultWriter) WithAPICoverage(apiConverage apispec.APICoverage) ReportResultWriter {
return w
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/runner/writer_json_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import (
func TestJSONResultWriter(t *testing.T) {
buf := new(bytes.Buffer)
writer := runner.NewJSONResultWriter(buf)
writer.WithAPIConverage(nil)
writer.WithAPICoverage(nil)

err := writer.Output([]runner.ReportResult{{
Name: "foo",
Expand Down
4 changes: 2 additions & 2 deletions pkg/runner/writer_markdown.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (

type markdownResultWriter struct {
writer io.Writer
apiConverage apispec.APIConverage
apiConverage apispec.APICoverage
resourceUsage []ResourceUsage
}

Expand Down Expand Up @@ -59,7 +59,7 @@ func (w *markdownResultWriter) Output(result []ReportResult) (err error) {
}

// WithAPIConverage sets the api coverage
func (w *markdownResultWriter) WithAPIConverage(apiConverage apispec.APIConverage) ReportResultWriter {
func (w *markdownResultWriter) WithAPICoverage(apiConverage apispec.APICoverage) ReportResultWriter {
w.apiConverage = apiConverage
return w
}
Expand Down
12 changes: 6 additions & 6 deletions pkg/runner/writer_markdown_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func TestMarkdownWriter(t *testing.T) {
t.Run("short", func(t *testing.T) {
buf := new(bytes.Buffer)
writer := runner.NewMarkdownResultWriter(buf)
writer.WithAPIConverage(nil)
writer.WithAPICoverage(nil)
err := writer.Output(createSlice(sample, 2))
assert.Nil(t, err)
assert.Equal(t, `There are 2 test cases, failed count 0:
Expand All @@ -62,7 +62,7 @@ func TestMarkdownWriter(t *testing.T) {
t.Run("long", func(t *testing.T) {
buf := new(bytes.Buffer)
writer := runner.NewMarkdownResultWriter(buf)
writer.WithAPIConverage(nil)
writer.WithAPICoverage(nil)
err := writer.Output(createSlice(sample, 8))
assert.Nil(t, err)
assert.Equal(t, `There are 8 test cases, failed count 0:
Expand All @@ -86,7 +86,7 @@ func TestMarkdownWriter(t *testing.T) {
t.Run("long, there are error cases", func(t *testing.T) {
buf := new(bytes.Buffer)
writer := runner.NewMarkdownResultWriter(buf)
writer.WithAPIConverage(nil)
writer.WithAPICoverage(nil)
err := writer.Output(append(createSlice(sample, 8), errSample))
assert.Nil(t, err)
assert.Equal(t, `There are 9 test cases, failed count 1:
Expand Down Expand Up @@ -115,7 +115,7 @@ func TestMarkdownWriter(t *testing.T) {
t.Run("with resource usage", func(t *testing.T) {
buf := new(bytes.Buffer)
writer := runner.NewMarkdownResultWriter(buf)
writer.WithAPIConverage(nil)
writer.WithAPICoverage(nil)
writer.WithResourceUsage([]runner.ResourceUsage{{
CPU: 1,
Memory: 1,
Expand All @@ -137,7 +137,7 @@ Resource usage:
t.Run("have error message", func(t *testing.T) {
buf := new(bytes.Buffer)
writer := runner.NewMarkdownResultWriter(buf)
writer.WithAPIConverage(nil)
writer.WithAPICoverage(nil)
result := sample
result.LastErrorMessage = "error happend"
err := writer.Output(createSlice(result, 2))
Expand All @@ -159,7 +159,7 @@ Resource usage:
t.Run("with api converage", func(t *testing.T) {
buf := new(bytes.Buffer)
writer := runner.NewMarkdownResultWriter(buf)
writer.WithAPIConverage(apispec.NewFakeAPISpec([][]string{{
writer.WithAPICoverage(apispec.NewFakeAPISpec([][]string{{
"api", "GET",
}}))
err := writer.Output(createSlice(sample, 2))
Expand Down
30 changes: 18 additions & 12 deletions pkg/runner/writer_pdf.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2023 API Testing Authors.
Copyright 2023-2024 API Testing Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand All @@ -18,9 +18,9 @@ package runner

import (
_ "embed"
"fmt"
"github.com/linuxsuren/api-testing/pkg/logging"

"fmt"
"io"
"strconv"

Expand All @@ -44,15 +44,24 @@ func NewPDFResultWriter(writer io.Writer) ReportResultWriter {

// Output writes the PDF base report to target writer
func (w *pdfResultWriter) Output(result []ReportResult) (err error) {

pdf := gopdf.GoPdf{}
pdf.Start(gopdf.Config{PageSize: *gopdf.PageSizeA4})
writeLogger.Info(findfont.List()[len(findfont.List())-1])
fontPath, err := findfont.Find("DejaVuSerif.ttf")

var fontPath string
fontPath, err = findfont.Find("DejaVuSerif.ttf")
if err != nil {
panic(err)
writeLogger.Error(err, "Failed to find 'ttf'", "path", fontPath)

if len(findfont.List()) == 0 {
err = fmt.Errorf("cannot find font")
writeLogger.Error(err, "No font found")
return
}

fontPath = findfont.List()[0]
}
fmt.Printf("Found 'ttf' in '%s'\n", fontPath)

writeLogger.Info("Found font 'ttf'", "path", fontPath)
err = pdf.AddTTFFont("wts11", fontPath)
if err != nil {
writeLogger.Info(err.Error())
Expand All @@ -65,7 +74,6 @@ func (w *pdfResultWriter) Output(result []ReportResult) (err error) {
}

pdf.AddHeader(func() {

})
pdf.AddFooter(func() {
const X_bias float64 = 101
Expand Down Expand Up @@ -103,16 +111,14 @@ func (w *pdfResultWriter) Output(result []ReportResult) (err error) {
if api.Error != 0 {
pdf.Image("../pkg/runner/data/imgs/warn.jpg", 30, Y_start+line_bias*6-5, nil)
}

}

fmt.Fprint(w.writer, "Report is OK!")
pdf.WritePdf("Report.pdf")
_, err = pdf.WriteTo(w.writer)
return
}

// WithAPIConverage sets the api coverage
func (w *pdfResultWriter) WithAPIConverage(apiConverage apispec.APIConverage) ReportResultWriter {
func (w *pdfResultWriter) WithAPICoverage(apiConverage apispec.APICoverage) ReportResultWriter {
return w
}

Expand Down
69 changes: 69 additions & 0 deletions pkg/runner/writer_pdf_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
Copyright 2024 API Testing Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package runner

import (
"bytes"
"github.com/stretchr/testify/assert"
"io"
"testing"
)

func TestPDF(t *testing.T) {
tests := []struct {
name string
buf io.Writer
results []ReportResult
verify func(t *testing.T)
hasErr bool
}{{
name: "normal",
buf: new(bytes.Buffer),
results: []ReportResult{{
Name: "/api",
API: "/api",
Average: 1,
Max: 1,
Min: 1,
QPS: 10,
Count: 1,
Error: 0,
}},
verify: func(t *testing.T) {

},
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
writer := NewPDFResultWriter(tt.buf)
if !assert.NotNil(t, writer) {
return
}

err := writer.Output(tt.results)
if tt.hasErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
}

tt.verify(t)
writer.WithResourceUsage(nil)
writer.WithAPICoverage(nil)
})
}
}
Loading

0 comments on commit 87fe3ee

Please sign in to comment.