博客系統網址:http://8.137.19.140:9090/blog_list.html
主要測試內容
功能測試、界面測試、性能測試、易用性測試、安全測試、兼容性測試、弱網測試、安裝卸載測試、壓力測試…
測試方法及目的
利用selenium和python編寫測試腳本,對博客系統進行的相關功能進行測試,找出該網址的潛在問題
測試思路講解:本測試項目的規模比較小,僅需要對四個主要頁面進行功能測試即可,因此本文直接從頁面入手開始編寫自動化測試腳本–即一個頁面對應一個測試方法,不需要細分出多個功能進行單獨測試。另外需要聲明,本文使用的測試框架不夠成熟,代碼冗余繁多,仍有很多有待改進的地方,請各位看官老爺多多指教指教()
博客系統測試案例
功能測試
其他測試
注意:本文僅針對該網頁進行功能測試,其他測試(如界面測試、性能測試等)暫不列入測試范圍
測試板塊 ---- 四大頁面
登錄頁面
登錄頁面展示
前提條件–用戶處于登錄狀態下,且當前打開的是博客詳情頁的鏈接。主要測試功能–1.檢查頁面元素,檢查文章標題、發布時間、內容等是否正確展示。2.點擊編輯按鈕,看是否正常跳轉至對應文章的編輯頁,若為成功跳轉檢查按鍵是否異常,用戶的網絡是否通暢,并返回對應異常信息等。
博客列表頁
博客列表頁內容展示
前提條件 – 用戶已登陸賬號,且已跳轉至博客列表頁面。主要測試功能–1.檢查頁面元素,檢查用戶頭像、昵稱、文章數、外部鏈接等信息是否展示錯誤等。
2.功能測試,點擊外部鏈接,測試是否跳轉至對應網站;點擊查看全文看是否跳轉至對應文章的詳情頁。
博客詳情頁
博客詳情頁展示
前提條件–用戶處于登錄狀態下,且當前打開的是博客詳情頁的鏈接。主要測試功能–1.檢查頁面元素,檢查文章標題、發布時間、內容等是否正確展示。2.點擊編輯按鈕,看是否正常跳轉至對應文章的編輯頁,若為成功跳轉檢查按鍵是否異常,用戶的網絡是否通暢,并返回對應異常信息等。
編輯頁面
編輯頁面展示
前提條件,檢查用戶通過何種方式打開編輯頁面,若用戶通過右上角寫博客方式進入,則標記為發布新博客,若用戶通過詳情頁點擊編輯進入編輯頁面則標記為修改博客內容。主要測試功能–元素檢查,若用戶以新發布博客方式進入本頁則僅需檢查文本框以及圖上的相關功能是否能夠正常使用即可,若用戶以修改內容的方式進入本頁則除了上述功能外仍需查看文章標題及內容是否和打開的文章一致。
自動化代碼示例
# 創建驅動對象 Utils
from selenium import webdriver# 在這個文件中配置好通用的信息
class Driver:driver = ""# 構造函數def __init__(self):self.driver = webdriver.Chrome()# driver = webdriver.Chrome()# if driver is None:# raise RuntimeError("無法啟動 Chrome WebDriver!")blogdriver = Driver()
# BlogLogin 測試登錄功能
from common.Utils import blogdriver
from selenium.webdriver.common.by import By
import timeclass BlogLogin: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 ElementsCheckUp(self):text = self.driver.find_element(By.CSS_SELECTOR,'body > div.container-login > div > h3').textprint(text)text = self.driver.find_element(By.CSS_SELECTOR, 'body > div.container-login > div > div:nth-child(2) > span').textprint(text)text = self.driver.find_element(By.CSS_SELECTOR, 'body > div.container-login > div > div:nth-child(3) > span').textprint(text)text = self.driver.find_element(By.CSS_SELECTOR, '#submit').textprint(text)#成功登錄測試def LoginSuccess(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("123456")# 點擊提交self.driver.find_element(By.CSS_SELECTOR,'#submit').click()time.sleep(5)# 檢查是否登錄成功 -- by用戶名self.driver.find_element(By.CSS_SELECTOR,'body > div.container > div.left > div > h3')# 注銷賬號恢復初始狀態self.driver.find_element(By.CSS_SELECTOR,'body > div.nav > a:nth-child(6)').click()# 異常登錄測試 -- 賬號和密碼為空def LoginFail001(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,'#submit').click()# 檢查是否登錄失敗time.sleep(3)alert = self.driver.switch_to.alertassert alert.text == "賬號或密碼不能為空"# 關閉彈窗self.driver.switch_to.alert.accept()# 異常登錄測試 -- 正確賬號和錯誤密碼def LoginFail002(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('123')self.driver.find_element(By.CSS_SELECTOR,'#submit').click()# 檢查是否登錄失敗time.sleep(3)alert = self.driver.switch_to.alertassert alert.text == "密碼錯誤"# 關閉彈窗self.driver.switch_to.alert.accept()# 異常登錄測試 -- 錯誤賬號和正確密碼def LoginFail003(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('zhanglisi')self.driver.find_element(By.CSS_SELECTOR,'#password').send_keys('123456')self.driver.find_element(By.CSS_SELECTOR,'#submit').click()# 檢查是否登錄失敗time.sleep(3)alert = self.driver.switch_to.alertassert alert.text == "用戶不存在"# 關閉彈窗self.driver.switch_to.alert.accept()# 異常登錄測試 -- 錯誤賬號和錯誤密碼def LoginFail004(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('zhangsanlisi')self.driver.find_element(By.CSS_SELECTOR, '#password').send_keys('123')self.driver.find_element(By.CSS_SELECTOR, '#submit').click()# 檢查是否登錄失敗time.sleep(3)alert = self.driver.switch_to.alertassert alert.text == "用戶不存在"# 關閉彈窗self.driver.switch_to.alert.accept()
# BlogList 測試博客列表頁
from common.Utils import blogdriver
from selenium.webdriver.common.by import By
import timeclass BlogList:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_list.html"self.driver = blogdriver.driverself.driver.get(self.url)def UnLoginTest(self):# self.driver.get('http://8.137.19.140:9090/blog_login.html')time.sleep(5)elmtext:str = self.driver.find_element(By.CSS_SELECTOR, 'div.container-login h3').textprint(elmtext)assert elmtext == "登陸"def ElementCheckUpByLogin(self):time.sleep(3)# 清空文本框內容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()time.sleep(10)# 檢查是否登錄成功 -- by用戶名print(self.driver.find_element(By.CSS_SELECTOR, 'div.left h3').text)# 獲取外部鏈接print(self.driver.find_element(By.CSS_SELECTOR, 'div.left a').text)# 獲取文章總數print(self.driver.find_element(By.CSS_SELECTOR, 'div.left div:nth-child(5) > span:nth-child(1)').text)# 獲取文章分類print(self.driver.find_element(By.CSS_SELECTOR, 'div.left div:nth-child(5) > span:nth-child(2)').text)# 獲取列表頁信息 -- 第一篇文章標題print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > div.title').text)# 第一篇文章發布的時間print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > div.date').text)# 第一篇文章內容print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > div.desc').text)# 查看原文信息print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > a').text)def SeeMoreByLogin(self):# 檢查用戶是否在登錄狀態下time.sleep(2)print(self.driver.find_element(By.CSS_SELECTOR, 'div.left h3').text)# 點擊查看全文self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > a').click()time.sleep(2)# 檢查是否跳轉至詳情頁# print(self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(1)').text)# print(self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(2)').text)# 返回列表頁,繼續完成后續測試self.driver.back()def UpElementByLogin(self):# 點擊主頁self.driver.find_element(By.CSS_SELECTOR, 'div.nav > a:nth-child(4)').click()# 檢查是否跳轉至主頁 -- 通過昵稱和博客列表第一篇的標題time.sleep(2)print(self.driver.find_element(By.CSS_SELECTOR, 'div.left h3').text)print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > div.title').text)time.sleep(2)# 點擊寫博客self.driver.find_element(By.CSS_SELECTOR, 'div.nav > a:nth-child(5)').click()# 檢查是否跳轉成功 -- 通過發布博客print(self.driver.find_element(By.CSS_SELECTOR, '#submit').get_attribute('value'))self.driver.back()time.sleep(2)self.driver.find_element(By.CSS_SELECTOR,'body > div.nav > a:nth-child(6)').click()# 檢查是否注銷成功print(self.driver.find_element(By.CSS_SELECTOR, 'div.container-login h3').text)
# BlogDetail 測試博客詳情頁
from common.Utils import blogdriver
from selenium.webdriver.common.by import By
import timeclass BlogDetail:url = ''driver = ''def __init__(self):self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=91386"self.driver = blogdriver.driverself.driver.get(self.url)def UnLoginTest(self):# 未登錄狀態下打開博客詳情頁 -- 跳轉至登錄頁面 --> 檢測是否跳轉至登錄頁time.sleep(3)print(self.driver.find_element(By.CSS_SELECTOR, 'div.container-login > div > h3').text)def ElementCheckUpByLogin(self):# 未登錄 -- 跳轉至登錄界面time.sleep(3)# 清空文本框內容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()time.sleep(5)# 檢查是否登錄成功 -- by用戶名print(self.driver.find_element(By.CSS_SELECTOR, 'body > div.container > div.left > div > h3').text)# 打開詳情頁self.driver.find_element(By.CSS_SELECTOR, 'div.right > div:nth-child(1) > a').click()time.sleep(2)# 檢查是否跳轉成功print(self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(1)').text)print(self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(2)').text)# 檢查文章標題-時間-內容print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div > div.title').text)print(self.driver.find_element(By.CSS_SELECTOR, 'div.right > div > div.date').text)print(self.driver.find_element(By.CSS_SELECTOR, '#h2-u5728u8FD9u91CCu5199u4E0Bu4E00u7BC7u535Au5BA2').text)def FunctionTestByLogin(self):time.sleep(3)# 檢查編輯按鈕是否正常self.driver.find_element(By.CSS_SELECTOR, 'div.right div.operating > button:nth-child(1)').click()time.sleep(2)# 檢查是否跳轉成功print(self.driver.find_element(By.CSS_SELECTOR, '#submit').text)# 返回博客詳情頁面界面self.driver.back()time.sleep(3)# self.driver.find_element(By.CSS_SELECTOR, 'div.right > div > div.operating > button:nth-child(2)').click()
from common.Utils import blogdriver
from selenium.webdriver.common.by import By
import timeclass BlogEdit:url = ''driver = ''def __init__(self):self.url = "http://8.137.19.140:9090/blog_edit.html"self.driver = blogdriver.driverself.driver.get(self.url)def EditTestFromUrl(self):time.sleep(5)UpText = self.driver.find_element(By.CSS_SELECTOR, '#submit').get_attribute('value')if UpText == '發布文章':print("當前正在編輯文章,進入方式為使用URL")self.driver.find_element(By.CSS_SELECTOR, '#title').send_keys("哈哈哈")self.driver.find_element(By.CSS_SELECTOR,'#submit').click()self.driver.quit()
項目Bug
bug描述:文章總數與實際總數不一致
bug2描述:
用戶未登錄狀態下仍能編輯博客,且點擊發布博客后內容丟失,未能正常跳轉至登錄頁登錄后發布博客