数据驱动CSV读取文件的两种方式(2)
Csv
csv是通用的、相对简单的文件格式,其文件以纯文件形式存储数据。(在excel中创建需要先创建一个*.xlsx文件,然后将该文件
另存为CSV UTF-8(逗号分隔)(*.csv)格式。如果直接将文件存为csv格式可能会出现问题)
将创建好的data.csv文件拖到存放数据的data包下面。data.csv文件的内容如下图:
csv读取数据 有两种方式:
1、列表的方式 , 代码如下 :
import csv from utils.pathUtils import filePath def readCsvList(): '''列表的读取方式,读取csv的文件内容''' lists=[] with open(filePath(fileName='data.csv'),encoding='utf-8') as f: reader=csv.reader(f) #不读取data.csv文件的第一行 next(reader)
#循环列表 for item in reader:
#加到列表用append方法。 lists.append(item) # return lists #读取完第一行,返回第一行。 return lists #每读取完一行就返回整个列表 #直接输出,检查代码是否能正常运行 print(readCsvList())
运行结果如下图:
2、字典的方式,代码如下:
import csv from utils.pathUtils import filePath def readCsvDict(): '''字典的读取方式,读取csv的文件内容''' lists=[]
#读取的文件中有时候会出现"\ufeff"非法字符,这个时候需要改变编码方式'UTF-8'为'UTF-8-sig' with open(filePath(fileName='data.csv'),encoding='utf-8-sig') as f: reader=csv.DictReader(f) for item in reader: lists.append(dict(item)) #return lists #读取完第一行,返回第一行。 return lists #每读取完一行就返回整个列表 # print(readCsvDict())
运行结果如下图:
Csv实战
1、sina邮箱为例,代码如下:
base基础包bases.py
from selenium.webdriver.common.by import By from selenium.webdriver.support.expected_conditions import NoSuchFrameException from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver import time as t class WebUI: def __str__(self): return 'driver' '''不管是单元素定位还是单元素定位参数都是*loc''' '''单个元素定位的方法''' def findElement(self,*loc): return self.driver.find_element(*loc) '''多个元素定位的方法''' def findsElements(self,*loc): return self.driver.find_elements(*loc) def findFrame(self, frameID): return self.driver.switch_to.frame(frameID) @property def getTitle(self): return self.driver.Title @property def getUrl(self): t.sleep(2) return self.driver.current_url
数据包data下的文件data.csv文件,代码如下:
username,password,期望结果 ,,请输入邮箱名 asddsDf,Asdf,您输入的邮箱名格式不正确 sddtfy@sina.com,sdsfghjgf,登录名或密码错
对象层包page下的文件init.py和sina.py文件,代码如下:
init.py文件,代码如下:
import unittest from selenium import webdriver class InitSina(unittest.TestCase): def setUp(self) -> None: #1、前置条件 self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get('https://mail.sina.com.cn/') self.driver.implicitly_wait(30)
sina.py文件,代码如下:
from selenium.webdriver.common.by import By from base.bases import WebUI import time as t #继承了WebDrive的类 class Sina(WebUI): #封装属性 username_loc=(By.ID,'freename') password_loc=(By.ID,'freepassword') login_loc=(By.LINK_TEXT,'登录') promptText=(By.XPATH,'/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') nick=(By.XPATH,'//*[@id="user_id"]/em[2]') nickone=(By.XPATH,'//*[@id="greeting"]/span') def username(self,username): '''输入用户名''' self.findElement(*self.username_loc).send_keys(username) def password(self,password): '''输入密码''' self.findElement(*self.password_loc).send_keys(password) @property def clickLogin(self): self.findElement(*self.login_loc).click() def login(self,username,password): self.username(username) self.password(password) #self.clickLogin() self.clickLogin @property def getpromptText(self): t.sleep(2) return self.findElement(*self.promptText).text @property def getNick(self): t.sleep(3) return self.findElement(*self.nick).text #获取的时文本信息,所以是.text @property def getNickOne(self): t.sleep(3) return self.findElement(*self.nickone).text # 获取的时文本信息,所以是.text
测试包test下的test_sina_csv_list.py文件(用列表的方式读取),代码如下:
import time as t from page.sina import Sina from page.init import InitSina from utils.csvUtils import readCsvList import unittest class SinaTest(InitSina,Sina): def test_sina_login_001(self): #索引的方式来定位 self.login(username=readCsvList()[0][0],password=readCsvList()[0][1]) self.assertEqual(self.getpromptText,readCsvList()[0][2]) if __name__ == '__main__': unittest.main(verbosity=2)
运行后,结果如下图:
Excel
在ui自动化测试中,处理Excel文件需要使用的第三方库xlrd,安装命令pip3 install xlrd,安装结果如下图:
excel文件读取处理,先创建一个data.xls文件,文件内容如下图:
读取Excel中的数据代码如下:import xlrd
from utils.pathUtils import filePath def readExcel(): '''读取excel的文件''' lists=[] book=xlrd.open_workbook(filePath(fileName='data.xls'))#打开data.xls文件,获得句柄
sheet=book.sheet_by_index(0) #sheet就是excel表格下面的表单,是按照索引来获取的。
for item in range(1,sheet.nrows): #nrow,返回该工作表的有效行数
#最好一行row_vlues()读取sheet表单里XX行的数据 lists.append(sheet.row_values(item)) #row_values(num)读取num行整行数据
return lists print(readExcel())
运行的结果如下图:(返回的数据类型是列表)
Excel实战(别的公共部分base包下的bases.py和page包下的init.py和sina.py文件的代码在csv实战中)
from page.sina import Sina from page.init import InitSina from utils.execlUtils import readExcel import unittest class SinaTest(InitSina,Sina): def test_file_sina_001(self): '''登录验证:用户名密码为空的信息''' self.login(username=readExcel()[0][0],password=readExcel()[0][1]) #获取错误提示信息 self.assertEqual(self.getpromptText,readExcel()[0][2]) if __name__ == '__main__': unittest.main(verbosity=2)