一般性的,数据存储在excel中,也是一种选择,但是必须安装对应的库,要不python是无法操作excel文件的,安装的第三方库为为xlrd,安装命令为:
pipinstall xlrd
安装过程见截图:
Excel文件的后缀格式为.xlsx,实例中excel的数据为:
所以,我们需要读取excel中的数据,首先需要import xlrd,然后才可以读取excel文件中的数据。在excel文件中,cell是单元格,sheet是工作表,一个工作表由N个单元格来组成。下面来实现读取excel文件中的数据,见如下的代码:
def getExcel(rowValue,colValue,file_name='d:\\test.xlsx'):
"""
:paramrowValue:表格的行
:paramcolValue: 表格的列
:paramfile_name: excel文件
:return:
"""
#创建book
book=xlrd.open_workbook(file_name)
#获取sheet对象
sheet=book.sheet_by_index(0)
#获取sheet对象中的数据
returnsheet.cell_value(rowValue,colValue)
代码截图:
我把读取excel中的数据写成一个函数,先导入xlrd的库,然后创建book,以及获取sheet对象,依次获取sheet对象中的数据,在如上的excel数据中,如果我想获取“请你填写密码”,那么直接调用该函数,并且传对应的参数分别为(0,1),见执行的代码截图:
如果读取excel一个sheet对象的所有数据,修改后的代码为:
defgetExcels(file_name='d:\\test.xlsx'):
rows=[]
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
forrow in range(1,sheet.nrows):
rows.append(list(sheet.row_values(row,0,sheet.ncols)))
returnrows
我们已百度登录为实例,来说明excel文件在自动化中的引用,测试点分别为:
1、输入百度账号,未输入百度密码,点击登陆,验证返回的错误信息;
2、输入错误的百度账号密码,点击登录,验证返回的错误信息;
我们读excel文件的函数,登录百度的函数写在location.py的模块中,见location.py模块的代码:
#!/usr/bin/env python
#coding:utf-8
import csv,xlrd
from selenium import webdriver
import time as t
def getCsv(file_name):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
returnrows
defgetExcel(rowValue,colValue,file_name='d:\\test.xlsx'):
"""
:paramrowValue:表格的行
:paramcolValue: 表格的列
:paramfile_name: excel文件
:return:
"""
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
returnsheet.cell_value(rowValue,colValue)
def clickButton(driver):
driver.find_element_by_xpath(".//*[@id='u1']/a[6]").click()
t.sleep(2)
def clickLogin(driver,username,password):
name=driver.find_element_by_id('TANGRAM__PSP_8__userName')
name.clear()
name.send_keys(username)
t.sleep(2)
passwd=driver.find_element_by_id('TANGRAM__PSP_8__password')
passwd.clear()
passwd.send_keys(password)
t.sleep(2)
driver.find_element_by_id('TANGRAM__PSP_8__submit').click()
t.sleep(2)
#获取返回的错误信息
def getText(driver):
returndriver.find_element_by_xpath(".//*[@id='TANGRAM__PSP_8__error']").text
把测试代码写在baiduTest.py的模块中,见该模块的测试代码:
#!/usr/bin/python
#coding:utf-8
from selenium import webdriver
import time as t
import location
import unittest,sys
reload(sys)
sys.setdefaultencoding('utf-8')
class BaiduTest(unittest.TestCase):
defsetUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://www.baidu.com/')
deftestCase_01(self):
"""
验证只输入百度账号密码,点击登录返回的错误信息
:return:
"""
driver=self.driver
location.clickButton(driver)
location.clickLogin(driver,location.getExcel(0,0),location.getExcel(1,0))
self.assertEqual(location.getText(driver),location.getExcel(1,1))
deftestCase_02(self):
"""
验证只输入百度账号,未输入密码,点击登录返回的错误信息
:return:
"""
driver=self.driver
location.clickButton(driver)
location.clickLogin(driver,location.getExcel(0,0),location.getExcel(2,0))
self.assertEqual(location.getText(driver),location.getExcel(0,1))
deftearDown(self):
self.driver.quit()
if __name__=='__main__':
suite=unittest.TestLoader().loadTestsFromTestCase(BaiduTest)
unittest.TextTestRunner(verbosity=2).run(suite)
这样,我们就实现了把测试中使用到的数据,存储在excel中,然后利用xlrd模块来读取excel中的数据,达到测试代码与数据的分离。