From 80f1206db4477c83bb81946ee7a38ae2a24d5640 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Fri, 17 Jun 2022 22:39:19 +0800 Subject: [PATCH] fix #1339: omit pseudo header names for HTTP/1, e.g. :authority, :method, :path, :schema --- docs/CHANGELOG.md | 1 + .../postman_echo/request_methods/hardcode.yml | 4 ++++ .../postman_echo/request_methods/hardcode_test.py | 12 ++++++++++-- httprunner/step_request.py | 15 +++++++++++---- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 50cba792..398edc84 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -16,6 +16,7 @@ - feat: support skip for pytest - feat: print request and response details in DEBUG level when running API cases - fix: support None/dict/list format when printing sql response +- fix: omit pseudo header names for HTTP/1, e.g. :authority, :method, :path, :schema ## v4.1.3 (2022-06-14) diff --git a/examples/postman_echo/request_methods/hardcode.yml b/examples/postman_echo/request_methods/hardcode.yml index 6cb3fde1..2a2a7a2d 100644 --- a/examples/postman_echo/request_methods/hardcode.yml +++ b/examples/postman_echo/request_methods/hardcode.yml @@ -13,6 +13,10 @@ teststeps: foo1: bar1 foo2: bar2 headers: + :authority: postman-echo.com + :method: POST + :path: /get + :schema: https User-Agent: HttpRunner/3.0 validate: - eq: ["status_code", 200] diff --git a/examples/postman_echo/request_methods/hardcode_test.py b/examples/postman_echo/request_methods/hardcode_test.py index 60e64887..c12f31e0 100644 --- a/examples/postman_echo/request_methods/hardcode_test.py +++ b/examples/postman_echo/request_methods/hardcode_test.py @@ -1,4 +1,4 @@ -# NOTE: Generated By HttpRunner v4.1.3 +# NOTE: Generated By HttpRunner v4.1.4 # FROM: request_methods/hardcode.yml @@ -18,7 +18,15 @@ class TestCaseHardcode(HttpRunner): RunRequest("get with params") .get("/get") .with_params(**{"foo1": "bar1", "foo2": "bar2"}) - .with_headers(**{"User-Agent": "HttpRunner/3.0"}) + .with_headers( + **{ + ":authority": "postman-echo.com", + ":method": "POST", + ":path": "/get", + ":schema": "https", + "User-Agent": "HttpRunner/3.0", + } + ) .validate() .assert_equal("status_code", 200) ), diff --git a/httprunner/step_request.py b/httprunner/step_request.py index 4a3cee59..a78b11b0 100644 --- a/httprunner/step_request.py +++ b/httprunner/step_request.py @@ -93,10 +93,17 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: request_dict = step.request.dict() request_dict.pop("upload", None) parsed_request_dict = runner.parser.parse_data(request_dict, step_variables) - parsed_request_dict["headers"].setdefault( - "HRUN-Request-ID", - f"HRUN-{runner.case_id}-{str(int(time.time() * 1000))[-6:]}", - ) + + request_headers = parsed_request_dict.pop("headers", {}) + # omit pseudo header names for HTTP/1, e.g. :authority, :method, :path, :scheme + request_headers = { + key: request_headers[key] for key in request_headers if not key.startswith(":") + } + request_headers[ + "HRUN-Request-ID" + ] = f"HRUN-{runner.case_id}-{str(int(time.time() * 1000))[-6:]}" + parsed_request_dict["headers"] = request_headers + step_variables["request"] = parsed_request_dict # setup hooks