【原創】Selenium學習系列之(七)—ConnectDB和複用測試方法
兩個完全不搭邊的東西怎麼說明呢,既然不好說那就不多說,通過例子來理解。
需求我們要實現一個這樣的測試情境:
登入系統時,若loginID正確,但密碼錯誤,連續三次密碼輸入錯誤後,系統會lock user。
怎麼實現呢??
我們先來分析一下,前提是要輸入正確的loginID,但loginID我們可能不是很清楚,怎麼辦?需要連續三次輸入,那麼要寫三個test來依次執行嗎,不妨可以先按照自己的想法實現一下。
既然講複用測試方法,肯定不是要寫三個test了。當一個操作經常頻繁使用時,我們可以將它抽象出來寫成一個方法,然後呼叫測試方法即可,下面的說明會給出答案。
首先介紹一下將要使用的幾個類或測試類。
A.類SetUpDriver,用來初始化和啟動IEdriver
B.類ConnectDB—用來連線DB,裡面包含getUserName的方法,用來獲得loginID。
C.類Login —包含loginSuccess 和loginFailed兩個測試方法
loginSuccess(String uname,String pwd)是valid testdata測試-valid LoginID 和valid password
loginFailed(String uname,String pwd,String errorMsgExpected)是invalid test data 測試-invalid LoginID/invalid password
D.測試類LoginLockedTest ,測試三次密碼輸入錯誤後lockuser功能
SetUpDriver.class
顧名思義,就知道這個類是用來SetUpIEDriver的,這個類以前都用過了,所以就不多說了。
ConnectDB
下圖就是傳說的的連線DB,它其實就是Java中的JDBC連線,都是固定的格式,只不過我建立了一個傳參方法getUserName(String sql)用來get LoginID,裡面的sql是我們自定義的,可以根據實際需要修改。
特別說明一下:
uname = rs.getString(“login”);
上面括號中的 login 是 user表中 的一個欄位名稱,存放的就是LoginID,也就是我們在登入頁面要輸入的,當然可以根據需要改為 其它的欄位,比如password
Login
下面的截圖我只貼出了類中的兩個傳參方法,定義這兩個有什麼用?真的,很有用的~
請跳轉到LoginLockedTest
LoginLockedTest—最終的連續三次輸入來嘍。
看到下面圖框中的三行指令碼了嗎, 就是這樣實現,有沒有感覺好簡單^^. 反正我當時的感覺是,前面所以的辛苦都值了。也許有人說,太大費周章了,直接執行三次也可以實現,但是login這塊的功能,其實操作都是相似的,只是輸入的測試資料不同而且,我們有好多case都可以通過login中的兩個測試方法來實現。我把這個叫做複用~~~
如果想加深理解可以試著去實現下面三個情境,其實通過上面的login中的方法都可以實現噠~
a.valid loginID & invalid password
b.invalid loginID & valid password
c.invalid loginID & invalid password
就這樣如果指令碼看懂了,理解了,實踐了,那麼Webdriver中連線DB合複用測試方法 完成了。看不懂耶沒關係,學習本身就是循序漸進的。
附指令碼(根據需要微調,如 package 部分)
SetUpDriver
package common;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class SetUpDriver {
private static WebDriver driver;
public static WebDriver getWebDriver() {
if (driver == null) {
// Set environment variable for “webdriver.ie.driver” through
// system.setProperty
System.setProperty(“webdriver.ie.driver”,
“D:\\mySoftware\\IEDriverServer\\IEDriverServer.exe”);
// The below setting must be done if IE setting is in Protected mode
DesiredCapabilities ieCapabilities = DesiredCapabilities
.internetExplorer();
ieCapabilities
.setCapability(
InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
driver = new InternetExplorerDriver(ieCapabilities);
}
return driver;
}
}
ConnectDB
package initial;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnectDB {
private String url = “jdbc:oracle:thin:@100.200.89.151:1521:11gdb”;
private String dbuname = “abc”;
private String dbpwd = “abc”;
private String uname = “”;
private Connection conn = null;
private Statement st = null;
private ResultSet rs = null;
public String getUserName(String sql) {
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);
conn = DriverManager.getConnection(url, dbuname, dbpwd);
st = conn.createStatement();
rs = st.executeQuery(sql);
if (rs.next()) {
uname = rs.getString(“login”);
System.out.println(“##Successful## Connect DB get username: ”
+ uname);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return uname;
}
public static void main(String args[]){
String sqlExpression=”select * from users where login like ‘amy1%'”;
ConnectDB conn=new ConnectDB();
conn.getUserName(sqlExpression);
}
}
Login
package common;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Login {
private WebDriver driver;
// login url
private String url = “http://100.200.10.33:12345/login.jsp”;
// login successfull page
private String loginUrl = “http://100.200.10.33:12345/siteLogon.eppic”;
// The main page
private String mainUrl = “http://100.200.10.33:12345/main.eppic”;
// login username and password
/*private String uname = “global”;
private String pwd = “global”;*/
// The login button
private String loginImgName = “login.gif”;
public void loginSuccess(String uname,String pwd){
driver = SetUpDriver.getWebDriver();
// Navigate to login URL.
driver.get(url);
// Input user name and password,then click login.
driver.findElement(By.name(“login”)).sendKeys(uname);
driver.findElement(By.name(“password”)).sendKeys(pwd);
driver.findElement(By.name(loginImgName)).click();
System.out.println(driver.getCurrentUrl());
// Set checkpoint to verify if login successfully
if (driver.getCurrentUrl().trim().contains(loginUrl)) {
System.out.println(“##Successful## Login successfully.”);
driver.get(mainUrl); // Direct to navigate the main page in order to
// skip the change password page
} else {
System.out.println(“##Failed## Loging failed.”);
System.out.println(“##The logon failed url is”
+ driver.getCurrentUrl());
}
}
public void loginFailed(String uname,String pwd,String errorMsgExpected){
driver = SetUpDriver.getWebDriver();
driver.get(url);
// login with blank user name and blank password
driver.findElement(By.name(“login”)).sendKeys(uname);
driver.findElement(By.name(“password”)).sendKeys(pwd);
driver.findElement(By.name(loginImgName)).click();
// Verify ‘Please fill in login and password.’ by the junit’s assertEquals method.
String errorMsgText = driver.findElement(By.xpath(“//font[@class=’ebt_error’]”)).getText();
assertEquals(errorMsgText, errorMsgExpected);
// Verify the ‘Please fill in login and password.’ by the if else statement.
List<WebElement> errorMsg;
errorMsg = driver.findElements(By.xpath(“//font[@class=’ebt_error’]”));
if (errorMsg.size() > 0) {
for (WebElement msgText : errorMsg) {
if (msgText.getText().trim().equals(errorMsgExpected)) {
System.out
.println(“##TestSuccessful## Login with “+uname+”/”+pwd+ ” error msg :”
+ msgText.getText());
} else {
System.out
.println(“##TestFailed##Login with “+uname +”/”+pwd+ ” error msg :”
+ msgText.getText());
}
}
}
}
}
LoginLockTest
package loginTest;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import common.ConnectDB;
import common.SetUpDriver;
import common.Login;
import java.util.List;
import org.junit.Assert;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
/**
*
@Project AmyAutoTest
* @author Amy.Wang
* @date Aug 21, 2014 8:55:41 AM
* @description Login test with invalid data.
*
*/
public class LoginLockedTest {
// login user name and password
private String validUname = “”;
private String invalidPwd = “global2″;
private String sql=”select * from users where login like ‘amy1%'”;
//Error message
private String errorMsgInvalidPwd = “Incorrect Password given.”;
private String errorMsgLocked = “Incorrect password given for 3 times. Your logon is now locked out.”;
//New Login instance
private Login login=new Login();
@Test
public void testLockedLogin() {
ConnectDB connect=new ConnectDB();
validUname=connect.getUname().trim();
//lock user with three times error pawword
login.loginFailed(validUname, invalidPwd, errorMsgInvalidPwd);
login.loginFailed(validUname, invalidPwd, errorMsgInvalidPwd);
login.loginFailed(validUname, invalidPwd, errorMsgLocked);
//unlock user
connect.unLockUser(validUname);
//login again
login.loginFailed(validUname, invalidPwd, errorMsgInvalidPwd);
}
}