原标题:Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布
记得之前群里,有人说举例一下连接数据库在Selenium自动化测试中的应用。本篇刚好来举例一个,前面我们都是通过发布后文章的详情页的标题来判断文章是否已经发布成功,这篇就通过数据查找来判断。个人意见,在Selenium自动化中一般还是少用数据库查询去断言成功还是失败,效率是一回事,还有就是一般软件系统都很大,数据库中有很多表,开发都不一定弄得清楚这些表,何况测试人员更加困难去理清这些表。
请点击此处输入图片描述
1. 前提条件
去MySQL官网下载一个mysql-connector-java的jar包。https://dev.mysql.com/downloads/file/?id=472651,解压后拷贝jar到我们之前的eclipse项目并添加到项目的Library
请点击此处输入图片描述
配置文件
请点击此处输入图片描述
2. 实现过程
1) 写一个连接数据库的类,放在myframework包下。
package myframework;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class ConnectMySql {
private String DBUrl;
private String DBName;
private String DBUser;
private String DBPwd;
/**
* 读取配置文件内容来获取数据库信息
*/
public void readDBConfigInfo() {
try {
Properties p = new Properties();
// 加载配置文件
InputStream ips = new FileInputStream(".\\TestConfig\\config.properties");
p.load(ips);
Logger.Output(LogType.LogTypeName.INFO, "Start to connect to mysql database.");
DBUrl = p.getProperty("Database_URL").trim();
Logger.Output(LogType.LogTypeName.INFO, "the database host is: "+ DBUrl);
DBName = p.getProperty("Database_Name").trim();
Logger.Output(LogType.LogTypeName.INFO, "The name of the database is: "+ DBName);
DBUser = p.getProperty("Database_Username").trim();
Logger.Output(LogType.LogTypeName.INFO, "the username of database is: "+ DBUser);
DBPwd = p.getProperty("Database_Password").trim();
ips.close();
} catch (IOException e) {
Logger.Output(LogType.LogTypeName.ERROR, "无法正常加载配置文件,请检查文件路径和相关设置");
}
}
public Connection getConnection() throws ClassNotFoundException {
String URL = "jdbc:mysql://"+DBUrl+":3306/"+DBName;
Connection conn = null;
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2.获得数据库的连接
conn = DriverManager.getConnection(URL, DBUser, DBPwd);
//3.通过数据库的连接操作数据库,实现增删改查
} catch (SQLException e) {
Logger.Output(LogType.LogTypeName.ERROR, "SQL异常"+e.toString());
}
// 返回给调用者
return conn;
}
/**
* 关闭数据库连接方法
* @param conn
*/
protected static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
主要有链接数据库和关闭数据库两个方法。
2)写一个测试类来测试下
package testsuites.article;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import myframework.ConnectMySql;
import pageobjects.Login;
import pageobjects.MenuNavigation;
import pageobjects.article.writeacticle.NewArticle;
public class NewArticleTest {
public WebDriver driver;
Connection conn = null;
ConnectMySql cm = new ConnectMySql();
@BeforeClass
public void setUp() throws ClassNotFoundException {
try {
Login.initSetup();
} catch (IOException e) {
e.printStackTrace();
}
Login.loginValid();
driver = Login.driver;
try {
cm.readDBConfigInfo();
conn = cm.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
@AfterClass
public void tearDown() throws SQLException {
conn.close();
driver.quit();
}
@Test
public void testNewArticle() throws SQLException {
//初始化导航菜单页面
MenuNavigation mn = PageFactory.initElements(driver, MenuNavigation.class);
mn.clickArticle();
mn.clickNewArticle();
//初始化写文章页面
NewArticle na = PageFactory.initElements(driver, NewArticle.class);
String title = "我的第一篇自动化发布的文章1";
String bodyContent = "第一行,这篇是演示如何通过自动化脚本来发布一篇文章123。";
na.publishArticle(title, bodyContent);
// 数据库连接进行判断
//创建statement类对象,用来执行SQL语句!!
Statement statement = conn.createStatement();
//要执行的SQL语句
String sql = "select * from wp_posts where post_title ='"+title+"'";
//ResultSet类,用来存放获取的结果集!!
ResultSet rs = statement.executeQuery(sql);
while(rs.next()) {
String db_content = rs.getString("post_content");
// 断言文章正文内容是否相同
Assert.assertEquals(bodyContent, db_content);
rs.close();
}
}
}
总的来说,当selenium自动化的断言中,如果要引入数据库查询,还是比较麻烦,步骤也很啰嗦,除非一定要数据库数据校验,否则采用前端手动测试的断言方法去断言就可以。
相关代码:
责任编辑: