?一、編寫目的
本報告為抽獎系統測試報告,本項目可用于團體抽獎活動,包括了用戶注冊,用戶登錄,修改獎項以及抽獎等功能。?
二、項目背景
抽獎系統采用前后端分離的方法來實現,同時使用了數據庫來存儲相關的數據,同時將其部署到云服務器上。
前端主要有三個頁面構成:登錄頁、注冊頁、抽獎頁,以上模擬實現了較復雜的抽獎系統。其結合后端實現了以下的主要功能:登錄、增加抽獎活動、進行抽獎活動以及退出登錄等功能。
由于本項目沒有設計普通用戶注冊功能,所以所有的抽獎用戶又管理人員登錄之后再對普通用戶進行添加。
該在線抽獎系統可以實現個人用戶簡單的獲獎記錄,時間、標題、內容以及發布者等都可以進行詳細地查看。?
三、相關模塊
1.登錄模塊:登錄時用Session獲取用戶表,在獲取用戶id來使后端將用戶信息存儲在Session中,在登錄時通過獲取用戶對應的賬號以及密碼進行校驗,如果都匹配則給予token令牌放行,登錄通過,如果校驗失敗則需要重新輸入登錄信息,再次進行登錄校驗。
2.抽獎模塊:用戶通過請求發送數據到后端,后端獲取抽獎人員id并通過RequestMapping注解來處理前端的請求并返回響應。
3獎項模塊:通過后端實現了新增獎項,修改獎項,刪除獎項等功能,在修改獎項采用了批量更新,使用的方法是Mybaits批量操作,提升了效率。
四、測試環境
硬件配置
內存:8.00 GB
軟件配置
Windows11,Chrome瀏覽器(功能測試)
攔截統一:通過攔截器對http請求進行統一攔截并采用統一的響應數據格式。?
五、測試功能
該在線抽獎系統主要實現了以下幾個功能:登錄,活動中心設置,抽獎頁面設置。
登錄功能:
管理員登錄頁面實現了注冊功能,由于該活動由管理員來進行,普通賬戶注冊功能也是在管理員后臺進行信息填寫實現注冊。登錄成功后就會跳轉到活動中心頁面。在右上角有退出登錄按鍵,但是在未登錄情況下強制訪問頁面會提示用戶未登錄,強制返回到登錄頁。
活動中心頁面:
活動中心頁面分為三個模塊:活動管理、獎品管理、人員管理
活動管理:
可以查看所有活動,包括已經結束以及正在進行中的活動,可以新建抽獎活動。
獎品管理:
可以在獎項列表頁面查看獎品數量,在新建活動獎品頁面添加獎品。
人員管理:
可以在人員列表頁面查看人員信息,在人員注冊頁面填寫信息注冊參與活動的普通用戶
抽獎頁面設置:
在抽獎頁面點擊“開始”按鈕就會開始抽獎,此時就可以看到人員名稱正在翻滾,隨后產生一個中獎結果。在所有的獎項進行完畢之后,后續的活動狀態則會轉變為已經完成,頁面也會變成中獎名單以及分享結果鏈接,分享結果鏈接則是直接展現中獎頁面
六、測試過程
功能測試:
測試用例如下圖
?實際執行測試的部分操作步驟/截圖
1.正常登錄
2.用戶注冊測試
?3.跳轉到注冊頁面進行注冊
?4.登錄成功進入活動中心頁面
5.新建抽獎活動
圈選獎品
?圈選參與人員
創建活動
?創建成功
6.查看活動列表
?7.查看獎品列表
點擊下一頁,查看其他的獎品
?
8.創建獎品測試
上傳圖片
?創建獎品
?查看獎品列表
9.抽獎人員注冊測試(普通用戶注冊測試)
填寫信息
查看人員列表頁
?10.抽獎活動模塊測試
進入抽獎頁面
完成抽獎,查看該獎品的中獎人員
點擊下一步,測試下一個獎項的進行狀態
?完成所有獎品的抽獎行為之后,查看中獎名單
點擊分享鏈接,然后新建瀏覽器頁面粘貼進行訪問,查看中獎名單
?查看活動狀態轉換
自動化代碼編寫:
根據腦圖進行測試用例的編寫,可以按照每個頁面一個測試類的方式來組織。
首先,需要單獨創建一個公共屬性類,以方便進行代碼復用。
接下來,在各個測試類中進行測試用例的編寫。為了便于運行以及修改,可以使用測試套件。此外,啟動和現場截圖是頻繁進行復用的操作,因此可以單獨創建一個類進行存儲,并在需要的時候進行調用。
在編寫測試用例時,需要注意添加隱式等待,以確保頁面能夠正確加載和顯示。這樣可以有效避免因頁面未完全加載導致的測試失敗情況。
總之,按照腦圖的規劃,可以將測試用例按照頁面進行分組,結合測試套件和公共屬性類,以及單獨存儲啟動和現場截圖的類,來進行測試用例的編寫和組織。
1. 添加相關依賴pom.xml
<dependencies>
<!-- ? ? ? ?添加selenium依賴-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.seleniumhq.selenium</groupId>
? ? ? ? ? ? <artifactId>selenium-java</artifactId>
? ? ? ? ? ? <version>4.0.0</version>
? ? ? ? </dependency>
?
? ? ? ? <!-- ? ? ? ?保存屏幕截圖需要用到的包-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>commons-io</groupId>
? ? ? ? ? ? <artifactId>commons-io</artifactId>
? ? ? ? ? ? <version>2.6</version>
? ? ? ? </dependency>
?
? ? ? ? <!-- ? ? ? ?添加junit5依賴-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.junit.jupiter</groupId>
? ? ? ? ? ? <artifactId>junit-jupiter</artifactId>
? ? ? ? ? ? <version>5.8.2</version>
? ? ? ? ? ? <scope>test</scope>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.junit.platform</groupId>
? ? ? ? ? ? <artifactId>junit-platform-suite</artifactId>
? ? ? ? ? ? <version>1.8.2</version>
? ? ? ? ? ? <scope>test</scope>
? ? ? ? </dependency>
? ? </dependencies>
2. 新建包并在包下創建測試類以及公共類
以下是所建立的是common公共包和Tests測試包:
1公共類
創建驅動、保存現場截圖
注意:在保存現場截圖的時候命名是按時間來進行文件夾的劃分,然后圖片的名稱要體現出測試類的類名,方便進行問題的追溯。
注意文件名的動態獲取,注意時間格式的設置。
2登錄頁面測試?
?創建驅動,并打開頁面
?測試頁面是否正常打開
?測試正常登錄:多參數測試
?測試用戶注冊:多參數測試
?注意測試的順序,使用Order注解指定,否則可能會因為執行順序不對導致測試失敗
3獎項頁測試
?測試獎項頁是否可以正常打開
?測試獎品是否可以正確添加
?測試強制訪問后臺頁面,順便測試了“退出”按鈕
?測試抽獎頁是否可以正常打開
?測試抽獎頁的開始按鈕是否可以正常使用
?測試抽獎頁的抽獎行為是否正常
4抽獎頁測試
測試抽獎結果是否正確
測試抽獎結果分享鏈接能否正確訪問
測試活動狀態轉換是否正確
性能測試:?
使用Jmeter進行簡單性能測試:針對登錄、查看活動列表、人員列表,獎品頁面等功能進行簡單的性能測試。
對項目功能進行性能測試
七、項目源碼
@Test@Order(1)void LoginSuccess() throws InterruptedException {//打開登錄界面EdgeOptions options = new EdgeOptions();options.addArguments("--remote-allow-origins=*");EdgeDriver driver = new EdgeDriver(options);driver.get("http://62.234.43.231:8539/login.html");//輸入賬號密碼driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);driver.findElement(By.cssSelector("#username")).sendKeys("13721899916");driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);driver.findElement(By.cssSelector("#password")).sendKeys("dudududu");//提交按鈕driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);driver.findElement(By.cssSelector("#submit")).click();//跳轉到列表//獲取urldriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);String cur_url = driver.getCurrentUrl();driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);Assertions.assertEquals("http://127.0.0.1:9090/blogin.html",cur_url);//如果url是測試通過driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);String cur_admin = driver.findElement(By.cssSelector("#username")).getText();Assertions.assertEquals("admin",cur_admin);//展示admin}@Testvoid BlogList(){EdgeOptions options = new EdgeOptions();options.addArguments("--remote-allow-origins=*");EdgeDriver driver = new EdgeDriver(options);driver.get("http://127.0.0.1:9090/activities-list.html");