diff --git a/convert_test.go b/convert_test.go index 29f26b7a..0af879d1 100644 --- a/convert_test.go +++ b/convert_test.go @@ -47,6 +47,16 @@ var demoTestCase = &TestCase{ AssertEqual("status_code", 200, "check status code"). AssertLengthEqual("body.json.foo1", 5, "check args foo1"). AssertEqual("body.json.foo2", 12.3, "check args foo2"), + Step("post form data"). + POST("/post"). + WithParams(map[string]interface{}{ + "foo1": "$varFoo1", // reference former extracted variable + "foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here + }). + Validate(). + AssertEqual("status_code", 200, "check status code"). + AssertLengthEqual("body.form.foo1", 5, "check args foo1"). + AssertEqual("body.form.foo2", "12.3", "check args foo2"), // form data will be converted to string }, } diff --git a/examples/demo.har b/examples/demo.har index eb5e0365..40151473 100644 --- a/examples/demo.har +++ b/examples/demo.har @@ -7,11 +7,11 @@ }, "entries": [ { - "startedDateTime": "2021-10-11T20:33:08.070+08:00", - "time": 1348, + "startedDateTime": "2021-10-15T20:29:14.396+08:00", + "time": 1528, "request": { "method": "GET", - "url": "https://postman-echo.com/get?foo1=Kie7p&foo2=34.5", + "url": "https://postman-echo.com/get?foo1=HDnY8&foo2=34.5", "httpVersion": "HTTP/1.1", "cookies": [], "headers": [ @@ -31,7 +31,7 @@ "queryString": [ { "name": "foo1", - "value": "Kie7p" + "value": "HDnY8" }, { "name": "foo2", @@ -49,7 +49,7 @@ "cookies": [ { "name": "sails.sid", - "value": "s%3AOf5eKs36eD8xIj5lio09zXrhVra1yPHo.PJyQYxoyPvXNUPal4Tj0OaJDLDJ7tZfZ%2BCL37XxD5Qg", + "value": "s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk", "path": "/", "domain": null, "expires": null, @@ -62,7 +62,7 @@ "headers": [ { "name": "Date", - "value": "Mon, 11 Oct 2021 12:33:09 GMT" + "value": "Fri, 15 Oct 2021 12:29:15 GMT" }, { "name": "Content-Type", @@ -74,7 +74,7 @@ }, { "name": "ETag", - "value": "W/\"12c-R4rXPU4pP2zRVaUP5eVfknZVx78\"" + "value": "W/\"12c-1pyB4v4mv3hdBoU+8cUmx4p37qI\"" }, { "name": "Vary", @@ -82,7 +82,7 @@ }, { "name": "set-cookie", - "value": "sails.sid=s%3AOf5eKs36eD8xIj5lio09zXrhVra1yPHo.PJyQYxoyPvXNUPal4Tj0OaJDLDJ7tZfZ%2BCL37XxD5Qg; Path=/; HttpOnly" + "value": "sails.sid=s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk; Path=/; HttpOnly" }, { "name": "Connection", @@ -92,27 +92,27 @@ "content": { "size": 300, "mimeType": "application/json; charset=utf-8", - "text": "eyJhcmdzIjp7ImZvbzEiOiJLaWU3cCIsImZvbzIiOiIzNC41In0sImhlYWRlcnMiOnsieC1mb3J3YXJkZWQtcHJvdG8iOiJodHRwcyIsIngtZm9yd2FyZGVkLXBvcnQiOiI0NDMiLCJob3N0IjoicG9zdG1hbi1lY2hvLmNvbSIsIngtYW16bi10cmFjZS1pZCI6IlJvb3Q9MS02MTY0MmYwNS0xOTZjNjZhNDUzYjEyNTk4NTNiYzc1NGMiLCJ1c2VyLWFnZW50IjoiSHR0cEJvb21lciIsImFjY2VwdC1lbmNvZGluZyI6Imd6aXAifSwidXJsIjoiaHR0cHM6Ly9wb3N0bWFuLWVjaG8uY29tL2dldD9mb28xPUtpZTdwJmZvbzI9MzQuNSJ9", + "text": "eyJhcmdzIjp7ImZvbzEiOiJIRG5ZOCIsImZvbzIiOiIzNC41In0sImhlYWRlcnMiOnsieC1mb3J3YXJkZWQtcHJvdG8iOiJodHRwcyIsIngtZm9yd2FyZGVkLXBvcnQiOiI0NDMiLCJob3N0IjoicG9zdG1hbi1lY2hvLmNvbSIsIngtYW16bi10cmFjZS1pZCI6IlJvb3Q9MS02MTY5NzQxYi01YjgyNTRjZTZjZThlNTU2NTRiNzc3MmQiLCJ1c2VyLWFnZW50IjoiSHR0cEJvb21lciIsImFjY2VwdC1lbmNvZGluZyI6Imd6aXAifSwidXJsIjoiaHR0cHM6Ly9wb3N0bWFuLWVjaG8uY29tL2dldD9mb28xPUhEblk4JmZvbzI9MzQuNSJ9", "encoding": "base64" }, "redirectURL": null, "headersSize": 0, "bodySize": 300 }, - "serverIPAddress": "54.209.48.16", + "serverIPAddress": "44.193.31.23", "cache": {}, "timings": { - "dns": 137, - "connect": 938, - "ssl": 579, + "dns": 105, + "connect": 1108, + "ssl": 721, "send": 1, - "wait": 271, - "receive": 1 + "wait": 312, + "receive": 2 } }, { - "startedDateTime": "2021-10-11T20:33:09.646+08:00", - "time": 273, + "startedDateTime": "2021-10-15T20:29:16.120+08:00", + "time": 306, "request": { "method": "POST", "url": "https://postman-echo.com/post", @@ -120,7 +120,7 @@ "cookies": [ { "name": "sails.sid", - "value": "s%3AOf5eKs36eD8xIj5lio09zXrhVra1yPHo.PJyQYxoyPvXNUPal4Tj0OaJDLDJ7tZfZ%2BCL37XxD5Qg" + "value": "s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk" } ], "headers": [ @@ -142,7 +142,7 @@ }, { "name": "Cookie", - "value": "sails.sid=s%3AOf5eKs36eD8xIj5lio09zXrhVra1yPHo.PJyQYxoyPvXNUPal4Tj0OaJDLDJ7tZfZ%2BCL37XxD5Qg" + "value": "sails.sid=s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk" }, { "name": "Accept-Encoding", @@ -152,9 +152,9 @@ "queryString": [], "postData": { "mimeType": "application/json; charset=UTF-8", - "text": "{\"foo1\":\"Kie7p\",\"foo2\":12.3}" + "text": "{\"foo1\":\"HDnY8\",\"foo2\":12.3}" }, - "headersSize": 271, + "headersSize": 269, "bodySize": 28 }, "response": { @@ -165,7 +165,7 @@ "cookies": [ { "name": "sails.sid", - "value": "s%3A3unIFKLK0Hl_B2pdTkPkT7EfMFT-Haj4.IP8%2BW82GuC6rgKB3ftSTzeIuU06XtsL9MfK7MVk3ADE", + "value": "s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw", "path": "/", "domain": null, "expires": null, @@ -178,7 +178,7 @@ "headers": [ { "name": "Date", - "value": "Mon, 11 Oct 2021 12:33:09 GMT" + "value": "Fri, 15 Oct 2021 12:29:16 GMT" }, { "name": "Content-Type", @@ -186,11 +186,11 @@ }, { "name": "Content-Length", - "value": "528" + "value": "526" }, { "name": "ETag", - "value": "W/\"210-jFdmdcCipJ2EiYEjcIabSk/psPI\"" + "value": "W/\"20e-aXqJ0H6Q30sU41c/D7asB+yXWeQ\"" }, { "name": "Vary", @@ -198,7 +198,7 @@ }, { "name": "set-cookie", - "value": "sails.sid=s%3A3unIFKLK0Hl_B2pdTkPkT7EfMFT-Haj4.IP8%2BW82GuC6rgKB3ftSTzeIuU06XtsL9MfK7MVk3ADE; Path=/; HttpOnly" + "value": "sails.sid=s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw; Path=/; HttpOnly" }, { "name": "Connection", @@ -206,24 +206,149 @@ } ], "content": { - "size": 528, + "size": 526, "mimeType": "application/json; charset=utf-8", - "text": "eyJhcmdzIjp7fSwiZGF0YSI6eyJmb28xIjoiS2llN3AiLCJmb28yIjoxMi4zfSwiZmlsZXMiOnt9LCJmb3JtIjp7fSwiaGVhZGVycyI6eyJ4LWZvcndhcmRlZC1wcm90byI6Imh0dHBzIiwieC1mb3J3YXJkZWQtcG9ydCI6IjQ0MyIsImhvc3QiOiJwb3N0bWFuLWVjaG8uY29tIiwieC1hbXpuLXRyYWNlLWlkIjoiUm9vdD0xLTYxNjQyZjA1LTExMTZkZmZlN2U0YTQ5ODg0NDBjMDI2NiIsImNvbnRlbnQtbGVuZ3RoIjoiMjgiLCJ1c2VyLWFnZW50IjoiR28taHR0cC1jbGllbnQvMS4xIiwiY29udGVudC10eXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIsImNvb2tpZSI6InNhaWxzLnNpZD1zJTNBT2Y1ZUtzMzZlRDh4SWo1bGlvMDl6WHJoVnJhMXlQSG8uUEp5UVl4b3lQdlhOVVBhbDRUajBPYUpETERKN3RaZlolMkJDTDM3WHhENVFnIiwiYWNjZXB0LWVuY29kaW5nIjoiZ3ppcCJ9LCJqc29uIjp7ImZvbzEiOiJLaWU3cCIsImZvbzIiOjEyLjN9LCJ1cmwiOiJodHRwczovL3Bvc3RtYW4tZWNoby5jb20vcG9zdCJ9", + "text": "eyJhcmdzIjp7fSwiZGF0YSI6eyJmb28xIjoiSERuWTgiLCJmb28yIjoxMi4zfSwiZmlsZXMiOnt9LCJmb3JtIjp7fSwiaGVhZGVycyI6eyJ4LWZvcndhcmRlZC1wcm90byI6Imh0dHBzIiwieC1mb3J3YXJkZWQtcG9ydCI6IjQ0MyIsImhvc3QiOiJwb3N0bWFuLWVjaG8uY29tIiwieC1hbXpuLXRyYWNlLWlkIjoiUm9vdD0xLTYxNjk3NDFjLTIxN2RiMGI3MWFkYjgwYmQ3ODUxOTI2OCIsImNvbnRlbnQtbGVuZ3RoIjoiMjgiLCJ1c2VyLWFnZW50IjoiR28taHR0cC1jbGllbnQvMS4xIiwiY29udGVudC10eXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIsImNvb2tpZSI6InNhaWxzLnNpZD1zJTNBel9McGdsa0t4VHZKX2VIVlVINlY2N2RyS3AwQUdXVy0uUGlkYWJhWE9uYXRMUlA0N2hWeXFxZXBsNkJkcnBFUXpSbEpRWHRiSWl3ayIsImFjY2VwdC1lbmNvZGluZyI6Imd6aXAifSwianNvbiI6eyJmb28xIjoiSERuWTgiLCJmb28yIjoxMi4zfSwidXJsIjoiaHR0cHM6Ly9wb3N0bWFuLWVjaG8uY29tL3Bvc3QifQ==", "encoding": "base64" }, "redirectURL": null, "headersSize": 0, - "bodySize": 528 + "bodySize": 526 }, - "serverIPAddress": "54.209.48.16", + "serverIPAddress": "44.193.31.23", + "cache": {}, + "timings": { + "dns": -1, + "connect": -1, + "ssl": -1, + "send": 1, + "wait": 304, + "receive": 1 + } + }, + { + "startedDateTime": "2021-10-15T20:29:16.427+08:00", + "time": 305, + "request": { + "method": "POST", + "url": "https://postman-echo.com/post", + "httpVersion": "HTTP/1.1", + "cookies": [ + { + "name": "sails.sid", + "value": "s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw" + } + ], + "headers": [ + { + "name": "Host", + "value": "postman-echo.com" + }, + { + "name": "User-Agent", + "value": "Go-http-client/1.1" + }, + { + "name": "Content-Length", + "value": "20" + }, + { + "name": "Content-Type", + "value": "application/x-www-form-urlencoded; charset=UTF-8" + }, + { + "name": "Cookie", + "value": "sails.sid=s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw" + }, + { + "name": "Accept-Encoding", + "value": "gzip" + } + ], + "queryString": [], + "postData": { + "mimeType": "application/x-www-form-urlencoded; charset=UTF-8", + "params": [ + { + "name": "foo1", + "value": "HDnY8" + }, + { + "name": "foo2", + "value": "12.3" + } + ] + }, + "headersSize": 290, + "bodySize": 20 + }, + "response": { + "_charlesStatus": "COMPLETE", + "status": 200, + "statusText": "OK", + "httpVersion": "HTTP/1.1", + "cookies": [ + { + "name": "sails.sid", + "value": "s%3AMp2gGgeCCDM4sRS_MfL1q-hAkL3bAk84.9XT7TTW8QzueQqtQ6bQM%2BgHqiUBbkJSfgM5CbfhFreQ", + "path": "/", + "domain": null, + "expires": null, + "httpOnly": true, + "secure": false, + "comment": null, + "_maxAge": null + } + ], + "headers": [ + { + "name": "Date", + "value": "Fri, 15 Oct 2021 12:29:16 GMT" + }, + { + "name": "Content-Type", + "value": "application/json; charset=utf-8" + }, + { + "name": "Content-Length", + "value": "551" + }, + { + "name": "ETag", + "value": "W/\"227-micuvGYwtEZN542D1sTL0hAZaRs\"" + }, + { + "name": "Vary", + "value": "Accept-Encoding" + }, + { + "name": "set-cookie", + "value": "sails.sid=s%3AMp2gGgeCCDM4sRS_MfL1q-hAkL3bAk84.9XT7TTW8QzueQqtQ6bQM%2BgHqiUBbkJSfgM5CbfhFreQ; Path=/; HttpOnly" + }, + { + "name": "Connection", + "value": "keep-alive" + } + ], + "content": { + "size": 551, + "mimeType": "application/json; charset=utf-8", + "text": "eyJhcmdzIjp7fSwiZGF0YSI6IiIsImZpbGVzIjp7fSwiZm9ybSI6eyJmb28xIjoiSERuWTgiLCJmb28yIjoiMTIuMyJ9LCJoZWFkZXJzIjp7IngtZm9yd2FyZGVkLXByb3RvIjoiaHR0cHMiLCJ4LWZvcndhcmRlZC1wb3J0IjoiNDQzIiwiaG9zdCI6InBvc3RtYW4tZWNoby5jb20iLCJ4LWFtem4tdHJhY2UtaWQiOiJSb290PTEtNjE2OTc0MWMtNWI5ZDEyMWI2N2FlZTI0MTUyMmQzMjE2IiwiY29udGVudC1sZW5ndGgiOiIyMCIsInVzZXItYWdlbnQiOiJHby1odHRwLWNsaWVudC8xLjEiLCJjb250ZW50LXR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLCJjb29raWUiOiJzYWlscy5zaWQ9cyUzQVM1ZTd3MHpRMHhBc0N3aDlMOFQ2UjdRTFlDTzdfZ3RELnI4JTJCMnc5SVdxRUlmdVZrclpqbnh6bTJ4QURJazM0ektBV1hSUGFwciUyRkF3IiwiYWNjZXB0LWVuY29kaW5nIjoiZ3ppcCJ9LCJqc29uIjp7ImZvbzEiOiJIRG5ZOCIsImZvbzIiOiIxMi4zIn0sInVybCI6Imh0dHBzOi8vcG9zdG1hbi1lY2hvLmNvbS9wb3N0In0=", + "encoding": "base64" + }, + "redirectURL": null, + "headersSize": 0, + "bodySize": 551 + }, + "serverIPAddress": "44.193.31.23", "cache": {}, "timings": { "dns": -1, "connect": -1, "ssl": -1, "send": 0, - "wait": 272, - "receive": 1 + "wait": 303, + "receive": 2 } } ] diff --git a/examples/demo.json b/examples/demo.json index cf3f61b7..99d1dcda 100644 --- a/examples/demo.json +++ b/examples/demo.json @@ -94,6 +94,37 @@ "msg": "check args foo2" } ] + }, + { + "name": "post form data", + "request": { + "method": "POST", + "url": "/post", + "params": { + "foo1": "$varFoo1", + "foo2": "${max($a, $b)}" + } + }, + "validate": [ + { + "check": "status_code", + "assert": "equals", + "expect": 200, + "msg": "check status code" + }, + { + "check": "body.form.foo1", + "assert": "length_equals", + "expect": 5, + "msg": "check args foo1" + }, + { + "check": "body.form.foo2", + "assert": "equals", + "expect": "12.3", + "msg": "check args foo2" + } + ] } ] } \ No newline at end of file diff --git a/examples/demo.yaml b/examples/demo.yaml index c5c01b44..c14421ee 100644 --- a/examples/demo.yaml +++ b/examples/demo.yaml @@ -63,3 +63,23 @@ teststeps: assert: equals expect: 12.3 msg: check args foo2 + - name: post form data + request: + method: POST + url: /post + params: + foo1: $varFoo1 + foo2: ${max($a, $b)} + validate: + - check: status_code + assert: equals + expect: 200 + msg: check status code + - check: body.form.foo1 + assert: length_equals + expect: 5 + msg: check args foo1 + - check: body.form.foo2 + assert: equals + expect: "12.3" + msg: check args foo2 diff --git a/examples/demo_test.go b/examples/demo_test.go index 8817a24d..25247c2d 100644 --- a/examples/demo_test.go +++ b/examples/demo_test.go @@ -47,6 +47,16 @@ func TestCaseDemo(t *testing.T) { AssertEqual("status_code", 200, "check status code"). AssertLengthEqual("body.json.foo1", 5, "check args foo1"). AssertEqual("body.json.foo2", 12.3, "check args foo2"), + httpboomer.Step("post form data"). + POST("/post"). + WithParams(map[string]interface{}{ + "foo1": "$varFoo1", // reference former extracted variable + "foo2": "${max($a, $b)}", // 12.3; step level variables are independent, variable b is 3.45 here + }). + Validate(). + AssertEqual("status_code", 200, "check status code"). + AssertLengthEqual("body.form.foo1", 5, "check args foo1"). + AssertEqual("body.form.foo2", "12.3", "check args foo2"), // form data will be converted to string }, } diff --git a/har2case/core_test.go b/har2case/core_test.go index 4ff58d26..7b52d14b 100644 --- a/har2case/core_test.go +++ b/har2case/core_test.go @@ -69,7 +69,7 @@ func TestMakeTestCase(t *testing.T) { } // make request params - if !assert.Equal(t, "Kie7p", tCase.TestSteps[0].Request.Params["foo1"]) { + if !assert.Equal(t, "HDnY8", tCase.TestSteps[0].Request.Params["foo1"]) { t.Fail() } @@ -87,7 +87,7 @@ func TestMakeTestCase(t *testing.T) { } // make request data - if !assert.Equal(t, map[string]interface{}{"foo1": "Kie7p", "foo2": 12.3}, tCase.TestSteps[1].Request.Data) { + if !assert.Equal(t, map[string]interface{}{"foo1": "HDnY8", "foo2": 12.3}, tCase.TestSteps[1].Request.Data) { t.Fail() } }