博客系統功能測試

博客系統網址: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描述:
用戶未登錄狀態下仍能編輯博客,且點擊發布博客后內容丟失,未能正常跳轉至登錄頁登錄后發布博客
在這里插入圖片描述

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

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

相關文章

項目制作流程

一、使用 CRA 創建項目 npx create-react-app name 二、按照業務規范整理項目目錄 (重點src目錄) 三、安裝插件 npm install sass -Dnpm install antd --savenpm install react-router-dom 四、配置基礎路由 Router 1. 安裝路由包 react-router-dom …

ngx_http_random_index_module 模塊概述

一、使用場景 隨機內容分發 當同一目錄下存放多份等價內容(如多張輪播圖、不同版本靜態頁面等)時,可通過隨機索引實現負載均衡或流量分散。A/B 測試 通過目錄請求自動隨機分配用戶到不同測試組,無需后端邏輯參與。動態“首頁”選…

智能權限守護者:基于Python描述符的動態角色控制實現

智能權限守護者:基于Python描述符的動態角色控制實現 引言:當描述符遇見權限管理 在Python的魔法方法體系中,描述符(Descriptor)以其優雅的屬性訪問控制機制著稱。當我們將描述符與RBAC(基于角色的訪問控制)模型結合,就能創造出既靈活又安全的動態權限管理系統。本文…

Linux 的 UDP 網絡編程 -- 回顯服務器,翻譯服務器

目錄 1. 回顯服務器 -- echo server 1.1 相關函數介紹 1.1.1 socket() 1.1.2 bind() 1.1.3 recvfrom() 1.1.4 sendto() 1.1.5 inet_ntoa() 1.1.6 inet_addr() 1.2 Udp 服務端的封裝 -- UdpServer.hpp 1.3 服務端代碼 -- UdpServer.cc 1.4 客戶端代碼 -- UdpClient.…

Linux 內核等待機制詳解:prepare_to_wait_exclusive 與 TASK_INTERRUPTIBLE

1. prepare_to_wait_exclusive 函數解析 1.1 核心作用 prepare_to_wait_exclusive 是 Linux 內核中用于將進程以獨占方式加入等待隊列的關鍵函數,其主要功能包括: 標記獨占等待:通過設置 WQ_FLAG_EXCLUSIVE 標志,表明此等待條目是獨占的。 安全入隊:在自旋鎖保護下,將條…

【Android構建系統】了解Soong構建系統

背景介紹 在Android7.0之前,Android使用GNU Make描述和執行build規則。Android7.0引入了Soong構建系統,彌補Make構建系統在Android層面變慢、容易出錯、無法擴展且難以測試等缺點。 Soong利用Kati GNU Make克隆工具和Ninja構建系統組件來加速Android的…

信息學奧賽一本通 1539:簡單題 | 洛谷 P5057 [CQOI2006] 簡單題

【題目鏈接】 ybt 1539:簡單題 洛谷 P5057 [CQOI2006] 簡單題 【題目考點】 1. 樹狀數組 模板題及講解:洛谷 P3374 【模板】樹狀數組 【解題思路】 解法1:樹狀數組 該有01構成數組初值都為0。 某位置的元素被修改奇數次后值為1&#x…

倉頡開發語言入門教程:搭建開發環境

倉頡開發語言作為華為為鴻蒙系統自研的開發語言,雖然才發布不久,但是它承擔著極其重要的歷史使命。作為鴻蒙開發者,掌握倉頡開發語言將成為不可或缺的技能,今天我們從零開始,為大家分享倉頡語言的開發教程,…

玉米籽粒發育

成熟玉米籽粒的結構 玉米籽粒的組成 成熟的玉米籽粒主要由以下三部分組成: 母體組織:包括種皮、胎座和花梗。種皮由珠被發育而來,起到保護種子的作用,并在種子的休眠和萌發中發揮重要作用。胚:包含根分生組織、莖分…

sherpa-ncnn:音頻處理跟不上采集速度 -- 語音轉文本大模型

目錄 1. 問題報錯2. 解決方法 1. 問題報錯 報錯: An overrun occurred, which means the RTF of the current model on your board is larger than 1. You can use ./bin/sherpa-ncnn to verify that. Please select a smaller model whose RTF is less than 1 fo…

Postman一直打不開的解決辦法

Postman 是一款非常流行的開源 API 開發工具,主要用于構建、測試、調試和文檔化應用程序接口(API)。但有時它的性能不會特別穩定,功能限制和擴展性不足;應用于開發、測試、運維等環節,尤其在開發 RESTful A…

問題|對只允許輸入的變量是否進行了更改

“對只允許輸入的變量是否進行了更改”這一問題的核心是:在編程中,某些變量被設計為僅用于輸入(只讀),但在代碼中可能被意外修改,導致潛在錯誤。以下是詳細解釋: 1. 什么是“只允許輸入的變量”…

RPC與SOAP的區別

一.RPC(遠程過程調用)和SOAP(簡單對象訪問協議)均用于實現分布式系統中的遠程通信,但兩者在設計理念、協議實現及應用場景上存在顯著差異。 二.對比 1.設計理念 2.協議規范 3.技術特性 4.典型應用場景 5.總結 三.總結…

c#的內存指針操作(僅用于記錄)

c#也可以直接操作內存指針,如下為示例: unsafe {byte[] a {1,2,3};fixed (byte* p1 a, p2 &a[^1]){Debugger.Log(1, "test", $"max index:{p2-p1}");Debugger.Log(1, "test", $"address:{(long)p1:X}")…

Jsp技術入門指南【十三】基于 JSTL SQL 標簽庫實現 MySQL 數據庫連接與數據分頁展示

Jsp技術入門指南【十三】基于 JSTL SQL 標簽庫實現 MySQL 數據庫連接與數據分頁展示 前言一、回顧SQL標簽的內容1. 什么是JSTL SQL標簽?2.為什么要用SQL標簽?3.第一步:引入SQL標簽庫4. SQL標簽的核心功能:連接數據庫標簽常用屬性&…

羽毛球訂場小程序源碼介紹

基于ThinkPHP、FastAdmin以及UniApp開發的羽毛球訂場小程序源碼,這款小程序旨在為羽毛球愛好者提供便捷的場地預訂服務。 該小程序前端采用UniApp框架開發,具有良好的跨平臺兼容性,可以一鍵發布至iOS和Android平臺,極大地提高了開…

Unreal Engine: Windows 下打包 AirSim項目 為 Linux 平臺項目

環境: Windows: win10, UE4.27, Visual Studio 2022 Community.Linux: 22.04 windows環境安裝教程: 鏈接遇到的問題(問題:解決方案) 點擊Linux打包按鈕,跳轉至網頁而不是執行打包流程:用VS打開項…

SpringBoot 3.x 集成 MyBatisPlus

文章目錄 集成 MyBatisPlus第 1 步:創建 SpringBoot 項目第 2 步:添加 MyBatisPlus 依賴第 3 步:編寫 CRUD 代碼創建 Entity創建 Mapper創建 Service編寫 Controller第 4 步:執行初始化 SQL第 5 步:配置第 6 步:測試測試 ControllerMapper 層單元測試參考?? 目標 1:基…

java基礎-抽象類和抽象方法

1.abstract 可以修飾:類、方法 (1)修飾類: 類不能被實例化; 抽象類一定有構造器,便于子類實例化時調用; (2)修飾方法:抽象方法 只有方法的聲明&#xff…

解決電腦問題(8)——網絡問題

電腦網絡出現問題的原因較為復雜,以下是從網絡連接、網絡配置以及網絡環境等方面的常見問題及解決方法: 網絡連接問題 檢查物理連接:對于有線網絡,檢查網線是否插好,網線有無破損、斷裂等情況。對于無線網絡&#xff…