feat: support rendezvous after spawn done

Change-Id: I4b07a88b61da4dc1863b189db9eb831ffb14130a
This commit is contained in:
buyuxiang
2022-01-25 14:25:14 +08:00
parent 639480a6c5
commit d7ff433818
8 changed files with 475 additions and 11 deletions

View File

@@ -0,0 +1,91 @@
package examples
import (
"testing"
"github.com/httprunner/hrp"
)
var rendezvousTestcase = &hrp.TestCase{
Config: hrp.NewConfig("run request with functions").
SetBaseURL("https://postman-echo.com").
WithVariables(map[string]interface{}{
"n": 5,
"a": 12.3,
"b": 3.45,
}),
TestSteps: []hrp.IStep{
// rendezvous boundary test
hrp.NewStep("test negative number").
Rendezvous("test negative number").
WithUserNumber(-1),
hrp.NewStep("test overflow number").
Rendezvous("test overflow number").
WithUserNumber(1000000),
hrp.NewStep("test negative percent").
Rendezvous("test very low percent").
WithUserPercent(-0.5),
hrp.NewStep("test very low percent").
Rendezvous("test very low percent").
WithUserPercent(0.00001),
hrp.NewStep("test overflow percent").
Rendezvous("test overflow percent").
WithUserPercent(1.5),
hrp.NewStep("test conflict params").
Rendezvous("test conflict params").
WithUserNumber(1).
WithUserPercent(0.123),
hrp.NewStep("test negative timeout").
Rendezvous("test negative timeout").
WithTimeout(-1000),
// rendezvous normal test
hrp.NewStep("waiting for all users in the beginning").
Rendezvous("rendezvous0").
WithUserNumber(10).
WithTimeout(3000),
hrp.NewStep("rendezvous before get").
Rendezvous("rendezvous1").
WithUserNumber(10).
WithTimeout(3000),
hrp.NewStep("get with params").
GET("/get").
WithParams(map[string]interface{}{"foo1": "foo1", "foo2": "foo2"}).
WithHeaders(map[string]string{"User-Agent": "HttpRunnerPlus"}).
Extract().
WithJmesPath("body.args.foo1", "varFoo1").
Validate().
AssertEqual("status_code", 200, "check status code"),
hrp.NewStep("rendezvous before post").
Rendezvous("rendezvous2").
WithUserNumber(20).
WithTimeout(2000),
hrp.NewStep("post json data with functions").
POST("/post").
WithHeaders(map[string]string{"User-Agent": "HttpRunnerPlus"}).
WithBody(map[string]interface{}{"foo1": "foo1", "foo2": "foo2"}).
Validate().
AssertEqual("status_code", 200, "check status code").
AssertLengthEqual("body.json.foo1", 4, "check args foo1").
AssertEqual("body.json.foo2", "foo2", "check args foo2"),
hrp.NewStep("waiting for all users in the end").
Rendezvous("rendezvous3"),
},
}
func TestRendezvous(t *testing.T) {
err := hrp.NewRunner(t).Run(rendezvousTestcase)
if err != nil {
t.Fatalf("run testcase error: %v", err)
}
}
func TestRendezvousDump2JSON(t *testing.T) {
tCase, err := rendezvousTestcase.ToTCase()
if err != nil {
t.Fatalf("ToTCase error: %v", err)
}
err = tCase.Dump2JSON("rendezvous_test.json")
if err != nil {
t.Fatalf("dump to json error: %v", err)
}
}

View File

@@ -0,0 +1,152 @@
{
"config": {
"name": "run request with functions",
"base_url": "https://postman-echo.com",
"variables": {
"a": 12.3,
"b": 3.45,
"n": 5
}
},
"teststeps": [
{
"name": "test negative number",
"rendezvous": {
"name": "test negative number",
"number": -1
}
},
{
"name": "test overflow number",
"rendezvous": {
"name": "test overflow number",
"number": 1000000
}
},
{
"name": "test negative percent",
"rendezvous": {
"name": "test very low percent",
"percent": -0.5
}
},
{
"name": "test very low percent",
"rendezvous": {
"name": "test very low percent",
"percent": 0.00001
}
},
{
"name": "test overflow percent",
"rendezvous": {
"name": "test overflow percent",
"percent": 1.5
}
},
{
"name": "test conflict params",
"rendezvous": {
"name": "test conflict params",
"percent": 0.123,
"number": 1
}
},
{
"name": "test negative timeout",
"rendezvous": {
"name": "test negative timeout",
"timeout": -1000
}
},
{
"name": "waiting for all users in the beginning",
"rendezvous": {
"name": "rendezvous0",
"number": 10,
"timeout": 3000
}
},
{
"name": "rendezvous before get",
"rendezvous": {
"name": "rendezvous1",
"number": 10,
"timeout": 3000
}
},
{
"name": "get with params",
"request": {
"method": "GET",
"url": "/get",
"params": {
"foo1": "foo1",
"foo2": "foo2"
},
"headers": {
"User-Agent": "HttpRunnerPlus"
}
},
"extract": {
"varFoo1": "body.args.foo1"
},
"validate": [
{
"check": "status_code",
"assert": "equals",
"expect": 200,
"msg": "check status code"
}
]
},
{
"name": "rendezvous before post",
"rendezvous": {
"name": "rendezvous2",
"number": 20,
"timeout": 2000
}
},
{
"name": "post json data with functions",
"request": {
"method": "POST",
"url": "/post",
"headers": {
"User-Agent": "HttpRunnerPlus"
},
"body": {
"foo1": "foo1",
"foo2": "foo2"
}
},
"validate": [
{
"check": "status_code",
"assert": "equals",
"expect": 200,
"msg": "check status code"
},
{
"check": "body.json.foo1",
"assert": "length_equals",
"expect": 4,
"msg": "check args foo1"
},
{
"check": "body.json.foo2",
"assert": "equals",
"expect": "foo2",
"msg": "check args foo2"
}
]
},
{
"name": "waiting for all users in the end",
"rendezvous": {
"name": "rendezvous3"
}
}
]
}