python提供了对csv文件处理的模块,直接import csv就可以了,那么神秘是csv文件了?csv文件全名称为Comma-Separated Values,csv是通用的,相对简单的文件格式,其文件已纯文件形式存储数据。我们把数据存储在csv的文件中,然后写一个函数获取到csv文件的数据,在自动化中引用,这样,我们自动化中使用到的数据,就可以直接在csv文件中维护了,见下面的一个csv文件的格式:
特别提示:excel的文件,格式为xls,xlsx,后缀不能直接修改为.csv,如果这样,再读取csv文件的时候,会直接出现: _csv.Error:line contains NULL byte,解决这个问题是办法是,可以把文件另存为csv文件,就不会出错了。
下面我们实现读写csv文件中的数据,具体见如下实现的代码:
#!/usr/bin/env python
#coding:utf-8
import csv
#读取csv的文件
def getCsv(file_name='d:/test.csv'):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
print rows
#csv文件中写数据
def writeCsv(file_name='d:/test.csv'):
withopen(file_name,'wb') as f:
write=csv.writer(f)
write.writerow(['Element','system'])
data=[
('selenium','webdriver'),
('appium','android'),
('appium','ios'),
('selenium','python')
]
write.writerows(data)
f.close()
if __name__=='__main__':
writeCsv()
getCsv()
执行后的结果为:
为了具体读取到csv文件中某一列的数据,我们可以把读取csv文件的方法修改如下,见代码:
#读取csv的文件
defgetCsv(value1,value2,file_name='d:/test.csv'):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
returnrows[value1][value2]
如我们需要读取第一个selenium,csv文件内容见如上的截图,那么调用的方法代码为;
#读取csv的文件
defgetCsv(value1,value2,file_name='d:/test.csv'):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
returnrows[value1][value2]
if __name__=='__main__':
printgetCsv(0,0)
见执行后的截图:
已百度搜索输入框为实例,在搜索输入框输入csv文件中的字符,我们把读写csv文件的函数写在location.py的模块中,见location.py的源码:
#!/usr/bin/env python
#coding:utf-8
import csv
#读取csv的文件
defgetCsv(value1,value2,file_name='d:/test.csv'):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
returnrows[value1][value2]
#csv文件中写数据
def writeCsv(file_name='d:/test.csv'):
withopen(file_name,'wb') as f:
write=csv.writer(f)
write.writerow(['Element','system'])
data=[
('selenium','webdriver'),
('appium','android'),
('appium','ios'),
('selenium','python')
]
write.writerows(data)
f.close()
把测试代码写在baiduTest.py的模块中,见该模块的源码:
#!/usr/bin/python
#coding:utf-8
from selenium import webdriver
import location
import unittest
class BaiduTest(unittest.TestCase):
defsetUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get(location.getCsv(4,0))
deftestCase_01(self):
'''获取csv文件中第二列第一位的数据进行搜索'''
self.driver.find_element_by_id('kw').send_keys(location.getCsv(1,0))
importtime
time.sleep(5)
deftearDown(self):
self.driver.quit()
if __name__=='__main__':
suite=unittest.TestLoader().loadTestsFromTestCase(BaiduTest)
unittest.TextTestRunner(verbosity=2).run(suite)
在如上的测试代码中,我把url,以及搜索的字符都放在了csv的文件中,在测试脚本中,只需要调用读取csv文件的函数,这样,我们就可以实现了把测试使用到的数据存储在csv的文件中,来进行处理。