#执行数据驱动测试脚本
from selenium importwebdriverimportunittest, timeimportlogging, tracebackimportddtfrom MysqlUtil importMyMySQLfrom selenium.common.exceptions importNoSuchElementExceptionfrom BSTestRunner importBSTestRunner#初始化日志对象
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')defgetTestDatas():#对象实例化
db =MyMySQL(
host="localhost",
port=3306,
dbName="gloryroad",
username="root",
password="root",
charset="utf8")#从数据库测试表中获取测试数据
testData =db.getDataFromDataBases()#关闭数据库连接
db.closeDatabase()#返回数据
returntestData
@ddt.ddtclassTestDemo(unittest.TestCase):defsetUp(self):
self.driver=webdriver.Chrome()
@ddt.data(*getTestDatas())deftest_dataDrivenByDatabase(self, data):#对获得的数据进行解包
testData, expectData =data
url= "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 inself.driver.page_source)exceptNoSuchElementException:
logging.error("查找的页面元素不存在,异常堆栈信息:" +str(traceback.format_exc()))exceptAssertionError:
logging.info("搜索%s,期望%s,失败" %(testData, expectData))exceptException:
logging.error("未知错误,错误信息:" +str(traceback.format_exc()))else:
logging.info("搜索%s,期望%s,通过" %(testData, expectData))deftearDown(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()