07 web 自動化之 Unittest 應用:測試報告裝飾器斷言

文章目錄

      • 一、常見的第三方庫結合 unittest 生產 html 格式測試報告
        • 1、HtmlTestRunner
        • 2、BeatifulReport
      • 二、裝飾器 @ unittest.skip 強制跳過&條件跳過
      • 三、unittest的常用斷言方法

一、常見的第三方庫結合 unittest 生產 html 格式測試報告

1、HtmlTestRunner

官網下載 HtmlTestRunner.py 只能支持 python2 版本,支持 Python3 ,需要做修改
路徑:python安裝路徑/Lib

import unittest
from TestReport.testcase_01 import TestCase01
import HTMLTestRunner# 加載用例
testcases = unittest.TestLoader().loadTestsFromTestCase(TestCase01)
# HTMLTestRunner 生成的測試報告
with open('F:/Pycharm/TestShop/TestReport/html_report.html', 'wb+') as hf:HTMLTestRunner.HTMLTestRunner(stream=hf,title="Html 測試報告",description="測試用例執行詳情").run(testcases)

HTMLTestRunner 文件內容

2、BeatifulReport

安裝三方庫:BeatifulReport

import unittest
from TestReport.testcase_01 import TestCase01
from BeautifulReport import BeautifulReport# 加載用例
testcases = unittest.TestLoader().loadTestsFromTestCase(TestCase01)
# BeautifulReport 生成的測試報告
BeautifulReport(testcases).report(description="Html 測試報告",filename="report_bf",report_dir="reports")

企業測試報告的優化及定制 優化測試報告模板 通過 js+html/html5
pytest+allure 生成更加美觀的測試報告+優化定制(裝飾器)

二、裝飾器 @ unittest.skip 強制跳過&條件跳過

import unittest
"""
@unittest.skip 強制跳過執行
@unittest.skipIf 符合條件,則跳過執行
@unittest.skipUnless 條件不成立,則跳過執行
"""
# @unittest.skipUnless(False,"裝飾器也可以作用于類,整個模塊下的用例強制跳過執行")
class TestCase01(unittest.TestCase):@unittest.skip("此用例暫時不啟用")def test_login(self):print('test_01')@unittest.skipIf(True,"符合條件,則跳過執行")def test_select_goods(self):print('test_02')@unittest.skipUnless(2>3, "不符合條件,則跳過執行")def test_put_to_cart(self):print('test_03')def test_pay_goods(self):print('test_04')
if __name__ == '__main__':unittest.main()

三、unittest的常用斷言方法

import unittest
from selenium import webdriver
import time
from selenium.webdriver.common.by import By'''
二、常用斷言方法
1、assertIn(字符1,字符2) 字符1是否包含在字符2
2、self.assertNotIn(字符1,字符2)  字符1不包含包含在字符2
self.assertEqual(參數1,參數2,"斷言失敗的描述")  參數1等于參數2
self.assertNotEqual(參數1,參數2,"斷言失敗的描述")參數不等于參數2
self.assertTrue(True)
self.assertFalse(False)
'''
class TestCase02(unittest.TestCase):def setUp(self) -> None:# 打開瀏覽器self.driver = webdriver.Edge()# 加載地址self.driver.get("http://116.62.63.211/shop/")def test_login(self):"""登錄用例"""username = "hc_test"password = "hctest123"el_login_link = self.driver.find_element(By.LINK_TEXT, "登錄")# 點擊登錄el_login_link.click()time.sleep(1)el_login = self.driver.find_element(By.XPATH, '//button[text()="登錄"]')el_username = self.driver.find_element(By.NAME, "accounts")el_password = self.driver.find_element(By.XPATH, '//input[@type="password"]')# 輸入用戶名el_username.send_keys(username)# 輸入密碼el_password.send_keys(password)# 點擊登錄time.sleep(1)el_login.click()time.sleep(2)# 斷言  獲取賬號的名稱=usernameel_username = self.driver.find_element(By.XPATH, "//div[@class='menu-hd']/em[2]")self.assertIn(username, el_username.text)def test_select_goods(self):"""檢索商品"""self.driver.get("http://116.62.63.211/shop/")select_goods = "手機"# 定位搜索輸入el_select = self.driver.find_element(By.ID, "search-input")el_select.send_keys(select_goods)el_button = self.driver.find_element(By.ID, "ai-topsearch")el_button.click()time.sleep(2)# 斷言:驗證測試結果與預期結果是否一致# 獲取商品列表的標題el_goods = self.driver.find_elements(By.XPATH, "//div[@class='items am-padding-bottom-xs']")# 判斷content是否包含手機字符?# 標題是否包含手機for el in el_goods:self.assertIn(select_goods, el.text, "商品標題中未包含檢索內容")def tearDown(self) -> None:self.driver.close()if __name__ == '__main__':unittest.main()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83190.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83190.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83190.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python 面向對象】

Python 的面向對象編程(OOP)通過類(Class)和對象(Object)實現代碼結構化,支持封裝、繼承和多態三大特性。以下是系統化指南: 一、類與對象基礎 1. 定義類 class Dog:# 類屬性&…

STM32F103_LL庫+寄存器學習筆記23 - PWM波形輸出及軟件方式調整周期與占空比

導言 脈寬調制(PWM)是 STM32 定時器最常用的輸出模式之一,廣泛應用于電機驅動、LED 調光、伺服控制和功率管理等場景。本篇文章將以 TIM5 為例,從寄存器層面深入剖析 PWM 輸出的原理與實現步驟。通過本篇博客,你不僅能…

堆(Heap)

1. 堆(Heap) 1.1. Python實現堆的插入、堆頂刪除和排序 class MaxHeap:def __init__(self):# 初始化空堆,使用列表表示self.heap []def insert(self, val):# 插入元素并執行上浮self.heap.append(val)self._sift_up(len(self.heap) - 1)de…

Spring類

BeanDefinition BeanDefinition表示Bean定義,BeanDefinition中存在很多屬性用來描述一個Bean的特點。比如: class,表示Bean類型scope,表示Bean作用域,單例或原型等lazyInit:表示Bean是否是懶加載initMeth…

在vue中this.$emit有哪些作用,事件監控具體含義,以及這些子組件能封裝哪些功能組件

this.$emit 的作用 this.$emit 的作用是觸發一個自定義事件,并將數據傳遞給父組件。父組件可以通過 v-on(或 )監聽這個事件,并在事件觸發時執行相應的處理函數。 this.content 的作用 this.content 是子組件的 props&#xff0…

前端流行框架Vue3教程:16. 組件事件配合`v-model`使用

組件事件配合v-model使用 如果是用戶輸入,我們希望在獲取數據的同時發送數據配合v-model 來使用,幫助理解組件間的通信和數據綁定。 🧩 第一步:創建子組件(SearchComponent.vue) 這個組件用于處理用戶的搜…

《Navicat之外的新選擇:實測支持國產數據庫的SQLynx核心功能解析》

數據庫工具生態的新變量 在數據庫管理工具領域,Navicat長期占據開發者心智。但隨著國產數據庫崛起和技術信創需求,開發者對工具的兼容性、輕量化和本土化適配提出了更高要求。近期體驗了一款名為SQLynx的國產數據庫管理工具(麥聰旗下產品&am…

AgenticSeek開源的完全本地的 Manus AI。無需 API,享受一個自主代理,它可以思考、瀏覽 Web 和編碼,只需支付電費。

?一、軟件介紹 文末提供程序和源碼下載 AgenticSeek開源的完全本地的 Manus AI。無需 API,享受一個自主代理,它可以思考、瀏覽 Web 和編碼,只需支付電費。這款支持語音的 AI 助手是 Manus AI 的 100% 本地替代品 ,可自主瀏覽網頁…

vue3.0的name屬性插件——vite-plugin-vue-setup-extend

安裝 這個由于是在開發環境下的一個插件 幫助我們支持name屬性 所以需要是-D npm i vite-plugin-vue-setup-extend -D在pasckjson中無法注釋每個插件的用處 可以在vscode中下載一個JsonComments這樣可以在json中添加注釋方便日后維護和查閱API 引入 在vite.config.js中 im…

Linux基礎 -- 在內存中使用chroot修復eMMC

Linux基礎 – 在內存中使用chroot修復eMMC 概述 本教程將介紹如何在Linux系統中,使用chroot在內存中構建一個臨時系統,并在不依賴原有系統的情況下修復eMMC(如/dev/mmcblk2)磁盤。該方法適用于嵌入式系統修復、磁盤清理以及離線…

人工智能、深度學習、機器學習的聯系與區別

定義 人工智能(AI - Artificial Intelligence) :是研究、開發用于模擬、延伸和擴展人的智能的理論、方法、技術及應用系統的一門新的技術科學。它旨在讓計算機能夠像人類一樣思考、學習和決策,涉及到諸如計算機視覺、自然語言處理…

web第二次課后作業--設計一個注冊登錄系統

一、頁面展示 登錄頁面 提交頁面 二、代碼 2.1 登錄頁面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><html> <head><meta http-equiv"Content-Type" content"…

電腦桌面便簽哪個好?2025年電腦免費用的便簽軟件推薦

我們都知道&#xff0c;一個優秀的桌面便簽軟件可以成為提高效率的得力助手。無論是記錄臨時靈感、管理待辦事項&#xff0c;還是提醒重要日程&#xff0c;合適的便簽工具都能讓您的數字生活更加有序。本文將為您介紹2025年最值得推薦的免費電腦桌面便簽軟件&#xff0c;從Wind…

【SPIN】用Promela驗證順序程序:從斷言到SPIN實戰(SPIN學習系列--2)

你寫了一段自認為“天衣無縫”的程序&#xff0c;但如何確保它真的沒有bug&#xff1f;靠手動測試&#xff1f;可能漏掉邊界情況&#xff1b;靠直覺&#xff1f;更不靠譜&#xff01;這時候&#xff0c;Promela SPIN組合就像程序的“顯微鏡”——用形式化驗證技術&#xff0c;…

LabVIEW中樣條插值實現及應用

在 LabVIEW 編程環境下&#xff0c;B - 樣條插值是處理數據擬合與曲線平滑的重要工具。它憑借靈活的特性和良好的數學性質&#xff0c;在眾多工程領域中發揮著關鍵作用&#xff0c;能夠高效地根據離散數據點生成平滑連續的曲線&#xff0c;為數據分析和處理提供了有力支持。 一…

【油藏地球物理正演軟件ColchisFM】基于數據驅動的油藏參數疊前地震反演研究進展

科吉思基于油藏地球物理參數的正演軟件ColchisFM&#xff0c;有機融合了巖石物理正演與地震正演&#xff0c;具有良好的適用性和便捷性&#xff0c;在業內已經廣泛使用。當用戶在做正演模擬的同時&#xff0c;自然會聯想到是否可以直接開展油藏地球物理參數反演呢&#xff1f;答…

互聯網大廠Java求職面試:AI與大模型集成的云原生架構設計

互聯網大廠Java求職面試&#xff1a;AI與大模型集成的云原生架構設計 引言 在現代互聯網企業中&#xff0c;AI與大模型技術的應用已經成為不可或缺的一部分。特別是在短視頻平臺、電商平臺和金融科技等領域&#xff0c;如何高效地將大模型集成到現有的云原生架構中是一個巨大…

Web GIS可視化地圖框架Leaflet、OpenLayers、Mapbox、Cesium、ArcGis for JavaScript

Mapbox、OpenLayers、Leaflet、ArcGIS for JavaScript和Cesium是五種常用的Web GIS地圖框架&#xff0c;它們各有優缺點&#xff0c;適用于不同的場景。還有常見的3d庫和高德地圖、百度地圖。 1. Mapbox 官網Mapbox Gl JS案列&#xff1a;https://docs.mapbox.com/mapbox-gl-…

專項智能練習(加強題型)-DA-02

2. 單選題 近年來&#xff0c;“斜杠青年”成為很多人的時尚追求。它指的是一群不再滿足“專一職業”生活方式&#xff0c;而選擇擁有多重職業和身份的多元生活人群。對此&#xff0c;有人認為&#xff0c;新產業新技術新業態不斷更迭&#xff0c;激烈的競爭促使青年人不斷進行…

使用gitbook 工具編寫接口文檔或博客

步驟一&#xff1a;在項目目錄中初始化一個 GitBook 項目 mkdir mybook && cd mybook git init npm init -y步驟二&#xff1a;添加書籍結構&#xff08;如 book.json, README.md&#xff09; echo "# 我的書" > README.md echo "{}" > bo…