【原创】Selenium学习系列之(七)—ConnectDB和复用测试方法

来源:互联网 发布:怎么推广app软件 编辑:程序博客网 时间:2024/06/01 07:36
一篇来说一下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);

 

 

}

 

 

}

阅读全文
0 0
原创粉丝点击