testng连接MySQL_Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布

原标题:Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布

记得之前群里,有人说举例一下连接数据库在Selenium自动化测试中的应用。本篇刚好来举例一个,前面我们都是通过发布后文章的详情页的标题来判断文章是否已经发布成功,这篇就通过数据查找来判断。个人意见,在Selenium自动化中一般还是少用数据库查询去断言成功还是失败,效率是一回事,还有就是一般软件系统都很大,数据库中有很多表,开发都不一定弄得清楚这些表,何况测试人员更加困难去理清这些表。

49564f51caa35db533e7170254b19b19.png

请点击此处输入图片描述

1. 前提条件

去MySQL官网下载一个mysql-connector-java的jar包。https://dev.mysql.com/downloads/file/?id=472651,解压后拷贝jar到我们之前的eclipse项目并添加到项目的Library

70000ffdfdcce742b89f992b0b0c81d9.png

请点击此处输入图片描述

配置文件

6f6d809c3c0310ff9971edc546693c8b.png

请点击此处输入图片描述

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自动化的断言中,如果要引入数据库查询,还是比较麻烦,步骤也很啰嗦,除非一定要数据库数据校验,否则采用前端手动测试的断言方法去断言就可以。

相关代码:

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

武汉mysql ocp考点_MySQL OCP考试复习系列–开篇:了解MySQL考试

MySQL OCP考试复习系列–开篇:了解MySQL考试嗯,那个决定去考MySQL OCP了,事实上最近工作一直围绕着DB2,MySQL要去考的话需要好好的复习的啊。150分钟,100道多选,答对60道题可以通过,费用1077。L…

java文件服务器_JavaWeb项目架构之NFS文件服务器

NFS简介NFS(Network File System)即网络文件系统。主要功能:通过网络(局域网)让不同的主机系统之间可以共享文件或目录。主要用途:NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件。NFS存储服务无NFS文件共享存储…

table 样式详解

1.table 中css样式控制border 只能控制外边框&#xff0c;内边框需要写<table border"1"> 2.table 会自动撑大&#xff0c;即使td 设置了 width和height这与div 是不同的 3.只有一个table的时候 &#xff0c;高度自适应全屏 <style type"text/css"…

spring整合

spring整合hibernate&#xff0c;整合什么&#xff1f; 1. Spring 整合 Hibernate 整合什么 ?1). 有 IOC 容器来管理 Hibernate 的 SessionFactory 2). 让 Hibernate 使用上 Spring 的声明式事务2. 整合步骤:1). 加入 hibernate ①. jar 包 ②. 添加 hibernate 的配置文件: hi…

看看大货车到底有多少盲区,肯定用得到!救命的!

上路的司机都知道&#xff0c;一旦看到大货车就要离它远远的&#xff0c;因为大货车的盲区大。可是又有多少轿车司机懂得盲区在哪里呢?不仅是轿车司机&#xff0c;许多行人和非机动车辆对于大货车的盲区也是一知半解&#xff0c;常常有人因此丧命。 行人篇 先给大家看一张最直…

msgpack java lua_使用lua-cmsgpack序列化和反序列化lua对象

原文在简书首发&#xff1a;http://www.jianshu.com/p/badf412db4e7lua-cmsgpack是一个开源的MessagePack实现方式、纯C的库&#xff0c;没有任何其它依赖&#xff0c;编译后可以直接被lua调用&#xff0c;目前主要支持Lua5.1/5.2/5.3 版本。1、什么是MessagePack&#xff1f;-…

全国250米DEM数据

全国250米DEM数据 DEM是数字高程模型的英文简称(Digital Elevation Model)&#xff0c;是研究分析地形、流域、地物识别的重要原始资料。由于DEM 数据能够反映一定分辨率的局部地形特征&#xff0c;因此通过DEM 可提取大量的地表形态信息&#xff0c;可用于绘制等高线、坡度图、…

redis集群连接 java_Redis分布式集群和直连的Java客户端调用方式详解

jedis是一个著名的key-value存储系统&#xff0c;而作为其官方推荐的java版客户端jedis也非常强大和稳定&#xff0c;支持事务、管道及有jedis自身实现的分布式。在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比&#xff1a;一、普通同步方式最简单和基础…

java爬虫新浪微博_java爬虫(爬新浪新闻) 如何从零开始

爬虫通常搜索引擎处理的对象是互联网网页。首先面临的问题是&#xff1a;如何能够设计出高效的下载系统&#xff0c;以将如此海量的网页数据传送到本地&#xff0c;在本地形成互联网网页的镜像备份。网络爬虫即起此作用&#xff0c;它是搜索引擎系统中很关键也很基础的构件。爬…

CodeVS 1068-乌龟棋

原题 题目描述 Description 小明过生日的时候&#xff0c;爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘是一行N个格子&#xff0c;每个格子上一个分数&#xff08;非负整数&#xff09;。棋盘第1格是唯一 的起点&#xff0c;第N格是终点&#xff0c;游戏要求玩家控制一个乌龟棋…

乔布斯传

资料参考 http://www.ruanyifeng.com/blog/2013/03/apple_inc_and_division_of_labor.html 苹果公司与分工原理 1.乔布斯 "乔布斯买了一间不错的房子&#xff0c;但家里只有一幅帕黎思&#xff08;Maxfield Parrish&#xff09;的画作、一部百灵牌咖啡机和几把双人牌的刀子…

ie11浏览器可以下载java吗_解析:WindowsXP系统能否安装IE11浏览器

现在&#xff0c;IE浏览器可以称得上是市场占有率最高的一款网页浏览器。因为windowsxp是一款比较久的操作系统&#xff0c;所以很多用户都会疑惑在xp上是否能够安装最新版的ie11浏览器。下面&#xff0c;小编就给大家详细解答下该问题。很遗憾的告诉大家&#xff0c;Windows X…

java ajax传输图片_Java使用Ajax实现跨域上传图片功能

说明 &#xff1a;图片服务器是用Nginx搭建的&#xff0c;用的是PHP语言这个功能 需要 用到两个js文件&#xff1a;jquery.js和jQuery.form.jsfunction submitImgSize1Upload() {var postData function( form , callback){var form document.getElementById("upload-for…

Java并发——线程中断学习

1. 使用interrupt()中断线程当一个线程运行时&#xff0c;另一个线程可以调用对应的Thread对象的interrupt()方法来中断它&#xff0c;该方法只是在目标线程中设置一个标志&#xff0c;表示它已经被中断&#xff0c;并立即返回。这里需要注意的是&#xff0c;如果只是单纯的调用…

分布式服务框架原理(一)设计和实现

分布式服务框架设计 分布式服务框架一般可以分为以下几个部分&#xff0c; &#xff08;1&#xff09;RPC基础层&#xff1a; 包括底层通信框架&#xff0c;如NIO框架、通信协议&#xff0c;序列化和反序列化协议&#xff0c;以及在这几部分上的封装&#xff0c;屏蔽底层通信细…

saltstack之混合匹配

需要-C参数: salt -C ## 使用grains属性来匹配 [roothadoop0 pillar]# salt -C Gos:Ubuntu test.ping uadoop1:True ## 使用Minion ID的正则表达式来匹配 [roothadoop0 pillar]# salt -C Euadoop\d test.ping uadoop2:True uadoop3:True uadoop1:True ## 使用gr…

java自定义 filter,HBase自定义Filter

必需要提前说明下&#xff1a;不建议使用自定义的Filter。所有的Filter都是在服务端生效&#xff1a;就是说需要将自定义的Filter封装为jar&#xff0c;上传到HBase的类路径下&#xff0c;并重启HBase使之生效。对于生产环境的HBase来说&#xff0c;重启通常是不能接受的。Filt…

Mybatis学习总结(二)——Mapper代理开发

一、概要 1、原始DAO开发中存在的问题:&#xff08;1&#xff09;DAO实现方法体中存在很多过程性代码。&#xff08;2&#xff09;调用SqlSession的方法(select/insert/update)需要指定Statement的id&#xff0c;存在硬编码&#xff0c;不利于代码维护。 2、Mapper动态代理方法…

mac wordpress php7,Mac 下基于 wordpress 搭建个人博客系统

一、前言这里说的是自己从 wordpress 源码开始搭建一个个人博客系统。当然&#xff0c;很多云端已经直接提供了在线安装的方式&#xff0c;这个就不在本文的讨论范围之内了。二、关于 wordpresswordpress是一款个人博客系统&#xff0c;并逐步演化成一款内容管理系统软件&#…

TypeError: db.addUser is not a function : @(shell):1:1 ——mongoDB创建新用户名密码的方法...

不多说&#xff0c;旧版本使用 db.addUser("root","root") 新版本使用这句会出现这个错误提示 TypeError: db.addUser is not a function : (shell):1:1 新版本用的是 db.createUser({user: "test",pwd: "test",roles: [ { role: &quo…