這里寫自定義目錄標在這里插入代碼片題
- 一、測驗需求
- 1.1 測驗模塊
- 1.2 測驗內容
- 二、測驗設計思想
- 2.1 測驗用例
- 2.2 等價類劃分
- 三、測驗資料
- 四、測驗代碼(核心部分)
- 五、資料分析
- 5.1 測驗運行分析
- 六、測驗總結
- 6.1 技術亮點
- 6.1.1 使用springboot框架搭建專案
- 6.1.2 使用springsecurity安全框架
- 6.2 問題分析
- 6.3 作業總結
一、測驗需求
1.1 測驗模塊
登入功能模塊
系統用戶輸入相對應的賬號密碼登錄系統,只有在賬號和密碼都存在,并且密碼輸入正確的時候才能登錄成功,
產品 模塊 子模塊 功能 測驗點 優先級
學生管理系統 登錄模塊 學生登錄模塊 學生登錄 賬號密碼的一致性 高
| 產品 | 模塊 | 子模塊 | 功能 | 測驗點 | 優先級 |
|---|---|---|---|---|---|
| 學生管理系統 | 登錄模塊 | 學生登錄模塊 | 學生登錄 | 賬號密碼的一致性 | 高 |
1.2 測驗內容
使用【Selenium+Java+資料庫】進行資料驅動測驗,對自己搭建的Web專案做登入功能測驗
二、測驗設計思想
2.1 測驗用例
| 欄位名稱 | 描述 |
|---|---|
| 識別符號 | UC1 |
| 測驗項 | 登入功能 |
| 設計者 | 亮仔 |
| 測驗環境要求 | 與服務器可以正常連接 ;軟體:FireFox瀏覽器95.0.2 ,jdk1.8+,maven相關依賴以及TestNG相關jar包 |
| 測驗方法 | 黑盒測驗 |
| 輸入說明 | (1) 進入登錄界面(2)填寫登入資訊,其中所填寫的“用戶名”、“密碼”兩個輸入框不能為空,且登入的用戶資訊需要和注冊保存在資料庫里面的資料一致(3)點擊登入按鈕 |
| 輸出標準 | 界面提示資訊:(1)登入成功時有提示,并能夠跳轉成功的相關頁面(2)當輸入的資訊不符合要求時,要有具體提示(3)登入失敗的時,顯示登入失敗具體失敗的具體原因 |
| 特殊要求 | 進入到后臺登入頁面 |
| 用例之間的依賴性 | 無 |
2.2 等價類劃分
我們可以設用戶輸入的登入用戶名為:u_num,輸入的登入密碼為:p_word;正確對應存在的登入用戶名為:username,正確對應存在的登入密碼為:password,
一個用戶想要登入進后臺管理系統,需要滿足以下條件:
-
登入用戶名輸入框已填寫資料:
u_num ≠ 空
-
登入密碼輸入框已填寫資料:
p_word ≠ 空
-
如果表單資訊都填寫了,還要判斷填寫的用戶名存在:
u_num = username
-
如果用戶名存在,還要判斷填寫的密碼與存在用戶的密碼一致:
p_word = password
| 輸入條件 | 有效等價類編號 | 有效等價類 | 無效等價類編號 | 無效等價類 |
|---|---|---|---|---|
| 是否填寫用戶名 | (1) | u_num ≠ 空 | (2) | u_num = 空 |
| 是否填寫密碼 | (3) | p_word ≠ 空 | (4) | p_word = 空 |
| 是否存在用戶 | (5) | u_num= username | (6) | u_num≠ username |
| 是否密碼一致 | (7) | p_word = password | (8) | p_word ≠ password |
| 序號 | 輸入值 (u_num/p_word) | 覆寫等價類編號 | 輸出 |
|---|---|---|---|
| 1 | (“”,XXX) | (2),(3),(6),(8) | 請輸入用戶名 |
| 2 | (“”,"") | (2),(4),(6),(8) | 請輸入用戶名 |
| 3 | (“”,password) | (2),(3),(6),(7) | 請輸入用戶名 |
| 4 | (XXX,“ ”) | (1),(4),(6),(8) | 請輸入密碼 |
| 5 | (username,“ ”) | (1),(4),(5),(8) | 請輸入密碼 |
| 6 | (XXX,XXX) | (1),(3),(6),(8) | 用戶不存在 |
| 7 | (XXX,password) | (1),(3),(6),(7) | 用戶不存在 |
| 8 | (username,XXX) | (1),(3),(5),(8) | 密碼輸入錯誤 |
| 9 | (username,password) | (1),(3),(5),(7) | 登入成功 |
三、測驗資料
資料庫資料

| 測驗用例編號 | 輸入資料 | 預期值 |
|---|---|---|
| Case1 | u_num=1;p_word=123 | 登錄成功 |
| Case2 | u_num=1;p_word=456 | 密碼錯誤 |
| Case3 | u_num=1;p_word=”” | 密碼錯誤 |
| Case4 | u_num=””;p_word=123 | 用戶不存在 |
| Case5 | u_num=””;p_word=456 | 用戶不存在 |
| Case6 | u_num=””;p_word=”” | 用戶不存在 |
| Case7 | u_num=789;p_word=123 | 用戶不存在 |
| Case8 | u_num=789;p_word=456 | 用戶不存在 |
| Case9 | u_num=789;p_word=”” | 用戶不存在 |
四、測驗代碼(核心部分)

TestDatabase.java
package com.homework;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.openqa.selenium.firefox.FirefoxDriver;
import javax.swing.*;
import java.nio.file.Path;
import java.nio.file.attribute.UserDefinedFileAttributeView;
import java.sql.*;
import java.util.List;
import static org.testng.Assert.assertEquals;
//滑鼠操作
public class TestDatabase {
public WebDriver webDriver;
String Ori_url="http://localhost:8080/StuAMSystem/login/login.jsp";
String Succ_url="http://localhost:8080/StuAMSystem/ServletLogin";
@BeforeClass
public void setUpEnv() {
System.setProperty("webdriver.gecko.driver", "src/driver/geckodriver.exe");
//打開火狐瀏覽器
webDriver = new FirefoxDriver();
}
@Test(dataProvider = "getDatabaseData")
public void testDatabase(String u_num,String p_word,String result) throws InterruptedException {
webDriver.get("http://localhost:8080/StuAMSystem/login/login.jsp");
//將滑鼠移動到學生按鈕上點擊
Actions actions = new Actions(webDriver);
WebElement employee = webDriver.findElement(By.xpath("//*[@id=\"_body\"]/form/table/tbody/tr[3]/td/input[1]"));
//移動到元素上
actions.moveToElement(employee).click();
Thread.sleep(1000);
//選中賬號框
WebElement username = webDriver.findElement(By.xpath("//*[@id=\"_body\"]/form/table/tbody/tr[1]/td/input"));
actions.moveToElement(username).click().sendKeys(u_num);
Thread.sleep(1000);
//選中密碼框輸入密碼
WebElement password = webDriver.findElement(By.xpath("//*[@id=\"_body\"]/form/table/tbody/tr[2]/td/input"));
actions.moveToElement(password).click().sendKeys(p_word);
Thread.sleep(1000);
//選中登錄按鈕點擊
WebElement sub = webDriver.findElement(By.xpath("//*[@id=\"_body\"]/form/table/tbody/tr[4]/td/input[1]"));
actions.moveToElement(sub).click();
//登錄成功
if(webDriver.getTitle().equals("學生界面")){
assertEquals("登錄成功",result);
}
//賬號為空,密碼不為空
if(webDriver.getCurrentUrl()==Succ_url&&username==null&&password!=null){
assertEquals("賬號不存在",result);
}
//賬號不為空,密碼為空
if(webDriver.getCurrentUrl()==Succ_url&&username!=null&&password==null){
assertEquals("密碼錯誤",result);
}
//賬號密碼都為空
if(webDriver.getCurrentUrl()==Succ_url&&username==null&&password==null){
assertEquals("賬號不存在",result);
}
Thread.sleep(3000);
}
@AfterClass
public void tearDownEnv() throws InterruptedException {
Thread.sleep(3000);
webDriver.quit();
}
@DataProvider(name = "getDatabaseData")
public Object[][] getDatabaseData() throws ClassNotFoundException, SQLException {
//讀取資料庫檔案資訊
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql:///sam_student?useUnicode=true&characterEncoding=utf8&useSSL=false";
String username = "ckl";
String password = "ckl60236612";
Connection con = DriverManager.getConnection(url, username, password);
java.sql.Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from user_test ");
int total = 0;
while (rs.next()) {
total++;
}
Object[][] data = new Object[total][3];
rs.beforeFirst();
int a = 0;
while (rs.next()) {
data[a][0] = rs.getString("user_num");
data[a][1] = rs.getString("password");
data[a][2] = rs.getString("result");
a++;
}
return data;
}
}
五、資料分析
5.1 測驗運行分析
-
Case:1

-
Case:2

-
Case:3

-
Case:4,5

-
Case:6

-
Case:7,8,9

登入成功后跳轉到相應的后臺頁面:

測驗專案的運行如下:


所有測驗全都正確通過
六、測驗總結
6.1 技術亮點
6.1.1 使用springboot框架搭建專案
使用springboot框架能夠快速搭建專案,對主流的開發框架都提供了?配置集成(springboot內置了配置),且項?可以獨?運?、?需單獨配置servlet容器(內置了tomcat),極?提?了開發、部署效率,此外還提供了運?時監控系統(?志等),

6.1.2 使用springsecurity安全框架
SpringSecurity 基于 Spring 框架,提供了一套 Web 應用安全性的完整解決方案,能幫助我們更好地實作登入功能的認證和授權,
專案中的使用(部分示例):

6.2 問題分析
運行時不會有錯,但是會出現這么一段話:
Error: Channel closing: too late to send/recv, messages will be lost

之前是想在IDEA上下載可以生成testNG的報告插件,所以修改了pom.xml里的檔案內容,但是就會出現這個錯誤,
但是將pom.xml里的檔案內容還原回去之后,這個錯誤還是存在,上網搜索發現火狐瀏覽器就是存在這一問題,但是在最一開始時是不會有這個問題的,著實有點讓人不理解
修改前:

搜索到的火狐瀏覽器存在的問題:

6.3 作業總結
通過這次實驗,對軟體測驗有了更進一步的學習了解,在測驗程序之中也不斷的有問題出現,通過上網搜索來解決問題,自我感覺也提升了不少,也希望自己以后也可以更加的完善,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413381.html
標籤:其他
上一篇:(49)uniGUI 高大上的HyperServer-單機部署多個軟集群
下一篇:Linux學習筆記(8)
