[英]Pytest: best practices for logging using allure
現在我正在嘗試找出記錄 pytest 的最佳方法。 我將為此使用誘惑力。 記錄所有函數調用對我來說很重要,每個函數調用包含:
例如,我可以這樣做:
import allure
@allure.step("The sum of two numbers")
def my_sum(a, b):
result = a + b
with allure.step("Result: {}".format(result)):
pass
return result
def test_sum():
observed = my_sum(1, 2)
assert observed == 3
日志:
日志對我來說看起來不錯,但代碼看起來很難看。
第二種方式:
import allure
@allure.step("The sum of two numbers")
def my_sum(a, b):
result = a + b
allure.attach(str(result), 'Result', allure.attachment_type.TEXT)
return result
def test_sum():
observed = my_sum(1, 2)
assert observed == 3
日志:
日志看起來差了一點,但沒關系。 在這種情況下,將為每個附件創建單獨的文件。 恐怕會為大型日志創建大量附件,並且報告會運行緩慢。
同樣在這兩種情況下,我都需要為每個 function 添加大量代碼 + 為我的代碼添加時間戳看起來很難看。
請分享您使用 allure 進行日志記錄的最佳實踐。
PS 在我使用 Robot Framework 之前,該框架中的上述代碼如下所示:
*** Settings ***
*** Test Cases ***
Test Sum
${observed} My Sum 1 2
Should Be Equal As Strings ${observed} 3
*** Keywords ***
My Sum
[Arguments] ${a} ${b}
${result} Evaluate ${a} + ${b}
[Return] ${result}
日志:
理想情況下,我想得到這樣的日志。 日志包含 arguments、返回結果、function 中的所有步驟和時間戳。
我不確定我是否有一個解決方案可以讓您的日志看起來很容易與機器人框架的日志完全一樣,但我有一些提示給您:
您不必為 @allure.step 裝飾器提供任何消息,您可以將其留空,然后 allure 將獲取名稱和 arguments 並為您打印。
您可以通過這種方式將 allure 日志處理程序添加到您的記錄器中:在您的 conftest.py 中:
def pytest_runtestloop(session) -> None: allure_logger = AllureLogger() if allure_logger not in logger.handlers: logger.info('Adding Allure logger') logger.addHandler(allure_logger)
在另一個文件 allure_log_handler.py (或任何你想要的)中:
class AllureLogger(logging.Handler): def emit(self, record): if logging.DEBUG < record.levelno: # print to allure only "info" messages with allure.step(f'LOG ({record.levelname}): {record.getMessage()}'): pass # No need for content, since the step context is doing the work.
現在所有的“信息”日志都將被打印出來,可以稍微清理一下你的代碼。
您可以使用自己的裝飾器包裝 allure.step 並使用 timeit 或其他一些計時庫來檢查方法執行花費了多少時間並將其打印到您的日志中。
只要您打印到記錄器,就不需要allure.attach(str(result), 'Result', allure.attachment_type.TEXT)
。 allure 可以為您自動附加它-方法如下: 如何將 Pytest 的 append 日志記錄到 Allure 報告中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.