Unittest接口測試生成報告和日誌方法

2021-02-14 全棧測試技術
HTML報告

直接把HTMLTestRunner.py放入工程目錄即可

報告腳本封裝

#HTNL格式報告
now = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')
htmlreport = reportpath + "/" + now + r"result.html"
print("測試報告生成地址:%s"% htmlreport)
fp = open(htmlreport, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
verbosity=2,
title="xxxx接口自動化測試報告",
description="用例執行情況")
runner.run(case) # case為所有的測試用例
fp.close()

LOG日誌

使用Python自帶的logging

直接飲用即可

import logging

log等級

級別何時使用DEBUG詳細信息,典型地調試問題時會感興趣。詳細的debug信息。INFO證明事情按預期工作。關鍵事件。WARNING表明發生了一些意外,或者不久的將來會發生問題(如『磁碟滿了』)。軟體還是在正常工作。ERROR由於更嚴重的問題,軟體已不能執行一些功能了。一般錯誤消息。CRITICAL嚴重錯誤,表明軟體已不能繼續運行了。NOTICE不是錯誤,但是可能需要處理。普通但是重要的事件。ALERT需要立即修復,例如系統資料庫損壞。EMERGENCY緊急情況,系統不可用(例如系統崩潰),一般會通知所有用戶。

logging.basicConfig()函數包含參數說明

參數名稱                描述filename指定日誌輸出目標文件的文件名(可以寫文件名也可以寫文件的完整的絕對路徑,寫文件名日誌放執行文件目錄下,寫完整路徑按照完整路徑生成日誌文件),指定該設置項後日誌信心就不會被輸出到控制臺了filemode指定日誌文件的打開模式,默認為'a'。需要注意的是,該選項要在filename指定時才有效format指定日誌格式字符串,即指定日誌輸出時所包含的欄位信息以及它們的順序。logging模塊定義的格式欄位下面會列出。datefmt指定日期/時間格式。需要注意的是,該選項要在format中包含時間欄位%(asctime)s時才有效level指定日誌器的日誌級別stream指定日誌輸出目標stream,如sys.stdout、sys.stderr以及網絡stream。需要說明的是,stream和filename不能同時提供,否則會引發 ValueError異常stylePython 3.2中新添加的配置項。指定format格式字符串的風格,可取值為'%'、'{'和'$',默認為'%'handlersPython 3.3中新添加的配置項。該選項如果被指定,它應該是一個創建了多個Handler的可迭代對象,這些handler將會被添加到root logger。需要說明的是:filename、stream和handlers這三個配置項只能有一個存在,不能同時出現2個或3個,否則會引發ValueError異常。

logging模塊中定義好的可以用於format格式字符串說明

欄位/屬性名稱使用格式描述asctime%(asctime)s將日誌的時間構造成可讀的形式,默認情況下是『2016-02-08 12:00:00,123』精確到毫秒name%(name)s所使用的日誌器名稱,默認是'root',因為默認使用的是 rootLoggerfilename%(filename)s調用日誌輸出函數的模塊的文件名;pathname的文件名部分,包含文件後綴funcName%(funcName)s由哪個function發出的log, 調用日誌輸出函數的函數名levelname%(levelname)s日誌的最終等級(被filter修改後的)message%(message)s日誌信息, 日誌記錄的文本內容lineno%(lineno)d當前日誌的行號, 調用日誌輸出函數的語句所在的代碼行levelno%(levelno)s該日誌記錄的數字形式的日誌級別(10, 20, 30, 40, 50)pathname%(pathname)s完整路徑 ,調用日誌輸出函數的模塊的完整路徑名,可能沒有process%(process)s當前進程, 進程ID。可能沒有processName%(processName)s進程名稱,Python 3.1新增thread%(thread)s當前線程, 線程ID。可能沒有threadName%(thread)s線程名稱module%(module)s調用日誌輸出函數的模塊名, filename的名稱部分,不包含後綴即不包含文件後綴的文件名created%(created)f當前時間,用UNIX標準的表示時間的浮點數表示;日誌事件發生的時間--時間戳,就是當時調用time.time()函數返回的值relativeCreated%(relativeCreated)d輸出日誌信息時的,自Logger創建以 來的毫秒數;日誌事件發生的時間相對於logging模塊加載時間的相對毫秒數msecs%(msecs)d日誌事件發生事件的毫秒部分。logging.basicConfig()中用了參數datefmt,將會去掉asctime中產生的毫秒部分,可以用這個加上

生成log腳本封裝

#LOG日誌記錄
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename=log_path + '/' + now + r"result.log",
filemode='w')
logger = logging.getLogger()
logger.info(case)

Unittest函數入口集成報告和日誌

# coding=utf-8
import unittest
import time,datetime
from common import HTMLTestRunner
from common.send_mail import sendmain
import os
import logging

now_path = os.path.dirname(os.path.realpath(__file__)) # 獲取當前路徑

report_path = os.path.join(now_path , "../report") # HTML報告存儲路徑
log_path = os.path.join(now_path , "../log") # LOG日誌存儲路徑

if not os.path.exists(report_path): os.mkdir(report_path)
case_path = os.path.join(now_path , "../case") # 測試用例路徑


def load_case(casepath=case_path, rule="test*.py"):
'''加載所有的測試用例'''
discover = unittest.defaultTestLoader.discover(casepath, pattern=rule,) # 定義discover方法的參數
return discover

def run_case(test_case, reportpath=report_path):
'''執行所有的用例, 並把結果寫入測試報告'''

#HTNL格式報告
now = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')
report = reportpath + "/" + now + r"result.html"
print("測試報告生成地址:%s"% report)
fp = open(report, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, verbosity=2, title="xxxx接口自動化測試報告", description="用例執行情況")

#LOG日誌記錄
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename=log_path + '/' + now + r"result.log",
filemode='w')
logger = logging.getLogger()
logger.info(test_case)

# 調用load_case函數返回值
runner.run(test_case)
fp.close()
time.sleep(2)
sendmain(report, mail_to=['yyyyyy@qq.com'])
print("發送測試報告郵件OK")

if __name__ == "__main__":
my_cases = load_case()
run_case(my_cases)

相關焦點

  • 軟體測試學習教程:單元測試之UnitTest測試框架
    也經常應用到UI自動化測試和接口自動化測試中,用來管理和維護測試用例腳本使用UnitTest框架的好處:1. 能夠組織多個用例去執行(可以把多條測試用例封裝成一個測試套件,實現批量執行測試用例)2.提供了豐富的斷言方法,方便對用例執行的結果進行判斷3. 能夠生成HTML格式的測試報告4.
  • Python單元測試框架-UnitTest以及測試報告
    test fixture:測試夾具,包含執行測試用例前的測試準備工作、測試用例執行後的清理工作(分別對應TestCase中的setUp()和tearDown()方法),測試準備和測試清理的目的是保證每個測試用例執行前後的系統狀態一致。
  • 一篇文章向你解釋什麼是Unittest單元測試框架(上)
    1)提供用例組織與執行2)提供豐富的斷言方法3)提供豐富的日誌與測試結果Unittest是Python自帶的單元測試框架,不僅適用於單元測試,還可用於Web、Appium、接口自動化測試用例的開發與執行。該測試框架可組織執行測試用例,並且提供豐富的斷言方法,判斷測試用例是否通過,並最終生成測試結果。
  • unittest測試框架
    =None定義驅動器放在模塊(即文件中),不要放在類中2.2 創建測試類class 類名(unittest.TestCase)括號內表示繼承不能省略2.3 創建初始化和還原環境的函數setUpClass(cls)
  • 乾貨丨Python接口測試自動化實戰及代碼示例:含get、post等方法
    最終選定 python 作為腳本開發語言,使用其自帶的 requests 和 urllib 模塊進行接口請求,使用優化後的 unittest 測試框架編寫測試接口函數,測試結果選用 HTMLTestRunner 框架予以展示,並使用 python 的 ssl 模塊支持 https 協議的驗證。接下來,我詳細地介紹這些模塊,並給出各個模塊完整的測試代碼。
  • unittest框架核心要素及應用
    測試報告6.1【知道】HTMLTestRunner"""0. 導包, import unittest1. 定義類,繼承unittest.TestCase2. 是一個fixture, 有前置後置方法3.title='這是報告標題', # 測試報告的標題 description='這是一個測試報告內容' # 測試報告的描述 ) # 4. runner把容器中測試用例運行 runner.run(suite)
  • python unittest使用基本過程
    前言unittest是python的標準的單元測試框架,能夠很好的和自動化測試相結合,並有獨立的測試報告框架。test suite測試套件,一系列測試用例或測試套件的集合。在unittest中由TestSuite類實現。test runner測試執行器,負責用例執行並生成測試報告,在unittest中提供了命令行模式和GUI模式來執行。
  • 細說unittest單元測試框架
    (4) test runner(測試運行器):一個測試運行器執行設定的測試用例並將測試結果反饋給用戶兩部分功能組成。 三、unittest框架中的特殊方法以及特殊方法執行順序 (1)自動化中要求所有的測試用例都繼承unittest.TestCase基類。
  • 自動化測試基礎篇:Selenium unittest 簡介
    Test fixture:對一個測試用例環境的搭建和銷毀,是一個fixture,通過覆蓋 TestCase的setUp()和tearDown()方法來實現。這個有什麼用呢?比如說在這個測試用例中需要訪問資料庫,那麼可以在setUp() 中建立資料庫連接以及進行一些初始化,在tearDown()中清除在資料庫中產生的數據,然後關閉連接。
  • Python自動化之unittest框架
    在金字塔模型的測試理論體系中,單元測試是最底層的測試,而且是測試覆蓋最多的層面。在自動化所有的測試體系中,不管是單元測試,還是接口測試以及基於UI的自動化測試,都需要單元測試框架,在Python語言中,最常用的單元測試框架是unittest和pytest,今晚主要來介紹unittest單元測試框架,後期逐步的介紹pytest測試框架在自動化測試中的應用。
  • 使用python的unittest做測試
    ()實現一個繼承unittest.TestCase的類,使用unittest.main()來測試該類中所有以test開頭的測試用例。value.convert_to_decimal()7 self.fail("Expected a TypeError")8 except TypeError, e:9 pass這個時候推推薦使用assertRaises二、使用setUp和tearDown每次運行test方法時,先用setUp
  • python測試函數模塊unittest
    1.測試函數在編寫完代碼後進行對代碼測試是否有錯誤2.pytho標準庫中的模塊unittest為代碼測試工具例如:name_function.py 模塊名def get_formatted_name(first, last): full_name = first + ' ' + last
  • itest(愛測試) 6.6.0 發布,新增拖拽生成接口測試斷言
    可按測試包分配測試用例執行,也可建測試迭代(含任務,測試包,BUG,接口)來組織測試工作,也有測試環境管理,還有很常用的測試度量;對於發版頻繁,需求常變,itest還可導出用例,線下修改、執行,新增後再導入(同步)到線上;且可根據測試策略來設置測試流程,並可實時調整;在測試看板中,能查看迭代報告,測試包執行情況,測試任務進展,也可以在看板上直接執行用包用例。
  • 光榮之路測試開發培訓班 | 半年期
    利用chrome瀏覽器輔助進行元素定位xpath絕對定位xpath相對定位xpath軸定位xpath定位實戰unittest模塊的了解及第一個demounittest的使用跳過測試方法、指定測試順序、unittest使用測試套件、使用斷言、輸出html測試報告ddt定義數據、
  • Python單元測試——深入理解unittest
    單元測試的重要性就不多說了,可惡的是python中有太多的單元測試框架和工具,什麼unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等這些,先不說如何寫單元測試,光是怎麼運行單元測試就有
  • Jmeter生成壓力測試報告
    Jmeter生成壓力測試報告根據各大招聘網站上的需求來看,熟悉Jmeter做性能測試已經幾乎成為必要條件了。那麼今天在這個給大家安利一波。怎麼使用Jmeter生成壓力測試報告呢?條件準備:1、Jmeter3.2(推薦使用,比較穩定)2、JDK1.8(windows下安裝)3、已經寫好了接口腳本的測試計劃(jmx文件)
  • Python之UnitTest中測試套件的使用
    測試套件的注意事項必須新建一個類對象存放套件,直接在UnitTest測試類中運行無法生效測試套件的創建suite = unittest.TestSuite('test_6'))suite.addTest(UnitForTest3('test_7'))基於Runner來運行測試套件runner = unittest.TextTestRunner()
  • 乾貨| 接口測試用例和報告模板
    要注意的是,實際工作場景中我們可能還會對接口之間的串聯和混合場景進行測試。二、測試報告模板接口測試報告很多時候會和接口性能測試報告一起,如果要單獨報告的話,可以考慮以下內容:都涉及到哪些發送方法?採用怎樣的請求格式?使用怎樣的返回標準?可用表格說明。 02  測試目的與範圍描述本次接口測試的目的、範圍與目標,內容應與本次接口測試的《接口測試實施方案》中的對應內容保持一致。
  • 自動化測試學習路線
    大部分原因還是因為你的驅動版本和瀏覽器版本對不上。等能訪問百度後,這裡印象很深的su和kw(具體是什麼等你學了就知道了)你會再去嘗試各種selenium的方法,去操作瀏覽器,這時候仿佛打開了新世界的大門,奧!原來自動化測試是這麼個東西!真神奇!
  • 接口自動化測試與Tesla自動化測試平臺
    那麼我們今天就由接口測試為切入點,講一講接口測試的概念和要點,講一講Tesla平臺,及其兩種測試模式(頁面接口模式與代碼託管模式)。文章嘗試從一些基礎知識開始講述,所以比較適合初學者。【使用代碼來進行接口測試】簡單來說,代碼對測試用例的組織和抽象能力更強,並且執行和驗證的能力更強,所以接口測試進階的形態是使用代碼來進行描述。但同時需要注意的是,代碼和自動化不是萬能的,也不是唯一決定測試水平的要素。【流水線技術】流水線的使用標誌著測試真正進入了自動化。