【博客系統UI自動化測試報告】

博客系統UI自動化測試報告

  • 一、項目背景
  • 二、測試內容
    • (一)測試用例
    • (二)測試賬號
    • (三)使用Selenium進行Web自動化測試
      • 1.環境搭建
      • 2.創建瀏覽器驅動
      • 3.編寫博客登陸模塊的測試用例代碼
      • 4.編寫博客主頁展示模塊的測試用例代碼
      • 5.編寫博客創作模塊的測試用例代碼
      • 6.編寫博客查看模塊的測試用例代碼
      • 7.編寫博客刪除模塊的測試用例代碼
      • 8.編寫博客退出模塊的測試用例代碼
      • 9.編寫測試截圖功能
      • 10.整合代碼,進行系統測試
  • (三)自動化測試總結
    • 1.自動化測試覆蓋模塊
    • 2.自動化測試用例數量
    • 3. 自動化測試代碼展示
    • 4.自動化測試部分截圖
    • 5. 自動化測試結果
    • 6. 測試評估
    • 7. 遺留問題
  • 總結


一、項目背景

本次博客系統UI自動化測試所用博客系統是基于SSM框架實現的個人博客系統,由博客登陸頁、博客主頁頁、博客創作頁、博客詳情頁所組成。成功登錄博客即可查看自己已發布的博客,也可以進行發布博客操作,通過使用Selenium定位web元素、對獲取到的元素進行操作等,對個人博客系統進行測試,測試的核心內容包括博客登錄、博客主頁展示、博客創作、博客修改、博客查看、博客刪除、博客退出等。同時該博客系統還可以實現記錄博客發布日期、時間等信息。

二、測試內容

注:測試的內容都是個人完成的,所以就不寫需求文檔和測試安排了。

(一)測試用例

設計測試用例方法一般從以下幾個方面設計:

功能測試、界面測試、性能測試、易用性測試、安全性測試、兼容性測試等六個方面進行設計,但是個人博客系統是一個web網站,主要是針對核心功能、界面測試、安全性測試、兼容性測試進行測試,編寫的測試用例如下:
在這里插入圖片描述
其中安全性測試和界面測試需要人工測試,就不過多涉及了,
本報告主要對功能模塊進行自動化測試。

(二)測試賬號

賬號用戶名密碼
賬號1zhangsan123456
賬號2lisi123456

(三)使用Selenium進行Web自動化測試

1.環境搭建

安裝與瀏覽器名稱和版本對應的webdrivermanager。
本次測試使用的驅動版本如下:

驅動版本
Edge瀏覽器138.0.3351.121 (正式版本) (64 位)
selenium4.0.0
webdriver-manager4.0.2

在這里插入圖片描述

2.創建瀏覽器驅動

創建一個驅動類(自定義名為Edge_Driver),通過在Edge_Driver中創建一個統一驅動對象對博客登錄、博客主頁展示、博客創作、博客修改、博客查看、博客刪除、博客退出等功能分別進行測試操作。

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Optionsclass Edge_Driver:driver=""def __init__(self):# EdgeDriver 路徑edge_driver_path = r"C:\Program Files (x86)\Microsoft\Edge\WebDriver\edgedriver_win64\msedgedriver.exe"service=Service(edge_driver_path)options = Options()options.add_argument("--remote-allow-origins=*")self.driver=webdriver.Edge(service=service,options=options)self.driver.implicitly_wait(2)

注:根據所要測試的功能可創建不同的測試類

3.編寫博客登陸模塊的測試用例代碼

(1)創建一個博客登陸測試類(自定義名為BlogLand)繼承Edge_Driver類,得到驅動driver

(2)根據博客登陸模塊測試用例創建不同的方法

	land.LandFailTest1()#輸入錯誤的賬號和錯誤的密碼land.LandFailTest2()#輸入錯誤的賬號和正確的密碼land.LandFailTest3()#輸入正確的賬號和錯誤的密碼land.LandFailTest4()#輸入非常規賬號和密碼land.LandFailTest5()#僅輸入賬號land.LandFailTest6()#僅輸入密碼land.LandFailTest7()#不做輸入land.LandTest()#輸入正確的賬號和密碼 
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.expected_conditions import alert_is_present
from common.webdriver import BlogDriver
class BlogLand:url=""driver=""def __init__(self):self.url = "http://8.137.19.140:9090/blog_login.html"self.driver = BlogDriver.driver#登陸成功def LandTest1(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR,"#password").clear()self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()BlogDriver.GetImage()text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3").textassert text=='zhangsan'self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)").click()def LandTest2(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("lisi")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()BlogDriver.GetImage()text = self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > h3").textassert text == 'lisi'self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)").click()#輸入錯誤的賬號和錯誤的密碼def LandFailTest1(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR,"#password").clear()self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhannsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123457")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='用戶不存在'alert.accept()BlogDriver.GetImage()#輸入錯誤的賬號和正確的密碼def LandFailTest2(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhanasan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='用戶不存在'alert.accept()BlogDriver.GetImage()#輸入正確的賬號和錯誤的密碼def LandFailTest3(self):self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("122456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='密碼錯誤'alert.accept()BlogDriver.GetImage()#輸入非常規賬號和密碼def LandFailTest4(self):self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("$@:zda85545><?~")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("$@:zda85545><?~")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='用戶不存在'alert.accept()BlogDriver.GetImage()#僅輸入賬號def LandFailTest5(self):self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='賬號或密碼不能為空'alert.accept()BlogDriver.GetImage()#僅輸入密碼def LandFailTest6(self):self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.implicitly_wait(2)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='賬號或密碼不能為空'alert.accept()BlogDriver.GetImage()#不做輸入def LandFailTest7(self):self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.implicitly_wait(2)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='賬號或密碼不能為空'alert.accept()BlogDriver.GetImage()land = BlogLand()

(3)單獨對該模塊進行自動化測試

4.編寫博客主頁展示模塊的測試用例代碼

(1)創建一個博客主頁展示類(自定義名為BlogShow)繼承Edge_Driver類,得到驅動driver

(2)根據博客主頁展示模塊測試用例創建不同的方法

	LandShow()#登陸狀態下主頁展示LandFailShow()#未登錄狀態主頁展示
import time
from selenium.webdriver.common.by import By
from common.webdriver import BlogDriverclass BlogShow:url = ""driver=""def __init__(self):self.url = "http://8.137.19.140:9090/blog_login.html"self.driver=BlogDriver.driverself.driver.get(self.url)#登陸狀態下主頁展示def LandShow(self):self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()BlogDriver.GetImage()text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3").textassert  text=="zhangsan"text=self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > span").textassert text =="我的博客系統"text=self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)").textassert text =="注銷"text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)").textassert text =="文章"text=self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)").textassert text =="分類"#未登錄狀態主頁展示def LandFailShow(self):self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)").click()BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(4)").click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)").click()time.sleep(1)BlogDriver.GetImage()# text=self.driver.find_element(By.CSS_SELECTOR,"#submit").text# print(text)# assert  text =="發布文章"self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='賬號或密碼不能為空'alert.accept()BlogDriver.GetImage()Show = BlogShow()

(3)單獨對該模塊進行自動化測試

5.編寫博客創作模塊的測試用例代碼

(1)創建一個博客創作展示類(自定義名為BlogPush)繼承Edge_Driver類,得到驅動driver

(2)根據博客創作模塊測試用例創建不同的方法

	BPush()#博客創作Modify()#博客修改
from common.webdriver import BlogDriver
import timefrom selenium.webdriver.common.by import Byclass BlogPush:driver=""url=""def __init__(self):self.driver=BlogDriver.driverself.url="http://8.137.19.140:9090/blog_login.html"# 博客創作def BPush(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)").click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(1)alert=self.driver.switch_to.alertalert.accept()self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("博客系統UI自動化測試")BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)").click()# 博客修改def Modify(self):self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > a").click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(1)").click()BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("123")BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)").click()push=BlogPush()

(3)單獨對該模塊進行自動化測試

6.編寫博客查看模塊的測試用例代碼

(1)創建一個博客查看展示類(自定義名為BlogFind)繼承Edge_Driver類,得到驅動driver

(2)根據博客查看模塊測試用例創建不同的方法

#博客查看
LandFind():
from common.webdriver import BlogDriver
import timefrom selenium.webdriver.common.by import Byclass BlogFind:url=""driver=""def __init__(self):self.url = "http://8.137.19.140:9090/blog_login.html"self.driver=BlogDriver.driver#博客查看def LandFind(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > a").click()text=self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.title").textBlogDriver.GetImage()assert  text=='博客系統UI自動化測試123'text=self.driver.find_element(By.CSS_SELECTOR, "#h2-u5728u8FD9u91CCu5199u4E0Bu4E00u7BC7u535Au5BA2").textassert  text=='在這里寫下一篇博客'self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()find=BlogFind()

(3)單獨對該模塊進行自動化測試

7.編寫博客刪除模塊的測試用例代碼

(1)創建一個博客刪除類(自定義名為BlogPop)繼承Edge_Driver類,得到驅動driver

(2)根據博客刪除博客刪除模塊測試用例創建不同的方法

BPop()#博客刪除
import timefrom selenium.webdriver.common.by import Byfrom common.webdriver import BlogDriverclass BlogPop:driver=""url=""def __init__(self):self.driver=BlogDriver.driverself.url="http://8.137.19.140:9090/blog_login.html"def BPop(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > a").click()time.sleep(1)BlogDriver.GetImage()self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='確定刪除?'alert.dismiss()self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='確定刪除?'alert.accept()BlogDriver.GetImage()pop=BlogPop()

(3)單獨對該模塊進行自動化測試

8.編寫博客退出模塊的測試用例代碼

(1)創建一個博客退出類(自定義名為BlogExit)繼承Edge_Driver類,得到驅動driver

(2)根據博客退出模塊測試用例創建不同的方法
注:博客正常退出在前幾個模塊不斷被使用,故這里只編寫了不正常退出。

BExit()#博客不正常退出
import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Servicefrom common.webdriver import BlogDriverclass BlogExit:driver=""url=""def __init__(self):self.url="http://8.137.19.140:9090/blog_login.html"self.driver=BlogDriver.driverdef BExit(self):self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()self.driver.quit()edge_driver_path = r"C:\Program Files (x86)\Microsoft\Edge\WebDriver\edgedriver_win64\msedgedriver.exe"service=Service(edge_driver_path)options = Options()options.add_argument("--remote-allow-origins=*")self.driver=webdriver.Edge(service=service,options=options)self.driver.get(self.url)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)alert = self.driver.switch_to.alerttext=alert.textassert text=='賬號或密碼不能為空'alert.accept()self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(1)self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()time.sleep(1)self.driver.quit()exit=BlogExit()

(3)單獨對該模塊進行自動化測試

9.編寫測試截圖功能

測試截圖可在自動化測試過程中進行截圖操作并保存,這有利于自動化測試結果的觀察。
因為該截圖功能可能會被反復調用,故可以將其和創建驅動對象寫到一起。

import datetime
import os
import sys
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Optionsclass Edge_Driver:driver=""def __init__(self):# EdgeDriver 路徑edge_driver_path = r"C:\Program Files (x86)\Microsoft\Edge\WebDriver\edgedriver_win64\msedgedriver.exe"service=Service(edge_driver_path)options = Options()options.add_argument("--remote-allow-origins=*")self.driver=webdriver.Edge(service=service,options=options)self.driver.implicitly_wait(2)def GetImage(self):dirname = datetime.datetime.now().strftime('%Y-%m-%d')if not os.path.exists("../images/" + dirname):os.mkdir("../images/" + dirname)filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"self.driver.save_screenshot("../images/" + dirname + "/" + filename)BlogDriver=Edge_Driver()

10.整合代碼,進行系統測試

將前面寫的代碼都放入main函數中運行。

from auto_Chrome_bolgtest import EdgeBlogLand
from auto_Chrome_bolgtest import EdgeBlogShow
from auto_Chrome_bolgtest import EdgeBlogFind
from auto_Chrome_bolgtest import EdgeBlogPush
from auto_Chrome_bolgtest import EdgeBlogPop
from auto_Chrome_bolgtest import EdgeBlogExitif __name__=="__main__":#博客登陸EdgeBlogLand.land.LandFailTest1()#輸入錯誤的賬號和錯誤的密碼EdgeBlogLand.land.LandFailTest2()#輸入錯誤的賬號和正確的密碼EdgeBlogLand.land.LandFailTest3()#輸入正確的賬號和錯誤的密碼EdgeBlogLand.land.LandFailTest4()#輸入非常規賬號和密碼EdgeBlogLand.land.LandFailTest5()#僅輸入賬號EdgeBlogLand.land.LandFailTest6()#僅輸入密碼EdgeBlogLand.land.LandFailTest7()#不做輸入EdgeBlogLand.land.LandTest1()#輸入正確的賬號和密碼EdgeBlogLand.land.LandTest2()  # 輸入正確的賬號和密碼#博客主頁展示EdgeBlogShow.Show.LandShow()EdgeBlogShow.Show.LandFailShow()#博客創作EdgeBlogPush.push.BPush()EdgeBlogPush.push.Modify()#博客查看EdgeBlogFind.find.LandFind()#博客刪除EdgeBlogPop.pop.BPop()#博客退出EdgeBlogExit.exit.BExit()

(三)自動化測試總結

1.自動化測試覆蓋模塊

博客登錄、博客主頁展示、博客創作、博客修改、博客查看、博客刪除、博客退出

2.自動化測試用例數量

	自動化測試用例數量:33個

3. 自動化測試代碼展示

博客UI自動化測試代碼鏈接:
https://gitee.com/pluck-his-hair/primary-project/tree/master/auto_test

4.自動化測試部分截圖

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

5. 自動化測試結果

        項目功能用例99.999999%通過

6. 測試評估

核心功能測試通過,項目達到上線基本要求

7. 遺留問題

問題預期結果實際結果遺留原因
博客主頁展示頁面中文章數量跟隨博客數量的變動而進行改變始終為2測試時間緊張,留至下版本更新處理
博客主頁GitHub 地址能顯示且能跳轉不能顯示但能跳轉測試時間緊張,留至下版本更新處理
部分擴展功能測試抓緊實現暫未實現測試時間緊張,未能涉及全模塊

總結

測試代碼編寫可能出現錯誤的原因:
隱式等待有時會改變代碼執行順序出現報錯,可加入強制等待,確保頁面加載完成,提高自動化的穩定性。

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

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

相關文章

簡單手寫Transformer:原理與代碼詳解

Transformer 作為 NLP 領域的里程碑模型&#xff0c;徹底改變了序列建模的方式。它基于自注意力機制&#xff0c;擺脫了 RNN 的序列依賴&#xff0c;實現了并行計算&#xff0c;在機器翻譯、文本生成等任務中表現卓越。本文將從零開始&#xff0c;手寫一個簡化版 Transformer&a…

Numpy科學計算與數據分析:Numpy入門之數組操作與科學計算基礎

Numpy入門實踐&#xff1a;從零開始掌握科學計算利器 學習目標 通過本課程的學習&#xff0c;學員將了解Numpy的歷史背景、核心特點及其在科學計算中的重要性。學員將掌握如何使用Numpy進行數組操作&#xff0c;包括數組的創建、索引、切片以及基本的數學運算&#xff0c;為后…

python:講懂決策樹,為理解隨機森林算法做準備,以示例帶學習,通俗易懂,容易理解和掌握

為什么要講和學習決策樹呢?主要是決策樹(包括隨機森林算法)不需要數據的預處理。現實世界的數據往往“臟亂差”,決策樹讓你在數據準備上可以少花很多功夫,快速上手,用起來非常的“省心”。總之,決策樹是機器學習領域里最直觀易懂、解釋性最強、應用最廣泛的基礎模型之一…

C語言:單鏈表學習

文件&#xff1a;main.c #include "linkedList.h"int main(int argc, char *argv[]) {// 創建頭結點NODE *head NULL;// 創建鏈表if (llist_create(&head, 666) < 0){perror("鏈表創建失敗&#xff01;");return -1;}// 向鏈表插入數據llist_addTa…

使用 decimal 包解決 go float 浮點數運算失真

文章目錄問題解決注意問題 go float 在運算的時候會出現精度問題 package mainimport ("fmt" )func main() {var a float64 0.3var b float64 0.6fmt.Println("ab", ab) // 你以為是 0.9 但是結果是&#xff1a;0.8999999999999999 }你觀察到的 0.3 …

MongoDB學習專題(六)復制集和分片集群

1、概念MongoDB復制集的主要意義在于實現服務高可用&#xff0c;類似于Redis中的哨兵模式2、功能1. 數據寫入主節點時將數據復制到另一個副本節點上2. 主節點發生故障時自動選舉出一個新的替代節點在實現高可用的同時&#xff0c;復制集實現了其他幾個作用數據分發&#xff1a;…

vue3對比vue2的性能優化和提升 :Vue 3 vs Vue 2

1.性能提升 1.1.響應式系統的改進: 從 Object.defineProperty 到 Proxy Vue2:Vue 2 的響應式系統基于 Object.defineProperty,它為每個屬性單獨設置 getter 和 setter。雖然能夠滿足基本需求,但它在以下方面存在性能瓶頸: Vue2 中數組監聽的局限性:Vue2 通過Object.defi…

進程生命周期管理:從創建到終止的完整邏輯

前言 在操作系統的世界里&#xff0c;進程就像一個個忙碌的 “工作單元”&#xff0c;從被創建到完成任務后終止&#xff0c;始終遵循著一套嚴謹的生命周期規則。理解進程的生命周期管理&#xff0c;是揭開操作系統多任務調度神秘面紗的關鍵 —— 而這其中&#xff0c;進程的創…

【顯示器】背光板的結構和工作原理

背光板是LCD&#xff08;液晶顯示器&#xff09;中的一個重要組件&#xff0c;它負責提供屏幕所需的光源。下面我們詳細解釋背光板的結構和工作原理。背光板的基本結構一個典型的背光板由以下幾個主要部分組成&#xff1a;LED燈條&#xff1a;通常使用白色LED作為光源。導光板&…

hadoop HDFS 重置詳細步驟

有時候我們需要對hdfs重置&#xff0c;步驟如下&#xff1a; 1、停止服務 2. 清除日志節點ssh dmp-hdfs-ns1 rm -rf /disk1/dfs/jn/meta/*ssh dmp-hdfs-ns2 rm -rf /disk1/dfs/jn/meta/*ssh dmp-hdfs-dt1 rm -rf /disk1/dfs/jn/meta/*ssh dmp-hdfs-dt2 rm -rf /disk1/dfs/jn/me…

前端性能優化:從請求到資源的精細調控

在用戶體驗為王的時代&#xff0c;前端性能直接決定產品的留存率。本文聚焦 “減少不必要的傳輸與加載損耗”&#xff0c;從 合并HTTP請求、啟用壓縮、減少Cookie、資源加載順序 四個維度&#xff0c;拆解優化思路與落地方法。 一、合并HTTP請求&#xff1a;突破瀏覽器并發瓶頸…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博輿情數據可視化分析-熱詞情感趨勢柱狀圖

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解微博輿情數據可視化分析-熱詞情感趨勢柱狀圖…

腳本統計MongoDB集合結構信息

場景&#xff1a; 當想統計mongodb集合的結構是什么數據類型時。 1.利用variety.js解析 https://github.com/variety/variety 2.腳本 #!/bin/bash#userxxx #passwxxx host1xx.1x.1x.150 port27010 dbhgrtabs$(echo "show collections"|mongo ${host}:${port}/${db}|g…

訂單簿流動性分析與機器學習在大單匹配中的應用

一、訂單簿流動性的基本概念 1.1 訂單簿的結構與組成 在金融市場中&#xff0c;訂單簿&#xff08;Order Book&#xff09;是買賣雙方提交的限價訂單的集合&#xff0c;通常以價格優先、時間優先的原則進行排序。訂單簿由多個層級的價格檔位組成&#xff0c;每個檔位包含若干限…

CSS :is () 與 :where ():簡化復雜選擇器的 “語法糖”

在 CSS 編寫中&#xff0c;你是否遇到過這樣的場景&#xff1a;需要給多個不同父元素下的子元素設置相同樣式&#xff0c;結果寫出一長串重復的選擇器&#xff1f;比如給header、main、footer中的p標簽設置相同的顏色&#xff0c;傳統寫法可能是header p, main p, footer p { c…

vue打包號的文件如何快速查找文件打包后的位置

解析“explorer yz-front-dist”&#xff1a;前端開發者的實用命令小知識 在前端開發的日常工作中&#xff0c;我們經常會接觸到各種命令行操作&#xff0c;其中“explorer yz-front-dist”是一個看似簡單卻暗藏實用價值的命令。對于剛接觸開發的新手來說&#xff0c;理解它的含…

Go語言數據類型深度解析:位、字節與進制

Go語言數據類型深度解析&#xff1a;位、字節與進制 在計算機編程中&#xff0c;數據類型是構建一切的基礎。理解不同數據類型的特性、內存占用以及在不同場景下的應用&#xff0c;對于編寫高效、可靠的代碼至關重要。 本文將深入探討Go語言中的數據類型系統&#xff0c;重點講…

計算機視覺(opencv)——圖像本質、數字矩陣、RGB + 基本操作(實戰一)

OpenCV 入門教程&#xff1a; OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺庫&#xff0c;廣泛應用于圖像處理、視頻分析、機器學習等領域。 在 Python 中&#xff0c;cv2 是 OpenCV 的主要接口模塊。本文將帶你一步步掌握 cv2…

【數據庫】使用Sql Server創建索引優化查詢速度,一般2萬多數據后,通過非索引時間字段排序查詢出現超時情況

大家好&#xff0c;我是全棧小5&#xff0c;歡迎來到《小5講堂》。 這是《Sql Server》系列文章&#xff0c;每篇文章將以博主理解的角度展開講解。 溫馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不對之處望指正&#xff01; 目錄前言SQL 創建索引…

MyBatis聯合查詢

文章目錄數據庫設計MyBatis 配置MyBatis 映射文件Mapper 接口總結數據庫設計 建表 SQL CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL );CREATE TABLE order (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,order_no VARCHAR(…