From 61c34bfd16953e5e056a2fa83fdd4ccb394facd3 Mon Sep 17 00:00:00 2001 From: machongwei Date: Wed, 10 Aug 2022 21:39:15 +0800 Subject: [PATCH 1/7] feat: hrp boom support set run time --- hrp/boomer.go | 2 ++ hrp/cmd/boom.go | 2 ++ hrp/internal/boomer/boomer.go | 15 +++++++++++++++ hrp/internal/boomer/runner.go | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+) diff --git a/hrp/boomer.go b/hrp/boomer.go index c8cd9349..81408432 100644 --- a/hrp/boomer.go +++ b/hrp/boomer.go @@ -66,6 +66,7 @@ func (b *HRPBoomer) InitBoomer() { } b.SetSpawnCount(b.GetProfile().SpawnCount) b.SetSpawnRate(b.GetProfile().SpawnRate) + b.SetRunTime(b.GetProfile().RunTime) if b.GetProfile().LoopCount > 0 { b.SetLoopCount(b.GetProfile().LoopCount) } @@ -232,6 +233,7 @@ func (b *HRPBoomer) rebalanceBoomer(profile *boomer.Profile) { b.SetProfile(profile) b.SetSpawnCount(b.GetProfile().SpawnCount) b.SetSpawnRate(b.GetProfile().SpawnRate) + b.SetRunTime(b.GetProfile().RunTime) b.GetRebalanceChan() <- true log.Info().Interface("profile", profile).Msg("rebalance tasks successful") } diff --git a/hrp/cmd/boom.go b/hrp/cmd/boom.go index 7a267b4d..afe10253 100644 --- a/hrp/cmd/boom.go +++ b/hrp/cmd/boom.go @@ -67,6 +67,7 @@ var boomCmd = &cobra.Command{ hrpBoomer.SetExpectWorkers(boomArgs.expectWorkers, boomArgs.expectWorkersMaxWait) hrpBoomer.SetSpawnCount(boomArgs.SpawnCount) hrpBoomer.SetSpawnRate(boomArgs.SpawnRate) + hrpBoomer.SetRunTime(boomArgs.RunTime) } if boomArgs.autoStart { hrpBoomer.InitBoomer() @@ -116,6 +117,7 @@ func init() { boomCmd.Flags().StringVar(&boomArgs.RequestIncreaseRate, "request-increase-rate", "-1", "Request increase rate, disabled by default.") boomCmd.Flags().Int64Var(&boomArgs.SpawnCount, "spawn-count", 1, "The number of users to spawn for load testing") boomCmd.Flags().Float64Var(&boomArgs.SpawnRate, "spawn-rate", 1, "The rate for spawning users") + boomCmd.Flags().Int64Var(&boomArgs.RunTime, "run-time", 0, "Stop after the specified amount of time(s), Only used --autostart. Defaults to run forever.") boomCmd.Flags().Int64Var(&boomArgs.LoopCount, "loop-count", -1, "The specify running cycles for load testing") boomCmd.Flags().StringVar(&boomArgs.MemoryProfile, "mem-profile", "", "Enable memory profiling.") boomCmd.Flags().DurationVar(&boomArgs.MemoryProfileDuration, "mem-profile-duration", 30*time.Second, "Memory profile duration.") diff --git a/hrp/internal/boomer/boomer.go b/hrp/internal/boomer/boomer.go index da7ac054..6c700229 100644 --- a/hrp/internal/boomer/boomer.go +++ b/hrp/internal/boomer/boomer.go @@ -50,6 +50,7 @@ type Boomer struct { type Profile struct { SpawnCount int64 `json:"spawn-count,omitempty" yaml:"spawn-count,omitempty" mapstructure:"spawn-count,omitempty"` SpawnRate float64 `json:"spawn-rate,omitempty" yaml:"spawn-rate,omitempty" mapstructure:"spawn-rate,omitempty"` + RunTime int64 `json:"run-time,omitempty" yaml:"run-time,omitempty" mapstructure:"run-time,omitempty"` MaxRPS int64 `json:"max-rps,omitempty" yaml:"max-rps,omitempty" mapstructure:"max-rps,omitempty"` LoopCount int64 `json:"loop-count,omitempty" yaml:"loop-count,omitempty" mapstructure:"loop-count,omitempty"` RequestIncreaseRate string `json:"request-increase-rate,omitempty" yaml:"request-increase-rate,omitempty" mapstructure:"request-increase-rate,omitempty"` @@ -251,6 +252,18 @@ func (b *Boomer) SetSpawnRate(spawnRate float64) { } } +// SetRunTime sets run time +func (b *Boomer) SetRunTime(spawnRate int64) { + switch b.mode { + case DistributedMasterMode: + b.masterRunner.setRunTime(spawnRate) + case DistributedWorkerMode: + b.workerRunner.setRunTime(spawnRate) + default: + b.localRunner.setRunTime(spawnRate) + } +} + // SetExpectWorkers sets expect workers while load testing func (b *Boomer) SetExpectWorkers(expectWorkers int, expectWorkersMaxWait int) { b.masterRunner.setExpectWorkers(expectWorkers, expectWorkersMaxWait) @@ -471,6 +484,7 @@ func (b *Boomer) Start(Args *Profile) error { } b.SetSpawnCount(Args.SpawnCount) b.SetSpawnRate(Args.SpawnRate) + b.SetRunTime(Args.RunTime) b.SetProfile(Args) err := b.masterRunner.start() return err @@ -483,6 +497,7 @@ func (b *Boomer) ReBalance(Args *Profile) error { } b.SetSpawnCount(Args.SpawnCount) b.SetSpawnRate(Args.SpawnRate) + b.SetRunTime(Args.RunTime) b.SetProfile(Args) err := b.masterRunner.rebalance() if err != nil { diff --git a/hrp/internal/boomer/runner.go b/hrp/internal/boomer/runner.go index 503ffbaa..43c5fcfb 100644 --- a/hrp/internal/boomer/runner.go +++ b/hrp/internal/boomer/runner.go @@ -195,6 +195,7 @@ type runner struct { spawnCount int64 // target clients to spawn spawnRate float64 + runTime int64 controller *Controller loop *Loop // specify loop count for testcase, count = loopCount * spawnCount @@ -238,6 +239,20 @@ func (r *runner) getSpawnRate() float64 { return r.spawnRate } +func (r *runner) setRunTime(runTime int64) { + r.mutex.Lock() + defer r.mutex.Unlock() + if runTime > 0 { + r.runTime = time.Now().Unix() + runTime + } +} + +func (r *runner) getRunTime() int64 { + r.mutex.RLock() + defer r.mutex.RUnlock() + return r.runTime +} + func (r *runner) getSpawnCount() int64 { return atomic.LoadInt64(&r.spawnCount) } @@ -364,6 +379,15 @@ func (r *runner) reset() { r.reportedChan = make(chan bool) } +func (r *runner) runTimeCheck(runTime int64) { + for range time.Tick(time.Second * 3) { + nowTime := time.Now().Unix() + if nowTime > runTime { + r.stop() + } + } +} + func (r *runner) spawnWorkers(spawnCount int64, spawnRate float64, quit chan bool, spawnCompleteFunc func()) { r.updateState(StateSpawning) log.Info(). @@ -622,6 +646,11 @@ func (r *localRunner) start() { // output setup r.outputOnStart() + runTime := r.getRunTime() + if runTime != 0 { + go r.runTimeCheck(runTime) + } + go r.spawnWorkers(r.getSpawnCount(), r.getSpawnRate(), r.stoppingChan, nil) defer func() { @@ -912,6 +941,11 @@ func (r *workerRunner) start() { r.outputOnStart() + runTime := r.getRunTime() + if runTime != 0 { + go r.runTimeCheck(runTime) + } + go r.spawnWorkers(r.getSpawnCount(), r.getSpawnRate(), r.stoppingChan, r.spawnComplete) defer func() { From a2352d627f0df5f461fdf7f50da91a35b65df473 Mon Sep 17 00:00:00 2001 From: machongwei Date: Wed, 10 Aug 2022 21:59:16 +0800 Subject: [PATCH 2/7] feat: hrp boom support set run time --- hrp/internal/boomer/boomer.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hrp/internal/boomer/boomer.go b/hrp/internal/boomer/boomer.go index 6c700229..58b8f56c 100644 --- a/hrp/internal/boomer/boomer.go +++ b/hrp/internal/boomer/boomer.go @@ -253,14 +253,14 @@ func (b *Boomer) SetSpawnRate(spawnRate float64) { } // SetRunTime sets run time -func (b *Boomer) SetRunTime(spawnRate int64) { +func (b *Boomer) SetRunTime(runTime int64) { switch b.mode { case DistributedMasterMode: - b.masterRunner.setRunTime(spawnRate) + b.masterRunner.setRunTime(runTime) case DistributedWorkerMode: - b.workerRunner.setRunTime(spawnRate) + b.workerRunner.setRunTime(runTime) default: - b.localRunner.setRunTime(spawnRate) + b.localRunner.setRunTime(runTime) } } From 8ae5ba81bca7f583de78e517049210761657b151 Mon Sep 17 00:00:00 2001 From: machongwei Date: Wed, 10 Aug 2022 22:03:24 +0800 Subject: [PATCH 3/7] feat: hrp boom support set run time --- hrp/internal/boomer/runner.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/hrp/internal/boomer/runner.go b/hrp/internal/boomer/runner.go index 43c5fcfb..fce9fa83 100644 --- a/hrp/internal/boomer/runner.go +++ b/hrp/internal/boomer/runner.go @@ -380,10 +380,15 @@ func (r *runner) reset() { } func (r *runner) runTimeCheck(runTime int64) { + if runTime <= 0 { + return + } + for range time.Tick(time.Second * 3) { nowTime := time.Now().Unix() if nowTime > runTime { r.stop() + return } } } @@ -646,10 +651,7 @@ func (r *localRunner) start() { // output setup r.outputOnStart() - runTime := r.getRunTime() - if runTime != 0 { - go r.runTimeCheck(runTime) - } + go r.runTimeCheck(r.getRunTime()) go r.spawnWorkers(r.getSpawnCount(), r.getSpawnRate(), r.stoppingChan, nil) @@ -941,10 +943,7 @@ func (r *workerRunner) start() { r.outputOnStart() - runTime := r.getRunTime() - if runTime != 0 { - go r.runTimeCheck(runTime) - } + go r.runTimeCheck(r.getRunTime()) go r.spawnWorkers(r.getSpawnCount(), r.getSpawnRate(), r.stoppingChan, r.spawnComplete) From e072bc9626e19d320025b60ea724992400b8bdd4 Mon Sep 17 00:00:00 2001 From: machongwei Date: Thu, 18 Aug 2022 20:09:46 +0800 Subject: [PATCH 4/7] perf: hrp boom run time related code optimization --- hrp/internal/boomer/runner.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/hrp/internal/boomer/runner.go b/hrp/internal/boomer/runner.go index fce9fa83..4a3d71ef 100644 --- a/hrp/internal/boomer/runner.go +++ b/hrp/internal/boomer/runner.go @@ -240,17 +240,11 @@ func (r *runner) getSpawnRate() float64 { } func (r *runner) setRunTime(runTime int64) { - r.mutex.Lock() - defer r.mutex.Unlock() - if runTime > 0 { - r.runTime = time.Now().Unix() + runTime - } + atomic.StoreInt64(&r.runTime, time.Now().Unix()+runTime) } func (r *runner) getRunTime() int64 { - r.mutex.RLock() - defer r.mutex.RUnlock() - return r.runTime + return atomic.LoadInt64(&r.runTime) } func (r *runner) getSpawnCount() int64 { @@ -384,11 +378,17 @@ func (r *runner) runTimeCheck(runTime int64) { return } - for range time.Tick(time.Second * 3) { - nowTime := time.Now().Unix() - if nowTime > runTime { - r.stop() + var ticker = time.NewTicker(time.Second * 3) + for { + select { + case <-r.stopChan: return + case <-ticker.C: + nowTime := time.Now().Unix() + if nowTime > runTime { + r.stop() + return + } } } } From 07c1f78364ae9e4960f88ce2a53ab389797ec58b Mon Sep 17 00:00:00 2001 From: machongwei Date: Sun, 21 Aug 2022 09:11:58 +0800 Subject: [PATCH 5/7] merge upstream master change --- hrp/boomer.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/hrp/boomer.go b/hrp/boomer.go index 8f3cad39..e8ea55fc 100644 --- a/hrp/boomer.go +++ b/hrp/boomer.go @@ -245,15 +245,14 @@ func (b *HRPBoomer) initWorker(profile *boomer.Profile) { b.InitBoomer() } -func (b *HRPBoomer) rebalanceBoomer(profile *boomer.Profile) { - b.SetProfile(profile) - b.SetSpawnCount(b.GetProfile().SpawnCount) - b.SetSpawnRate(b.GetProfile().SpawnRate) - b.SetRunTime(b.GetProfile().RunTime) +func (b *HRPBoomer) rebalanceRunner(profile *boomer.Profile) { + b.SetSpawnCount(profile.SpawnCount) + b.SetSpawnRate(profile.SpawnRate) b.GetRebalanceChan() <- true log.Info().Interface("profile", profile).Msg("rebalance tasks successfully") } + func (b *HRPBoomer) PollTasks(ctx context.Context) { for { select { From 59a92690f78f9430a6e7a0aecd62fa07621ecb71 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 21 Aug 2022 19:01:39 +0800 Subject: [PATCH 6/7] change: update changelog --- docs/CHANGELOG.md | 8 +++----- docs/cmd/hrp.md | 6 +++++- docs/cmd/hrp_boom.md | 2 +- docs/cmd/hrp_boom_curl.md | 2 +- docs/cmd/hrp_build.md | 2 +- docs/cmd/hrp_convert.md | 2 +- docs/cmd/hrp_convert_curl.md | 2 +- docs/cmd/hrp_curl.md | 19 +++++++++++++++++++ docs/cmd/hrp_dns.md | 29 +++++++++++++++++++++++++++++ docs/cmd/hrp_ping.md | 23 +++++++++++++++++++++++ docs/cmd/hrp_pytest.md | 2 +- docs/cmd/hrp_run.md | 2 +- docs/cmd/hrp_run_curl.md | 2 +- docs/cmd/hrp_startproject.md | 2 +- docs/cmd/hrp_traceroute.md | 22 ++++++++++++++++++++++ docs/cmd/hrp_wiki.md | 2 +- 16 files changed, 111 insertions(+), 16 deletions(-) create mode 100644 docs/cmd/hrp_curl.md create mode 100644 docs/cmd/hrp_dns.md create mode 100644 docs/cmd/hrp_ping.md create mode 100644 docs/cmd/hrp_traceroute.md diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 6ee78e52..a715669d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,20 +1,18 @@ # Release History -## v4.2.0 (2022-07-26) +## v4.2.0 (2022-08-21) **go version** - feat: support distributed load testing on multi-machines - feat: support run/boom/convert curl command(s) -- feat: support uploading file with indicated type and filename -- feat: support to infer MIME type of the uploaded file automatically -- feat: using `@FILEPATH` to indicate the path of the file +- feat: add ping/dns/traceroute/curl sub commands +- feat: improve builtin uploading feature, support `@` indicator and inferring MIME type - change: support omitting websocket url if not necessary - change: support multiple websocket connections for each session - fix: optimize websocket step initialization - fix: reuse plugin instance if already initialized - fix: deep copy api step to avoid data racing -- feat: support ping/dns/traceroute for dial test ## v4.1.6 (2022-07-04) diff --git a/docs/cmd/hrp.md b/docs/cmd/hrp.md index 445e658b..fae4a004 100644 --- a/docs/cmd/hrp.md +++ b/docs/cmd/hrp.md @@ -32,9 +32,13 @@ Copyright 2017 debugtalk * [hrp boom](hrp_boom.md) - run load test with boomer * [hrp build](hrp_build.md) - build plugin for testing * [hrp convert](hrp_convert.md) - convert to JSON/YAML/gotest/pytest testcases +* [hrp curl](hrp_curl.md) - run integrated curl command +* [hrp dns](hrp_dns.md) - DNS resolution for different source and record types +* [hrp ping](hrp_ping.md) - run integrated ping command * [hrp pytest](hrp_pytest.md) - run API test with pytest * [hrp run](hrp_run.md) - run API test with go engine * [hrp startproject](hrp_startproject.md) - create a scaffold project +* [hrp traceroute](hrp_traceroute.md) - run integrated traceroute command * [hrp wiki](hrp_wiki.md) - visit https://httprunner.com -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_boom.md b/docs/cmd/hrp_boom.md index b8d10d41..20adfde0 100644 --- a/docs/cmd/hrp_boom.md +++ b/docs/cmd/hrp_boom.md @@ -54,4 +54,4 @@ hrp boom [flags] * [hrp](hrp.md) - Next-Generation API Testing Solution. * [hrp boom curl](hrp_boom_curl.md) - run load test with curl command -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_boom_curl.md b/docs/cmd/hrp_boom_curl.md index 587ecb9a..87a0a66f 100644 --- a/docs/cmd/hrp_boom_curl.md +++ b/docs/cmd/hrp_boom_curl.md @@ -16,4 +16,4 @@ hrp boom curl URLs [flags] * [hrp boom](hrp_boom.md) - run load test with boomer -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_build.md b/docs/cmd/hrp_build.md index 30e93c8b..0be74f06 100644 --- a/docs/cmd/hrp_build.md +++ b/docs/cmd/hrp_build.md @@ -28,4 +28,4 @@ hrp build $path ... [flags] * [hrp](hrp.md) - Next-Generation API Testing Solution. -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_convert.md b/docs/cmd/hrp_convert.md index 93a89cac..24b7ecd9 100644 --- a/docs/cmd/hrp_convert.md +++ b/docs/cmd/hrp_convert.md @@ -23,4 +23,4 @@ hrp convert $path... [flags] * [hrp](hrp.md) - Next-Generation API Testing Solution. * [hrp convert curl](hrp_convert_curl.md) - convert curl command to httprunner testcase -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_convert_curl.md b/docs/cmd/hrp_convert_curl.md index 23d89f48..9880780a 100644 --- a/docs/cmd/hrp_convert_curl.md +++ b/docs/cmd/hrp_convert_curl.md @@ -16,4 +16,4 @@ hrp convert curl URLs [flags] * [hrp convert](hrp_convert.md) - convert to JSON/YAML/gotest/pytest testcases -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_curl.md b/docs/cmd/hrp_curl.md new file mode 100644 index 00000000..82fe7511 --- /dev/null +++ b/docs/cmd/hrp_curl.md @@ -0,0 +1,19 @@ +## hrp curl + +run integrated curl command + +``` +hrp curl $url [flags] +``` + +### Options + +``` + -h, --help help for curl +``` + +### SEE ALSO + +* [hrp](hrp.md) - Next-Generation API Testing Solution. + +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_dns.md b/docs/cmd/hrp_dns.md new file mode 100644 index 00000000..57f051d3 --- /dev/null +++ b/docs/cmd/hrp_dns.md @@ -0,0 +1,29 @@ +## hrp dns + +DNS resolution for different source and record types + +``` +hrp dns $url [flags] +``` + +### Options + +``` + --dns-record int DNS record type + 1: A + 28: AAAA + 5: CNAME (default 1) + --dns-server string DNS server, only available for local DNS source + --dns-source int DNS source type + 0: local DNS + 1: http DNS + 2: google DNS + -h, --help help for dns + --save-tests Save DNS resolution result as json +``` + +### SEE ALSO + +* [hrp](hrp.md) - Next-Generation API Testing Solution. + +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_ping.md b/docs/cmd/hrp_ping.md new file mode 100644 index 00000000..164652ad --- /dev/null +++ b/docs/cmd/hrp_ping.md @@ -0,0 +1,23 @@ +## hrp ping + +run integrated ping command + +``` +hrp ping $url [flags] +``` + +### Options + +``` + -c, --count int Stop after sending (and receiving) N packets (default 10) + -h, --help help for ping + -i, --interval duration Wait N seconds between sending each packet (default 1s) + --save-tests Save ping result as json + -t, --timeout duration Ping exits after N seconds (default 20s) +``` + +### SEE ALSO + +* [hrp](hrp.md) - Next-Generation API Testing Solution. + +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_pytest.md b/docs/cmd/hrp_pytest.md index 9f644920..b5eced08 100644 --- a/docs/cmd/hrp_pytest.md +++ b/docs/cmd/hrp_pytest.md @@ -16,4 +16,4 @@ hrp pytest $path ... [flags] * [hrp](hrp.md) - Next-Generation API Testing Solution. -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_run.md b/docs/cmd/hrp_run.md index 6983ba63..7079fc39 100644 --- a/docs/cmd/hrp_run.md +++ b/docs/cmd/hrp_run.md @@ -36,4 +36,4 @@ hrp run $path... [flags] * [hrp](hrp.md) - Next-Generation API Testing Solution. * [hrp run curl](hrp_run_curl.md) - run API test with curl command -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_run_curl.md b/docs/cmd/hrp_run_curl.md index c7c98150..cdc3f54c 100644 --- a/docs/cmd/hrp_run_curl.md +++ b/docs/cmd/hrp_run_curl.md @@ -16,4 +16,4 @@ hrp run curl URLs [flags] * [hrp run](hrp_run.md) - run API test with go engine -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_startproject.md b/docs/cmd/hrp_startproject.md index 45a81b7b..d64f16dc 100644 --- a/docs/cmd/hrp_startproject.md +++ b/docs/cmd/hrp_startproject.md @@ -21,4 +21,4 @@ hrp startproject $project_name [flags] * [hrp](hrp.md) - Next-Generation API Testing Solution. -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_traceroute.md b/docs/cmd/hrp_traceroute.md new file mode 100644 index 00000000..f959d880 --- /dev/null +++ b/docs/cmd/hrp_traceroute.md @@ -0,0 +1,22 @@ +## hrp traceroute + +run integrated traceroute command + +``` +hrp traceroute $url [flags] +``` + +### Options + +``` + -h, --help help for traceroute + -m, --max-hops int Set the max number of hops (max TTL to be reached) (default 30) + -q, --queries int Set the number of probes per each hop (default 1) + --save-tests Save traceroute result as json +``` + +### SEE ALSO + +* [hrp](hrp.md) - Next-Generation API Testing Solution. + +###### Auto generated by spf13/cobra on 21-Aug-2022 diff --git a/docs/cmd/hrp_wiki.md b/docs/cmd/hrp_wiki.md index b18979f2..56669a98 100644 --- a/docs/cmd/hrp_wiki.md +++ b/docs/cmd/hrp_wiki.md @@ -16,4 +16,4 @@ hrp wiki [flags] * [hrp](hrp.md) - Next-Generation API Testing Solution. -###### Auto generated by spf13/cobra on 26-Jul-2022 +###### Auto generated by spf13/cobra on 21-Aug-2022 From f3abec23355c7a0ef1c4bcf99b01c06f4fcb41cf Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 21 Aug 2022 19:10:50 +0800 Subject: [PATCH 7/7] docs: update changelog --- docs/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index a715669d..afb0344d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -8,6 +8,7 @@ - feat: support run/boom/convert curl command(s) - feat: add ping/dns/traceroute/curl sub commands - feat: improve builtin uploading feature, support `@` indicator and inferring MIME type +- feat: hrp boom support setting duration of run time - change: support omitting websocket url if not necessary - change: support multiple websocket connections for each session - fix: optimize websocket step initialization