MySQL+Navicat Premium+pymysql+selenium……所有环境都已安装好、配置好。
代码如下:
1. utils_sql.py:
# 第 16 章 数据驱动测试应用----16.4---数据库方式数据管理模块的实现--16.4.4-- 模块化数据库操作
# 第 16 章/ utils_sql.py
import pymysql
class SqlTools:
def __init__(self):
# 本处初始化仅为当前示例服务,具体应用时从实际表中取数据,不需此操作。
self.createTable()
self.insertData()
def createTable(self):
db = pymysql.connect(host="localhost", user="root", passwd="ning", db="test")
# 创建数据库游标
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS TEST_DATA")
# 建表语句
sql = """CREATE TABLE TEST_DATA (
ID INT NOT NULL,
EXPECT CHAR(20),
ACTUAL CHAR(20)
)"""
# 执行 sql 语句
cursor.execute(sql)
db.close()
def insertData(self):
db = pymysql.connect(host="localhost", user="root", passwd="ning", db="test")
cursor = db.cursor()
sql = """INSERT INTO TEST_DATA (ID,EXPECT,ACTUAL)
VALUES(1,'thinkerbang','pass'),
(2,'Selenium','pass')"""
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
def getData(self):
db = pymysql.connect(host="localhost", user="root", passwd="ning", db="test")
cursor = db.cursor()
sql = " SELECT EXPECT FROM TEST_DATA "
try:
cursor.execute(sql)
results = cursor.fetchall()
condata = []
for result in results:
temp = []
temp.append(result[0])
condata.append(temp)
except:
print("Error:unable to fetch data")
db.close()
return condata
def updateData(self, expect, result):
db = pymysql.connect(host="localhost", user="root", passwd="ning", db="test")
cursor = db.cursor()
sql = "UPDATE TEST_DATA SET ACTUAL = '%s' WHERE EXPECT = '%s'" % (result, expect)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
2. run_test_sql.py:
# 第 16 章 数据驱动测试应用----16.4---数据库方式数据管理模块的实现--16.4.4-- 模块化数据库操作
# 第 16 章/ run_test_sql.py
from selenium import webdriver
from time import sleep
import unittest
import ddt
from selenium.webdriver.common.by import By
from Chapter16.four_mysql.utils_sql import SqlTools
ob = SqlTools()
condata = ob.getData()
@ddt.ddt()
class TestBaiduSearch(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
@ddt.data(*condata)
@ddt.unpack
def test_search(self, text):
self.driver.get("https://baidu.com")
self.driver.find_element(By.ID, 'chat-textarea').send_keys(text)
sleep(2)
self.driver.find_element(By.ID, 'chat-submit-button').click()
sleep(2)
# 将执行结果写入数据表
if text in self.driver.title:
ob.updateData(text, 'pass')
else:
ob.updateData(text, 'fail')
if __name__ == '__main__':
unittest.main()