From 1c16df5ab0dfe224429692ce980ccd8fbb0734e6 Mon Sep 17 00:00:00 2001 From: xucong053 Date: Wed, 13 Apr 2022 17:03:49 +0800 Subject: [PATCH] fix: output html report path optimization and failed to extract variables to session while load testing --- .github/workflows/hrp-scaffold.yml | 18 ++++++++++++----- .github/workflows/smoketest.yml | 32 +++++++++++++++++++++++++++--- hrp/boomer.go | 6 +++++- hrp/runner.go | 8 ++++++++ hrp/summary.go | 14 +++++++++---- 5 files changed, 65 insertions(+), 13 deletions(-) diff --git a/.github/workflows/hrp-scaffold.yml b/.github/workflows/hrp-scaffold.yml index 305696ca..872dcd6a 100644 --- a/.github/workflows/hrp-scaffold.yml +++ b/.github/workflows/hrp-scaffold.yml @@ -31,9 +31,11 @@ jobs: run: ./output/hrp startproject demo - name: Run generated demo tests run: ./output/hrp run demo/testcases/ - - name: Run demo in examples + - name: Run API test demo in examples + run: ./output/hrp run examples/demo-with-py-plugin/testcases/demo_with_funplugin.json + - name: Run load test demo in examples run: | - ./output/hrp run examples/demo-with-py-plugin/testcases/demo_with_funplugin.json + ./output/hrp boom examples/demo-with-py-plugin/testcases/demo_with_funplugin.json --spawn-count 10 --spawn-rate 10 --loop-count 10 scaffold-with-go-plugin: strategy: @@ -56,10 +58,14 @@ jobs: run: ./output/hrp startproject demo --go - name: Run generated demo tests run: ./output/hrp run demo/testcases/ - - name: Run demo in examples + - name: Run API test demo in examples run: | go build -o examples/demo-with-go-plugin/debugtalk.bin examples/demo-with-go-plugin/plugin/debugtalk.go ./output/hrp run examples/demo-with-go-plugin/testcases/demo_with_funplugin.json + - name: Run load test demo in examples + run: | + go build -o examples/demo-with-go-plugin/debugtalk.bin examples/demo-with-go-plugin/plugin/debugtalk.go + ./output/hrp boom examples/demo-with-go-plugin/testcases/demo_with_funplugin.json --spawn-count 10 --spawn-rate 10 --loop-count 10 scaffold-without-custom-plugin: strategy: @@ -82,6 +88,8 @@ jobs: run: ./output/hrp startproject demo --ignore-plugin - name: Run generated demo tests run: ./output/hrp run demo/testcases/demo_without_funplugin.json - - name: Run demo in examples + - name: Run API test demo in examples + run: ./output/hrp run examples/demo-without-plugin/testcases/demo_without_funplugin.json + - name: Run load test demo in examples run: | - ./output/hrp run examples/demo-without-plugin/testcases/demo_without_funplugin.json + ./output/hrp boom examples/demo-without-plugin/testcases/demo_without_funplugin.json --spawn-count 10 --spawn-rate 10 --loop-count 10 diff --git a/.github/workflows/smoketest.yml b/.github/workflows/smoketest.yml index 3192312e..1d629d59 100644 --- a/.github/workflows/smoketest.yml +++ b/.github/workflows/smoketest.yml @@ -1,4 +1,4 @@ -name: run smoke tests for httprunner +name: run smoke tests on: push: @@ -10,9 +10,9 @@ env: DISABLE_GA: "true" jobs: - smoke-test: + smoke-test-httprunner: - name: smoketest - ${{ matrix.python-version }} on ${{ matrix.os }} + name: smoketest - httprunner - ${{ matrix.python-version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -47,3 +47,29 @@ jobs: - name: Run smoketest - httpbin run: | poetry run hrun examples/httpbin/ + + smoke-test-hrp: + name: smoketest - hrp - ${{ matrix.go-version }} on ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + go-version: + - 1.17.x + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + - name: Checkout code + uses: actions/checkout@v2 + - name: Build hrp binary + run: make build + - name: Run smoketest - postman echo + run: ./output/hrp boom examples/hrp/postman-echo.json --spawn-count 10 --spawn-rate 10 --loop-count 10 + - name: Run smoketest - data driven with parameterize mechanism + run: ./output/hrp boom examples/hrp/parameters_test.json --spawn-count 10 --spawn-rate 10 --loop-count 10 + - name: Run smoketest - rendezvous + run: | + ./output/hrp boom examples/hrp/rendezvous_test.json --spawn-count 10 --spawn-rate 10 --loop-count 10 diff --git a/hrp/boomer.go b/hrp/boomer.go index 2a7e9621..8a59defb 100644 --- a/hrp/boomer.go +++ b/hrp/boomer.go @@ -125,7 +125,7 @@ func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rend transactionSuccess = false if b.hrpRunner.failfast { - log.Error().Msg("abort running due to failfast setting") + log.Error().Err(err).Msg("abort running due to failfast setting") break } log.Warn().Err(err).Msg("run step failed, continue next step") @@ -148,6 +148,10 @@ func (b *HRPBoomer) convertBoomerTask(testcase *TestCase, rendezvousList []*Rend } else { // request or testcase step b.RecordSuccess(string(step.Type()), step.Name(), stepResult.Elapsed, stepResult.ContentSize) + // update extracted variables + for k, v := range stepResult.ExportVars { + sessionRunner.sessionVariables[k] = v + } } } endTime := time.Now() diff --git a/hrp/runner.go b/hrp/runner.go index 5037ecad..2e751fd6 100644 --- a/hrp/runner.go +++ b/hrp/runner.go @@ -182,6 +182,14 @@ func (r *HRPRunner) Run(testcases ...ITestCase) error { } s.Time.Duration = time.Since(s.Time.StartAt).Seconds() + // update the report output path + pluginPath, err := locatePlugin(testcases[0].GetPath()) + if err == nil { + outputPath, _ := filepath.Split(pluginPath) + summaryPath = filepath.Join(outputPath, summaryPath) + reportPath = filepath.Join(outputPath, reportPath) + } + // save summary if r.saveTests { dir, _ := filepath.Split(summaryPath) diff --git a/hrp/summary.go b/hrp/summary.go index 6d6d8c27..569c79a6 100644 --- a/hrp/summary.go +++ b/hrp/summary.go @@ -61,7 +61,8 @@ func (s *Summary) genHTMLReport() error { if err != nil { return err } - file, err := os.OpenFile(fmt.Sprintf(reportPath, s.Time.StartAt.Unix()), os.O_WRONLY|os.O_CREATE, 0666) + reportPath := fmt.Sprintf(reportPath, s.Time.StartAt.Unix()) + file, err := os.OpenFile(reportPath, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { log.Error().Err(err).Msg("open file failed") return err @@ -75,15 +76,20 @@ func (s *Summary) genHTMLReport() error { return err } err = writer.Flush() + if err == nil { + log.Info().Str("path", reportPath).Msg("generate HTML report") + } else { + log.Error().Str("path", reportPath).Msg("generate HTML report failed") + } return err } //go:embed internal/scaffold/templates/report/template.html var reportTemplate string -const ( - reportPath string = "reports/report-%v.html" - summaryPath string = "reports/summary-%v.json" +var ( + reportPath = "reports/report-%v.html" + summaryPath = "reports/summary-%v.json" ) type Stat struct {