diff --git a/hrp/cmd/convert.go b/hrp/cmd/convert.go index 51f25a9e..5ec00480 100644 --- a/hrp/cmd/convert.go +++ b/hrp/cmd/convert.go @@ -61,7 +61,7 @@ func convertRun(cmd *cobra.Command, args []string) error { outputType = convert.OutputTypePyTest packages := []string{ - fmt.Sprintf("httprunner==%s", version.VERSION), + fmt.Sprintf("httprunner==%s", version.HttpRunnerMinimumVersion), } _, err := myexec.EnsurePython3Venv(venv, packages...) if err != nil { diff --git a/hrp/cmd/pytest.go b/hrp/cmd/pytest.go index 0ebfaa69..55538e78 100644 --- a/hrp/cmd/pytest.go +++ b/hrp/cmd/pytest.go @@ -21,7 +21,7 @@ var pytestCmd = &cobra.Command{ DisableFlagParsing: true, // allow to pass any args to pytest RunE: func(cmd *cobra.Command, args []string) error { packages := []string{ - fmt.Sprintf("httprunner==%s", version.VERSION), + fmt.Sprintf("httprunner==%s", version.HttpRunnerMinimumVersion), } _, err := myexec.EnsurePython3Venv(venv, packages...) if err != nil { diff --git a/hrp/internal/dial/traceroute_windows.go b/hrp/internal/dial/traceroute_windows.go index 7aa0581c..b80d199e 100644 --- a/hrp/internal/dial/traceroute_windows.go +++ b/hrp/internal/dial/traceroute_windows.go @@ -17,6 +17,7 @@ import ( "github.com/rs/zerolog/log" "github.com/httprunner/httprunner/v4/hrp/internal/builtin" + "github.com/httprunner/httprunner/v4/hrp/internal/myexec" ) var ( diff --git a/hrp/internal/myexec/cmd_windows.go b/hrp/internal/myexec/cmd_windows.go index 6844058f..3e202002 100644 --- a/hrp/internal/myexec/cmd_windows.go +++ b/hrp/internal/myexec/cmd_windows.go @@ -3,9 +3,12 @@ package myexec import ( + "fmt" "os" "os/exec" "path/filepath" + "strconv" + "strings" "syscall" "github.com/pkg/errors" diff --git a/hrp/internal/scaffold/main.go b/hrp/internal/scaffold/main.go index 28b2c851..13a81696 100644 --- a/hrp/internal/scaffold/main.go +++ b/hrp/internal/scaffold/main.go @@ -207,7 +207,7 @@ func createPythonPlugin(projectName, venv string) error { packages := []string{ fmt.Sprintf("funppy==%s", fungo.Version), - fmt.Sprintf("httprunner==%s", version.VERSION), + fmt.Sprintf("httprunner==%s", version.HttpRunnerMinimumVersion), } _, err = myexec.EnsurePython3Venv(venv, packages...) if err != nil { diff --git a/hrp/internal/version/init.go b/hrp/internal/version/init.go index 4887463b..d1f1513e 100644 --- a/hrp/internal/version/init.go +++ b/hrp/internal/version/init.go @@ -6,3 +6,6 @@ import ( //go:embed VERSION var VERSION string + +// httprunner python version +const HttpRunnerMinimumVersion = "v4.2.0" diff --git a/hrp/pkg/httpstat/main.go b/hrp/pkg/httpstat/main.go index 49242193..8688bf25 100644 --- a/hrp/pkg/httpstat/main.go +++ b/hrp/pkg/httpstat/main.go @@ -11,6 +11,7 @@ import ( "net/http/httptrace" "strconv" "strings" + "sync" "time" "github.com/fatih/color" @@ -100,6 +101,8 @@ type Stat struct { // connected network info network, addr string + + mux *sync.RWMutex // avoid data race } // Finish sets the time when reading response is done. @@ -176,6 +179,7 @@ func (s *Stat) Print() { // WithHTTPStat is a wrapper of httptrace.WithClientTrace. // It records the time of each httptrace hooks. func WithHTTPStat(req *http.Request, s *Stat) context.Context { + s.mux = new(sync.RWMutex) s.schema = req.URL.Scheme return httptrace.WithClientTrace(req.Context(), &httptrace.ClientTrace{ DNSStart: func(i httptrace.DNSStartInfo) { @@ -228,6 +232,8 @@ func WithHTTPStat(req *http.Request, s *Stat) context.Context { }, WroteRequest: func(info httptrace.WroteRequestInfo) { + s.mux.Lock() + defer s.mux.Unlock() now := time.Now() s.serverStart = now @@ -259,6 +265,8 @@ func WithHTTPStat(req *http.Request, s *Stat) context.Context { }, GotFirstResponseByte: func() { + s.mux.Lock() + defer s.mux.Unlock() s.serverDone = time.Now() s.ServerProcessing = s.serverDone.Sub(s.serverStart) s.StartTransfer = s.serverDone.Sub(s.dnsStart)