mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-09 22:44:05 +08:00
add:增加allure的内容,1.附加log文件 2.添加请求和返回详情
This commit is contained in:
@@ -224,6 +224,8 @@ class SessionRunner(object):
|
|||||||
self.__run_step(step)
|
self.__run_step(step)
|
||||||
finally:
|
finally:
|
||||||
logger.info(f"generate testcase log: {self.__log_path}")
|
logger.info(f"generate testcase log: {self.__log_path}")
|
||||||
|
if USE_ALLURE:
|
||||||
|
allure.attach.file(self.__log_path, name='all log', attachment_type=allure.attachment_type.TEXT)
|
||||||
|
|
||||||
self.__duration = time.time() - self.__start_at
|
self.__duration = time.time() - self.__start_at
|
||||||
return self
|
return self
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from httprunner.models import (
|
|||||||
)
|
)
|
||||||
from httprunner.parser import build_url
|
from httprunner.parser import build_url
|
||||||
from httprunner.response import ResponseObject
|
from httprunner.response import ResponseObject
|
||||||
from httprunner.runner import HttpRunner
|
from httprunner.runner import HttpRunner, USE_ALLURE
|
||||||
|
|
||||||
|
|
||||||
def call_hooks(
|
def call_hooks(
|
||||||
@@ -99,8 +99,32 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
parsed_request_dict["verify"] = config.verify
|
parsed_request_dict["verify"] = config.verify
|
||||||
parsed_request_dict["json"] = parsed_request_dict.pop("req_json", {})
|
parsed_request_dict["json"] = parsed_request_dict.pop("req_json", {})
|
||||||
|
|
||||||
|
# log request
|
||||||
|
request_print = "====== request details ======\n"
|
||||||
|
request_print += f"url: {url}\n"
|
||||||
|
request_print += f"method: {method}\n"
|
||||||
|
headers = parsed_request_dict.pop("headers", {})
|
||||||
|
request_print += f"headers: {headers}\n"
|
||||||
|
for k, v in parsed_request_dict.items():
|
||||||
|
v = utils.omit_long_data(v)
|
||||||
|
request_print += f"{k}: {repr(v)}\n"
|
||||||
|
request_print += "\n"
|
||||||
|
|
||||||
# request
|
# request
|
||||||
|
if USE_ALLURE:
|
||||||
|
import allure
|
||||||
|
allure.attach(request_print, name="request details", attachment_type=allure.attachment_type.TEXT)
|
||||||
resp = runner.session.request(method, url, **parsed_request_dict)
|
resp = runner.session.request(method, url, **parsed_request_dict)
|
||||||
|
|
||||||
|
# log response
|
||||||
|
response_print = "====== response details ======\n"
|
||||||
|
response_print += f"status_code: {resp.status_code}\n"
|
||||||
|
response_print += f"headers: {resp.headers}\n"
|
||||||
|
response_print += f"body: {repr(resp.text)}\n"
|
||||||
|
|
||||||
|
if USE_ALLURE:
|
||||||
|
import allure
|
||||||
|
allure.attach(response_print, name="response details", attachment_type=allure.attachment_type.TEXT)
|
||||||
resp_obj = ResponseObject(resp, runner.parser)
|
resp_obj = ResponseObject(resp, runner.parser)
|
||||||
step.variables["response"] = resp_obj
|
step.variables["response"] = resp_obj
|
||||||
|
|
||||||
@@ -110,24 +134,7 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
|
|
||||||
def log_req_resp_details():
|
def log_req_resp_details():
|
||||||
err_msg = "\n{} DETAILED REQUEST & RESPONSE {}\n".format("*" * 32, "*" * 32)
|
err_msg = "\n{} DETAILED REQUEST & RESPONSE {}\n".format("*" * 32, "*" * 32)
|
||||||
|
err_msg += request_print + response_print
|
||||||
# log request
|
|
||||||
err_msg += "====== request details ======\n"
|
|
||||||
err_msg += f"url: {url}\n"
|
|
||||||
err_msg += f"method: {method}\n"
|
|
||||||
headers = parsed_request_dict.pop("headers", {})
|
|
||||||
err_msg += f"headers: {headers}\n"
|
|
||||||
for k, v in parsed_request_dict.items():
|
|
||||||
v = utils.omit_long_data(v)
|
|
||||||
err_msg += f"{k}: {repr(v)}\n"
|
|
||||||
|
|
||||||
err_msg += "\n"
|
|
||||||
|
|
||||||
# log response
|
|
||||||
err_msg += "====== response details ======\n"
|
|
||||||
err_msg += f"status_code: {resp.status_code}\n"
|
|
||||||
err_msg += f"headers: {resp.headers}\n"
|
|
||||||
err_msg += f"body: {repr(resp.text)}\n"
|
|
||||||
logger.error(err_msg)
|
logger.error(err_msg)
|
||||||
|
|
||||||
# extract
|
# extract
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from httprunner.exceptions import ValidationFailure
|
|||||||
from httprunner.models import IStep, StepResult, TStep
|
from httprunner.models import IStep, StepResult, TStep
|
||||||
from httprunner.models import TSqlRequest, SqlMethodEnum
|
from httprunner.models import TSqlRequest, SqlMethodEnum
|
||||||
from httprunner.response import SqlResponseObject
|
from httprunner.response import SqlResponseObject
|
||||||
from httprunner.runner import HttpRunner
|
from httprunner.runner import HttpRunner, USE_ALLURE
|
||||||
from httprunner.step_request import (
|
from httprunner.step_request import (
|
||||||
call_hooks,
|
call_hooks,
|
||||||
StepRequestExtraction,
|
StepRequestExtraction,
|
||||||
@@ -68,6 +68,18 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
if step.setup_hooks:
|
if step.setup_hooks:
|
||||||
call_hooks(runner, step.setup_hooks, step.variables, "setup request")
|
call_hooks(runner, step.setup_hooks, step.variables, "setup request")
|
||||||
|
|
||||||
|
# log request
|
||||||
|
sql_request_print = "====== sql request details ======\n"
|
||||||
|
sql_request_print += f"sql: {step.sql_request.sql}\n"
|
||||||
|
for k, v in parsed_request_dict.items():
|
||||||
|
v = utils.omit_long_data(v)
|
||||||
|
sql_request_print += f"{k}: {repr(v)}\n"
|
||||||
|
|
||||||
|
sql_request_print += "\n"
|
||||||
|
|
||||||
|
if USE_ALLURE:
|
||||||
|
import allure
|
||||||
|
allure.attach(sql_request_print, name="sql request details", attachment_type=allure.attachment_type.TEXT)
|
||||||
logger.info(f"Executing SQL: {parsed_request_dict['sql']}")
|
logger.info(f"Executing SQL: {parsed_request_dict['sql']}")
|
||||||
if step.sql_request.method == SqlMethodEnum.FETCHONE:
|
if step.sql_request.method == SqlMethodEnum.FETCHONE:
|
||||||
sql_resp = runner.db_engine.fetchone(parsed_request_dict["sql"])
|
sql_resp = runner.db_engine.fetchone(parsed_request_dict["sql"])
|
||||||
@@ -87,6 +99,16 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
raise SqlMethodNotSupport(
|
raise SqlMethodNotSupport(
|
||||||
f"step.sql_request.method {parsed_request_dict['method']} not support"
|
f"step.sql_request.method {parsed_request_dict['method']} not support"
|
||||||
)
|
)
|
||||||
|
# log response
|
||||||
|
sql_response_print = "====== sql response details ======\n"
|
||||||
|
for k, v in sql_resp.items():
|
||||||
|
v = utils.omit_long_data(v)
|
||||||
|
sql_response_print += f"{k}: {repr(v)}\n"
|
||||||
|
|
||||||
|
if USE_ALLURE:
|
||||||
|
import allure
|
||||||
|
allure.attach(sql_request_print, name="sql response details", attachment_type=allure.attachment_type.TEXT)
|
||||||
|
|
||||||
resp_obj = SqlResponseObject(sql_resp, parser=runner.parser)
|
resp_obj = SqlResponseObject(sql_resp, parser=runner.parser)
|
||||||
step.variables["sql_response"] = resp_obj
|
step.variables["sql_response"] = resp_obj
|
||||||
|
|
||||||
@@ -96,21 +118,7 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
|
|
||||||
def log_sql_req_resp_details():
|
def log_sql_req_resp_details():
|
||||||
err_msg = "\n{} SQL DETAILED REQUEST & RESPONSE {}\n".format("*" * 32, "*" * 32)
|
err_msg = "\n{} SQL DETAILED REQUEST & RESPONSE {}\n".format("*" * 32, "*" * 32)
|
||||||
|
err_msg += sql_request_print + sql_response_print
|
||||||
# log request
|
|
||||||
err_msg += "====== sql request details ======\n"
|
|
||||||
err_msg += f"sql: {step.sql_request.sql}\n"
|
|
||||||
for k, v in parsed_request_dict.items():
|
|
||||||
v = utils.omit_long_data(v)
|
|
||||||
err_msg += f"{k}: {repr(v)}\n"
|
|
||||||
|
|
||||||
err_msg += "\n"
|
|
||||||
|
|
||||||
# log response
|
|
||||||
err_msg += "====== sql response details ======\n"
|
|
||||||
for k, v in sql_resp.items():
|
|
||||||
v = utils.omit_long_data(v)
|
|
||||||
err_msg += f"{k}: {repr(v)}\n"
|
|
||||||
logger.error(err_msg)
|
logger.error(err_msg)
|
||||||
|
|
||||||
# extract
|
# extract
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from loguru import logger
|
|||||||
from httprunner import utils
|
from httprunner import utils
|
||||||
from httprunner.exceptions import ValidationFailure
|
from httprunner.exceptions import ValidationFailure
|
||||||
from httprunner.models import IStep, StepResult, TStep, ProtoType, TransType
|
from httprunner.models import IStep, StepResult, TStep, ProtoType, TransType
|
||||||
from httprunner.runner import HttpRunner
|
from httprunner.runner import HttpRunner, USE_ALLURE
|
||||||
from httprunner.step_request import (
|
from httprunner.step_request import (
|
||||||
call_hooks,
|
call_hooks,
|
||||||
StepRequestExtraction,
|
StepRequestExtraction,
|
||||||
@@ -86,6 +86,17 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
if step.setup_hooks:
|
if step.setup_hooks:
|
||||||
call_hooks(runner, step.setup_hooks, step.variables, "setup request")
|
call_hooks(runner, step.setup_hooks, step.variables, "setup request")
|
||||||
|
|
||||||
|
# log request
|
||||||
|
thrift_request_print = "====== thrift request details ======\n"
|
||||||
|
thrift_request_print += f"psm: {psm}\n"
|
||||||
|
for k, v in parsed_request_dict.items():
|
||||||
|
v = utils.omit_long_data(v)
|
||||||
|
thrift_request_print += f"{k}: {repr(v)}\n"
|
||||||
|
thrift_request_print += "\n"
|
||||||
|
if USE_ALLURE:
|
||||||
|
import allure
|
||||||
|
allure.attach(thrift_request_print, name="thrift request details", attachment_type=allure.attachment_type.TEXT)
|
||||||
|
|
||||||
# thrift request
|
# thrift request
|
||||||
resp = runner.thrift_client.send_request(
|
resp = runner.thrift_client.send_request(
|
||||||
parsed_request_dict["params"], parsed_request_dict["method"]
|
parsed_request_dict["params"], parsed_request_dict["method"]
|
||||||
@@ -93,6 +104,15 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
resp_obj = ThriftResponseObject(resp, parser=runner.parser)
|
resp_obj = ThriftResponseObject(resp, parser=runner.parser)
|
||||||
step.variables["thrift_response"] = resp_obj
|
step.variables["thrift_response"] = resp_obj
|
||||||
|
|
||||||
|
# log response
|
||||||
|
thrift_response_print = "====== thrift response details ======\n"
|
||||||
|
for k, v in resp.items():
|
||||||
|
v = utils.omit_long_data(v)
|
||||||
|
thrift_response_print += f"{k}: {repr(v)}\n"
|
||||||
|
if USE_ALLURE:
|
||||||
|
import allure
|
||||||
|
allure.attach(thrift_request_print, name="thrift response details", attachment_type=allure.attachment_type.TEXT)
|
||||||
|
|
||||||
# teardown hooks
|
# teardown hooks
|
||||||
if step.teardown_hooks:
|
if step.teardown_hooks:
|
||||||
call_hooks(runner, step.teardown_hooks, step.variables, "teardown request")
|
call_hooks(runner, step.teardown_hooks, step.variables, "teardown request")
|
||||||
@@ -101,21 +121,7 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult:
|
|||||||
err_msg = "\n{} THRIFT DETAILED REQUEST & RESPONSE {}\n".format(
|
err_msg = "\n{} THRIFT DETAILED REQUEST & RESPONSE {}\n".format(
|
||||||
"*" * 32, "*" * 32
|
"*" * 32, "*" * 32
|
||||||
)
|
)
|
||||||
|
err_msg += thrift_request_print + thrift_response_print
|
||||||
# log request
|
|
||||||
err_msg += "====== thrift request details ======\n"
|
|
||||||
err_msg += f"psm: {psm}\n"
|
|
||||||
for k, v in parsed_request_dict.items():
|
|
||||||
v = utils.omit_long_data(v)
|
|
||||||
err_msg += f"{k}: {repr(v)}\n"
|
|
||||||
|
|
||||||
err_msg += "\n"
|
|
||||||
|
|
||||||
# log response
|
|
||||||
err_msg += "====== thrift response details ======\n"
|
|
||||||
for k, v in resp.items():
|
|
||||||
v = utils.omit_long_data(v)
|
|
||||||
err_msg += f"{k}: {repr(v)}\n"
|
|
||||||
logger.error(err_msg)
|
logger.error(err_msg)
|
||||||
|
|
||||||
# extract
|
# extract
|
||||||
|
|||||||
Reference in New Issue
Block a user