【原创】Selenium学习系列之(七)—ConnectDB和复用测试方法
来源:互联网 发布:怎么推广app软件 编辑:程序博客网 时间:2024/06/01 07:36
两个完全不搭边的东西怎么说明呢,既然不好说那就不多说,通过例子来理解。
需求我们要实现一个这样的测试情境:
登录系统时,若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);
}
}
- 【原创】Selenium学习系列之(七)—ConnectDB和复用测试方法
- 【原创】Selenium学习系列之(四)—Selenium 调试和语言转换
- 【原创】Selenium学习系列之(六)—Junit4中的注释和TestSuite
- 【原创】Selenium学习系列之(一)(二)—Selenium简介,环境搭建及使用
- 【原创】Selenium学习系列之(三)—Selenium基本命令
- 【原创】Selenium学习系列之(五)—从Selenium 到 Selenium2(Webdriver)
- 【原创】Selenium学习系列之(八)—Maven配置生成测试报告
- 软件测试系列之测试用例(七)
- Android RakNet 系列之七 线程和服务端统计测试
- 软件测试系列之(2)—性能测试过程和方法
- Python学习笔记(七)selenium自动化测试框架
- java + selenium测试框架(之下载页面上的图片) 版本演化七
- Selenium-webdriver系列教程(七)————如何处理alert和confirm
- 软件测试基本方法(七)之验收测试
- 软件测试基本方法(七)之验收测试
- J2EE系列之Hibernate4学习笔记(七)--Session常用方法
- 学习Gtkmm系列之七
- 使用Selenium测试Flex系列(1)
- 理解git中的head和master
- 03.assetbundle打包的一种用法
- 前端基础知识
- 记录自已学习之C语言存储区
- 深入理解Java类加载器(2):线程上下文类加载器
- 【原创】Selenium学习系列之(七)—ConnectDB和复用测试方法
- 缺失值处理方法
- IntelliJ IDEA 热部署,修改java文件 不用重启tomcat
- 【PDF下载】运维/DevOps峰会之构建通用智能运维平台
- JS源文件中文注释乱码解决
- spark学习-21-Spark的groupByKey
- break和continue
- java基本数据类型及其他基础
- Python:运行时隐藏窗口