Selenium3+MySQL数据库进行数据驱动测试
生活随笔
收集整理的這篇文章主要介紹了
Selenium3+MySQL数据库进行数据驱动测试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄結構
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数据库进行数据驱动测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 挂式空调滤芯怎么安装?
- 下一篇: Redis(RedisTemplate)