add:增加allure的内容,1.附加log文件 2.添加请求和返回详情

This commit is contained in:
duanchao.bill
2022-06-08 22:07:24 +08:00
parent 15b086e314
commit c70fdec576
4 changed files with 74 additions and 51 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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