目录结构

1、准备SQL语句 — Sql.py

#创建gloryroad数据库SQL语句
create_database = 'create database if not exists gloryroad default charset utf8 collate utf8_general_ci;'
#创建testdata表
create_table = """create table if not exists testdata(id int not null auto_increment comment '主键',bookname varchar(40) unique not null comment '书名',author varchar(30) not null comment '作者',primary key(id))engine = innodb character set utf8 comment '测试数据表';
"""

2、初始化数据库脚本 — Databaselnit.py

#初始化数据库脚本
import pymysql
from Sql import *class DataBaseInit():#本类用于完成初始化数据库操作#创建数据库,创建数据表,向表中插入测试数据def __init__(self, host, port, dbName, username, password, charset):self.host = hostself.port = portself.db = dbNameself.user = usernameself.passwd = passwordself.charset = charsetdef create(self):try:#连接MySQL数据库conn = pymysql.connect(host = self.host,port = self.port,user = self.user,passwd = self.passwd,charset = self.charset)#获取数据库游标cur = conn.cursor()#创建数据库
            cur.execute(create_database)#选择创建好的gloryroad数据库conn.select_db("gloryroad")#创建测试表
            cur.execute(create_table)except pymysql.Error as e:raise eelse:#关闭游标
            cur.close()#提交操作
            conn.commit()#关闭连接
            conn.close()print("创建数据库及表成功")def insertDatas(self):try:#连接数据库中具体某个库conn = pymysql.connect(host=self.host,port=self.port,db = self.db,user=self.user,passwd=self.passwd,charset=self.charset)cur = conn.cursor()#向测试表中插入测试数据sql = "insert into testdata(bookname, author) values(%s, %s);"res = cur.executemany(sql, [('Selenium Data Driven', 'Flutter'),('Python 基础教程', 'Magnus Lie Hetland'),('算法设计与分析', '张德富'),('计算机网络', '谢希仁')])except pymysql.Error as e:raise eelse:conn.commit()print("初始数据插入成功")#通过打印,确认数据是否插入成功cur.execute("select * from testdata;")for i in cur.fetchall():print(i[1], i[2])cur.close()conn.close()if __name__ == '__main__':db = DataBaseInit(host="localhost",port=3306,dbName="gloryroad",username="root",password="root",charset="utf8")db.create()db.insertDatas()print("数据库初始化结束")

3、从数据库中获取测试数据 — MysqlUtil.py

#从数据库中获取测试数据
import pymysql
from DatabaseInit import DataBaseInitclass MyMySQL():def __init__(self, host, port, dbName, username, password, charset):#进行数据库初始化dbInit = DataBaseInit(host, port, dbName, username, password, charset)dbInit.create()dbInit.insertDatas()self.conn = pymysql.connect(host = host,port = port,db = dbName,user = username,passwd = password,charset = charset)self.cur = self.conn.cursor()def getDataFromDataBases(self):#从testdata表中获取需要的测试数据#bookname作为搜索关键词,author作为预期关键词self.cur.execute("select bookname, author from testdata")#从查询区域取回所有的查询结果datasTuple = self.cur.fetchall()return datasTupledef closeDatabase(self):#数据库后期清理工作
        self.cur.close()self.conn.commit()self.conn.close()if __name__ == '__main__':#实例化对象db = MyMySQL(host="localhost",port=3306,dbName="gloryroad",username="root",password="root",charset="utf8")#函数调用print(db.getDataFromDataBases())db.closeDatabase()

4、执行数据驱动测试脚本 — DataDrivenByMySQL.py

#执行数据驱动测试脚本
from selenium import webdriver
import unittest, time
import logging, traceback
import ddt
from MysqlUtil import MyMySQL
from selenium.common.exceptions import NoSuchElementException
from BSTestRunner import BSTestRunner#初始化日志对象
logging.basicConfig(#日志级别level=logging.INFO,#日志格式#时间、代码所在的文件名、代码行号、日志级别名字、日志信息format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',#打印日志的时间datefmt='%a, %Y-%m-%d %H:%M:%S',#日志文件存放的目录(目录必须存在)及日志文件名filename='./dataDrivenReport.log',#打开日志文件的方式filemode='w'
)def getTestDatas():#对象实例化db = MyMySQL(host="localhost",port=3306,dbName="gloryroad",username="root",password="root",charset="utf8")#从数据库测试表中获取测试数据testData = db.getDataFromDataBases()#关闭数据库连接
    db.closeDatabase()#返回数据return testData@ddt.ddt
class TestDemo(unittest.TestCase):def setUp(self):self.driver = webdriver.Chrome()@ddt.data(*getTestDatas())def test_dataDrivenByDatabase(self, data):#对获得的数据进行解包testData, expectData = dataurl = "http://www.baidu.com"#访问百度首页
        self.driver.get(url)#将浏览器窗口最大化
        self.driver.maximize_window()print(testData, expectData)#设置隐式等待时间为10秒self.driver.implicitly_wait(10)try:# 找到搜索输入框,并输入测试数据self.driver.find_element_by_id("kw").send_keys(testData)# 找到搜索按钮,并单击self.driver.find_element_by_id("su").click()time.sleep(3)#断言期望结果是否出现在页面源代码中self.assertTrue(expectData in self.driver.page_source)except NoSuchElementException:logging.error("查找的页面元素不存在,异常堆栈信息:" + str(traceback.format_exc()))except AssertionError:logging.info("搜索%s,期望%s,失败" % (testData, expectData))except Exception:logging.error("未知错误,错误信息:" + str(traceback.format_exc()))else:logging.info("搜索%s,期望%s,通过" % (testData, expectData))def tearDown(self):self.driver.quit()if __name__ == '__main__':# unittest.main()testCase = unittest.TestLoader().loadTestsFromTestCase(TestDemo)# 将多个测试类加载到测试套件中suite = unittest.TestSuite(testCase)filename = "./test.html"fp = open(filename, 'wb')runner = BSTestRunner(stream=fp,title='数据库驱动测试',description='测试用例执行情况:')runner.run(suite)fp.close()

转载于:https://www.cnblogs.com/test-postman/p/10131467.html

Selenium3+MySQL数据库进行数据驱动测试相关推荐

  1. windows环境设置mysql数据库自动备份(测试成功)

    windows环境设置mysql数据库自动备份(测试成功) 要实现数据库的自动备份就需要一下两步: 利用MySQL提供的备份命令mysqldump 结合Windows的任务计划程序 实现步骤 编写脚本 ...

  2. MySQL数据库之压力测试

    目录 引言 一.MySQL自带的压力测试工具--Mysqlslap 1.更改其默认的最大连接数 2.进行压力测试 二.使用第三方工具sysbench进行压力测试 1.简介 2.查看sysbench工具 ...

  3. 阿里云mysql数据库远程连接测试_远程连接阿里云MySQL数据库

    阿里云最近搞活动,学生价10块一个月,于是乎找研究僧同学买了半年玩玩. 正常情况下买了服务器之后还要买数据库,但是我只是用来做测试,所以没必要再买几十块一个月的买数据库. 服务器我买的是市场镜像并且已 ...

  4. mysql数据库在线测试_测试面试题集-MySQL数据库灵魂拷问

    VOL 162 25 2020-09 今天距2021年97天 这是ITester软件测试小栈第162次推文 孤单北半球 From ITester软件测试小栈 00:00 04:08 本文3905字,阅 ...

  5. 利用jmeter对mysql数据库进行压力测试

    一.创建测试计划 1.添加线程组 (一)测试计划-添加-线程组,如下图所示 (二)配置jdbc连接设置,如下图所示 选择线程组-添加-配置元件-JDBC Connection  Configurati ...

  6. mysql数据驱动测试_自动化测试框架-数据驱动(2)

    5.使用Excel进行数据驱动测试 测试逻辑: (1)打开百度首页,从Excel文件中读取测试数据作为搜索关键词 (2)在搜索输入框中输入读取出搜索关键词 (3)单击搜索按钮 (4)断言搜索结果页面中 ...

  7. 教程,使用YCSB测试MYSQL数据库,获取千万条测试后的数据

    Yahoo! Cloud Serving Benchmark (YCSB)是一个数据库特别是nosql数据库性能测试的benchmark.在GitHub中有3.9千个star和1.9千个forks.本 ...

  8. jdbctemplate mysql 配置_Spring Boot 初级入门教程(十四) —— 配置 MySQL 数据库和使用 JdbcTemplate 测试...

    经过前面几篇文章,包已经可以打了,不管是 jar 包还是 war 包都已测试通过,jsp 页面也可以访问了,但页面上的数据都是在配置文件中写死的,不爽 ~ 到目前为止,最重要的配置还没做,那就是连数据 ...

  9. mysql数据库编程题题_mysql数据库编程题测试

    <mysql数据库编程题测试>由会员分享,可在线阅读,更多相关<mysql数据库编程题测试(3页珍藏版)>请在人人文库网上搜索. 1.1.自行创建测试数据2.查询"生 ...

最新文章

  1. 直接拿来用!最火的Android开源项目(一)
  2. (0051)iOS开发之沙盒(sandbox)机制和文件操作(一)
  3. 【C++】38.类成员变量声明为 对象与指针的区别
  4. stm32-USART1重映射
  5. centos7 没有pip命令_Linux(CentOS7)部署系列---Docker编排应用部署方案
  6. 10.2-3 ifupifdown:激活与禁用网络接口
  7. Python中正则表达式讲解
  8. 20道C#练习题(一)1——10题
  9. python虚函数_Python进阶话题杂谈(十三)纯虚函数与抽象基类
  10. java视频上传,播放预览,解决苹果手机视频无法预览的问题
  11. 数据库修改服务器,服务器数据库修改
  12. 金融数据挖掘与分析(三)-案例实战(1)
  13. 未来五年,保险平权的最大机会来了
  14. fastreport中文乱码问题
  15. linux 批量下载fnl,TMS370C356FNL
  16. 阿福卡专属流量包 开通 取消 方法
  17. AddressBook 地址簿 (电话簿) 访问与修改
  18. ubuntu linux安装中文输入法+汉化(超详细过程)
  19. 层次分析法和熵值法经典实操案例+数据
  20. LG. Hankson 的趣味题,C语言

热门文章

  1. vue npm run serve/dev命令后台运行:nohup npm run serve >web.log 2>1 exit
  2. spark.kubernetes.file.upload.path的作用
  3. linux centos7完整记录对根目录的磁盘扩容过程(扩容99G)
  4. 【视频】vue组件的全局注册
  5. Hystrix默认超时时间
  6. 自定义数组操作工具类代码示例
  7. Spring Bean的属性注入
  8. linux 查看服务器网络连接,1.3.2 查看Linux服务器的网络连接(2)
  9. java 获取400的错误信息_获取400错误的请求Spring RestTemplate POST
  10. C++ warning:’xxx‘ has no out-of-line virtual method definitions...