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的文件中,來進行處理。