1. 程式人生 > >【原創】Selenium學習系列之(七)—ConnectDB和複用測試方法

【原創】Selenium學習系列之(七)—ConnectDB和複用測試方法

一篇來說一下Webdriver中連線DB合複用測試方法。

兩個完全不搭邊的東西怎麼說明呢,既然不好說那就不多說,通過例子來理解。

需求我們要實現一個這樣的測試情境:

登入系統時,若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的,這個類以前都用過了,所以就不多說了。

SetUpServer

ConnectDB

下圖就是傳說的的連線DB,它其實就是Java中的JDBC連線,都是固定的格式,只不過我建立了一個傳參方法getUserName(String sql)用來get LoginID,裡面的sql是我們自定義的,可以根據實際需要修改。

 ConnectDB

特別說明一下:

uname = rs.getString(“login”);

上面括號中的 login  是 user表中 的一個欄位名稱,存放的就是LoginID,也就是我們在登入頁面要輸入的,當然可以根據需要改為 其它的欄位,比如password

Login

下面的截圖我只貼出了類中的兩個傳參方法,定義這兩個有什麼用?真的,很有用的~

請跳轉到LoginLockedTest

 Login1

Login2

LoginLockedTest—最終的連續三次輸入來嘍。

看到下面圖框中的三行指令碼了嗎, 就是這樣實現,有沒有感覺好簡單^^. 反正我當時的感覺是,前面所以的辛苦都值了。也許有人說,太大費周章了,直接執行三次也可以實現,但是login這塊的功能,其實操作都是相似的,只是輸入的測試資料不同而且,我們有好多case都可以通過login中的兩個測試方法來實現。我把這個叫做複用~~~

LockTest

如果想加深理解可以試著去實現下面三個情境,其實通過上面的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);

}

}