目錄
- 一、項目背景
- 二、論壇系統測試用例思維導圖
- 三、論壇系統測試
- 3.1界面測試
- 3.2登陸測試
- 3.3主頁測試
- 3.4個人中心測試
- 四、自動化測試腳本
- 4.1配置驅動
- 4.2創建瀏覽器類
- 4.3功能測試
- 4.3.1登陸測試
- 4.3.2注冊測試
- 4.3.3主頁測試
- 4.3.4帖子編輯
- 4.3.5運行主代碼
- 五、BUG分析
- 六、測試總結
一、項目背景
論壇系統致力于打造一個多元交流社區,吸引各領域專業人士、愛好者及普通用戶匯聚一堂。用戶可在開放的環境中充分交流。伴隨互聯網用戶群體持續壯大,尤其是年輕一代網民對在線交流和知識獲取的需求不斷攀升,論壇作為經典且有效的互動平臺,蘊藏著巨大發展潛力。通過論壇系統建設,期望滿足不同用戶的多樣化需求,提升信息交流效率與質量,為用戶創造更多價值,助力互聯網內容生態的健康、持續發展。
二、論壇系統測試用例思維導圖
對于論壇系統簡單可以分為六類方面進行測試:界面測試、安全測試、易用性測試、兼容性測試、功能測試。
三、論壇系統測試
3.1界面測試
- 用戶登陸框雖然沒有在屏幕正中央,好在用白色和背景板顏色區分更加顯眼,并標有黑體“用戶登陸”。
- 用戶名及密碼輸入框大小合適,讓用戶容易輸入。
- 登陸按鈕用藍色框格包圍使得用戶能加輕松登陸。
- “點擊注冊”字樣用藍色標識,時用戶容易找到。
- 密碼框內“小眼睛”有顯示密碼功能。
3.2登陸測試
- 用戶名及密碼為空時輸入框下顯示紅色“用戶名不能為空”或“密碼不能為空”字樣。
(用戶名:zhangsan 密碼:12345 為例)
- 輸入正確用戶名及錯誤密碼,提示用戶名或密碼錯誤.
- 輸入錯誤用戶名及正確密碼.
- 輸入正確用戶名及正確密碼
進入論壇主頁
3.3主頁測試
- 1.點擊發帖子
- 2.選擇板塊
- 3.輸入標題及內容
- 4.點擊發布
- 5.發布成功!!!
- 6.點擊輸入框輸入論壇測試
測試發現點擊搜索框內的放大鏡無法搜索。
- 7.點擊帖子標題
顯示進入帖子
- 8.點擊發私信
- 9.發布成功
測試顯示沒有查找私信功能
- 10.點擊回復
回復成功!!!
3.4個人中心測試
- 點擊主頁頭像
- 進入個人中心
- 點擊修改昵稱/郵箱地址/電話號碼
測試結果發現無法修改
- 點擊修改密碼
- 修改成功
四、自動化測試腳本
4.1配置驅動
Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。
WebDriverManager 是一個開源的 Java 庫,用于自動管理 Selenium WebDriver 所需的驅動程序(如 ChromeDriver、GeckoDriver、EdgeDriver 等)。它可以自動下載、設置和維護這些驅動程序,從而簡化了 Selenium 測試的配置過程
在pycharm軟件的設置中觀察是否安裝這兩個軟件包,如果沒有可能無法正常驅動打開本地瀏覽器
4.2創建瀏覽器類
- 每個功能都需要pycharm驅動瀏覽,若每個功能都有一份瀏覽器驅動,功能過多可能導致軟件崩潰,將驅動器類放入一個common文件,功能測試則放入test文件,image用于保存截屏圖片
。
- 驅動器類
Lunta實例化出Driver類,每次測試功能時調用類對象driver,防止每個功能模塊都創建一個新的驅動器。
import datetime
import os
import sys
import timefrom selenium import webdriver
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManagerclass Driver:driver=""def __init__(self):#打開edge驅動管理EdsIns=EdgeChromiumDriverManager().install()options=webdriver.EdgeOptions()#創建edge瀏覽器對象self.driver=webdriver.Edge(service=Service(EdsIns),options=options)# 截屏功能def getScreenShot(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(f'../images/{dirname}/' + filename)
Lunta=Driver()
4.3功能測試
4.3.1登陸測試
- 函數find_element()分別找出用戶名及密碼輸入框
- send_keys輸入內容
- click模擬用戶點擊登陸按鈕
- find_element找出主頁信息判斷是否登陸成功
import timefrom selenium.webdriver.common.by import Byfrom common.untils import Luntaclass LunTaLgoin:url=""driver=""def __init__(self):self.url="http://127.0.0.1:9580/sign-in.html"self.driver=Lunta.driverself.driver.get(self.url)#成功登陸def LTLoginTest(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("1234")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(2)#查找頭像是否登陸成功self.driver.find_element(By.CSS_SELECTOR,"#index_nav_avatar")#截屏登陸成功頁面Lunta.getScreenShot()# self.driver.find_element(By.CSS_SELECTOR,"#index_nav_avatar").click()# self.driver.find_element(By.CSS_SELECTOR,"#index_user_logout").click()# Lunta.getScreenShot()#登陸失敗def LTFailTest(self):#密碼錯誤self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)Lunta.getScreenShot()#檢測是否出現密碼錯誤彈窗self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")#清空內容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("zhang")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)Lunta.getScreenShot()# 檢測是否出現密碼錯誤彈窗self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")# 清空內容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("")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)Lunta.getScreenShot()# 檢測是否出現用戶名不能為空提示text=self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-3 > div").textassert text=="用戶名不能為空"# 清空內容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("zhang")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)Lunta.getScreenShot()# 檢測是否出現用戶名不能為空提示text = self.driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-2 > div > div").textassert text == "密碼不能為空"
4.3.2注冊測試
- click模擬點擊注冊按鈕
- find_element找出用戶名,昵稱,密碼及確認密碼輸入框
- send_keys輸入內容
- 注冊失敗是否有彈窗提示
- 注冊成功返回登陸界面是否能登陸
import timefrom selenium.webdriver.common.by import Byfrom common.untils import Lunta
class LunTareg:driver=""url=""def __init__(self):self.url = "http://127.0.0.1:9580/sign-in.html"self.driver = Lunta.driverself.driver.get(self.url)def LTreg(self):time.sleep(2)self.driver.implicitly_wait(2)self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()#注冊成功self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangs")self.driver.find_element(By.CSS_SELECTOR,"#nickname").send_keys("zhangs")self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#policy").click()self.driver.find_element(By.CSS_SELECTOR,"#submit").click()time.sleep(2)Lunta.getScreenShot()self.driver.back()#登陸self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangs")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)# 查找頭像是否登陸成功self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar")# 截屏登陸成功頁面Lunta.getScreenShot()time.sleep(2)self.driver.back()def LTrefaii(self):time.sleep(2)self.driver.implicitly_wait(2)#點擊注冊self.driver.find_element(By.CSS_SELECTOR,"body > div > div > div > div:nth-child(1) > div > div.text-center.text-muted.mt-3 > a").click()# 注冊失敗(用戶已存在)self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangs")self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("zhangs")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#policy").click()self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#是否彈窗提示self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")Lunta.getScreenShot()# 注冊失敗(用戶名為空)self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 是否提示text=self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(2) > div").textassert text=="用戶名不能為空"Lunta.getScreenShot()# 注冊失敗(昵稱為空)self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangs")self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 是否提示text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(3) > div").textassert text == "昵稱不能為空"Lunta.getScreenShot()# 注冊失敗(密碼為空)self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("zhangs")self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)# 是否提示text = self.driver.find_element(By.CSS_SELECTOR, "#signUpForm > div > div:nth-child(4) > div").textassert text == "密碼不能為空"Lunta.getScreenShot()# 注冊失敗(確認密碼錯誤)self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("12345")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()text=self.driver.find_element(By.CSS_SELECTOR,"#signUpForm > div > div:nth-child(5) > div > div").textassert text=="請檢查確認密碼"#未點擊同意self.driver.find_element(By.CSS_SELECTOR, "#policy").click()# 是否彈窗提示self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")Lunta.getScreenShot()self.driver.back()
4.3.3主頁測試
1.click點擊發帖子內容
2.send_keys輸入標題
3.send_keys輸入內容(編輯框外置無法完成交互)
4.Action鏈模擬點擊(click無法點擊)
import timefrom selenium.webdriver import ActionChains
from selenium.webdriver.common.by import Byfrom common.untils import Luntaclass LunTahome():driver=""url=""def __init__(self):# 登陸狀態urlself.driver=Lunta.driverself.url="http://127.0.0.1:9580/index.html"self.driver.get(self.url)def LTPuTest(self):self.driver.implicitly_wait(5)#點擊發布帖子self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post").click()#選擇板塊self.driver.find_element(By.CSS_SELECTOR,"#article_post_borad").click()#編輯框外置無法完成交互# 輸入標題,若能交互則完成以下命令# self.driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("如何年薪百萬")#self.driver.find_element(By.CSS_SELECTOR,"article_post_submit").click()# # Action鏈模擬點擊# element = self.driver.find_element(By.XPATH, '//*[@id="article_post_submit"]')# ActionChains(self.driver).move_to_element(element).click().perform()# # 提示帖子內容不能為空# self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")# Lunta.getScreenShot()#輸入標題self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").send_keys("如何年薪百萬")#Action鏈模擬點擊element=self.driver.find_element(By.XPATH,'//*[@id="article_post_submit"]')ActionChains(self.driver).move_to_element(element).click().perform()#提示帖子內容不能為空self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")Lunta.getScreenShot()# 不輸入標題self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").clear()# Action鏈模擬點擊element = self.driver.find_element(By.XPATH, '//*[@id="article_post_submit"]')ActionChains(self.driver).move_to_element(element).click().perform()# 提示輸入標題不能為空self.driver.find_element(By.CSS_SELECTOR, "body > div.jq-toast-wrap.bottom-right > div")Lunta.getScreenShot()self.driver.back()
4.3.4帖子編輯
- click點擊發帖子>私信>send_keys輸入內容>click點擊回復>find_element搜索"回復成功彈窗">click點擊回復>send_keys輸入內容>click點擊回復>find_element搜索“回復成功彈窗”>click點擊點贊
import timefrom selenium.webdriver.common.by import Byfrom common.untils import Luntaclass LunTaser:driver=""url=""def __init__(self):self.url="http://127.0.0.1:9580/index.html"self.driver=Lunta.driverself.driver.get(self.url)#搜索def LTaser(self):self.driver.implicitly_wait(5)self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input").send_keys("1234")#點擊搜索self.driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input").click()#搜索第一篇文章time.sleep(3)text=self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").textLunta.getScreenShot()#斷言是否搜索成功#assert text=="1234"#私信def LTiss(self):self.driver.implicitly_wait(5)Lunta.getScreenShot()self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()self.driver.find_element(By.CSS_SELECTOR,"#btn_details_send_message").click()self.driver.find_element(By.CSS_SELECTOR,"#index_message_receive_content").send_keys("上轉轉回收了吧")self.driver.find_element(By.CSS_SELECTOR,"#btn_index_send_message").click()Lunta.getScreenShot()#是否發布成功彈窗self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")Lunta.getScreenShot()#回復def LTreply(self):self.driver.implicitly_wait(5)time.sleep(5)self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()self.driver.find_element(By.CSS_SELECTOR,"#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll").send_keys("哇哈哈")self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply > span").click()#內容為空無法發送Lunta.getScreenShot()#提示請輸入內容self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div")#點贊def LTlike(self):self.driver.implicitly_wait(5)self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click()self.driver.find_element(By.CSS_SELECTOR,"#details_btn_like_count").click()#提示點贊成功self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div > h2")time.sleep(1)Lunta.getScreenShot()
4.3.5運行主代碼
from test import LunTaLgoin
from test import LunTahome
from test import LunTareg
from test import LunTaserif __name__ == '__main__':# 注冊失敗LunTareg.LunTareg().LTrefaii()# 注冊成功LunTareg.LunTareg().LTreg()#登陸失敗LunTaLgoin.LunTaLgoin().LTFailTest()#登陸成功LunTaLgoin.LunTaLgoin().LTLoginTest()#主頁測試LunTahome.LunTahome().LTPuTest()# 帖子測試LunTaser.LunTaser().LTaser()LunTaser.LunTaser().LTiss()LunTaser.LunTaser().LTreply()LunTaser.LunTaser().LTlike()
五、BUG分析
- 搜索框輸入內容無法點擊搜索
- 主頁板塊內容顯示不完全
- 昵稱、郵箱地址、電話號碼、個人簡介無法修改
六、測試總結
本次論壇系統測試旨在全面驗證系統功能的完整性、穩定性及用戶體驗,確保系統能夠滿足用戶在信息交流、內容發布等方面的需求。測試范圍涵蓋了前臺用戶操作功能以及后臺管理功能,采用了多種測試方法,包括功能測試、性能測試、兼容性測試等。