diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 44ce45d1..a87ecc09 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,6 +2,10 @@ ## 3.0.5 (2020-05-21) +**Added** + +- feat: add default header `HRUN-Request-ID` for each testcase #721 + **Fixed** - fix: ensure referenced testcase share the same session diff --git a/httprunner/__init__.py b/httprunner/__init__.py index 1c9ba758..36b1d4d9 100644 --- a/httprunner/__init__.py +++ b/httprunner/__init__.py @@ -1,4 +1,4 @@ -__version__ = "3.0.4" +__version__ = "3.0.5" __description__ = "One-stop solution for HTTP(S) testing." from httprunner.runner import HttpRunner diff --git a/httprunner/runner.py b/httprunner/runner.py index 95219187..a3ab7315 100644 --- a/httprunner/runner.py +++ b/httprunner/runner.py @@ -1,5 +1,6 @@ import os import time +import uuid from datetime import datetime from typing import List, Dict, Text @@ -31,6 +32,7 @@ class HttpRunner(object): success: bool = True # indicate testcase execution result __project_meta: ProjectMeta = None + __hrun_request_id: Text = None __step_datas: List[StepData] = None __session: HttpSession = None __session_variables: VariablesMapping = {} @@ -45,6 +47,10 @@ class HttpRunner(object): self.__session = session return self + def with_request_id(self, hrun_request_id: Text) -> "HttpRunner": + self.__hrun_request_id = hrun_request_id + return self + def with_variables(self, variables: VariablesMapping) -> "HttpRunner": self.__session_variables = variables return self @@ -60,6 +66,10 @@ class HttpRunner(object): parsed_request_dict = parse_data( request_dict, step.variables, self.__project_meta.functions ) + parsed_request_dict["headers"].setdefault( + "HRUN-Request-ID", + f"{self.__hrun_request_id}-{str(int(time.time() * 1000))[-6:]}", + ) # prepare arguments method = parsed_request_dict.pop("method") @@ -131,6 +141,7 @@ class HttpRunner(object): case_result = ( HttpRunner() .with_session(self.__session) + .with_request_id(self.__hrun_request_id) .with_variables(step_variables) .run_path(ref_testcase_path) ) @@ -183,6 +194,7 @@ class HttpRunner(object): parse_config(self.config) self.__start_at = time.time() self.__step_datas: List[StepData] = [] + self.__hrun_request_id = self.__hrun_request_id or f"HRUN-{uuid.uuid4()}" self.__session = self.__session or HttpSession() self.__session_variables = {} for step in self.teststeps: diff --git a/pyproject.toml b/pyproject.toml index 6614464f..5c47f4bf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "httprunner" -version = "3.0.4" +version = "3.0.5" description = "One-stop solution for HTTP(S) testing." license = "Apache-2.0" readme = "README.md"