数据驱动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)

 

posted @ 2021-08-26 18:28  就不将就就  阅读(728)  评论(0编辑  收藏  举报