python-Excel 實戰


一、實戰准備

  在 UI 自動化測試中,處理 Excel 文件需要使用第三方庫 xlrd ,到 python3 安裝目錄下,輸入 cmd 回車,再輸入 pip install xlrd 進行 xlrd 安裝。

  創建一個 Excel 文件 test.xlsx,內容如下:

       

  實現讀取 Excel 文件中的數據代碼如下:

import xlrd

def readExcel(row):
    '''
    :param row: 該參數表示行
    :return: 返回一行數據,數據類型是列表
    '''
    excel01 = xlrd.open_workbook('test.xlsx','r')
    list01 = excel01.sheet_by_index(0)
    return list01.row_values(row)

print('執行后數據為:{0},數據類型為:{1}'.format(readExcel(2),type(readExcel(2))))

  以上代碼,第一行是打開文件,第二行是具體到 excel 文件的 sheet ,這里以索引的方式處理,因為數據是在第一個 sheet 的,所以索引是 0 ,返回的是 XX 行的數據,上傳的參數應該是具體的行,調用以上函數后,返回的數據類型是列表。

  運行輸出:執行后數據為:['admin', 'admin', '您輸入的郵箱名格式不正確'],數據類型為:<class 'list'>

二、Excel 實踐代碼

  以實現新浪郵箱登錄為例。

__author__ = "XXX"

import xlrd
import unittest
from selenium import webdriver
import time as t

def readExcel(row):
    '''
    :param row: 該參數表示行
    :return: 返回一行數據,數據類型是列表
    '''
    excel02 = xlrd.open_workbook('test.xlsx','r')
    list02 = excel02.sheet_by_index(0)
    return list02.row_values(row)

class SinaLogin(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('http://mail.sina.com.cn/')
        self.driver.implicitly_wait(30)

    def tearDown(self):
        t.sleep(3)
        self.driver.quit()

    def login(self,username,password):
        '''驗證:測試新浪郵箱登錄N中情況'''
        self.driver.find_element_by_id('freename').send_keys(username)
        self.driver.find_element_by_id('freepassword').send_keys(password)
        self.driver.find_element_by_link_text(u'登錄').click()

    def getLoginError(self):
        loginError = self.driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/'
                                                    'div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
        # 在freeError-span[1]里,根據情況輸入情況變化的
        return (loginError.text).encode('utf-8')

    def test_sina_password_null(self):
        '''驗證:測試用戶為空密碼不為空的錯誤提示信息'''
        # 用戶名:空,密碼:admin,提示:請輸入郵箱名
        self.login(readExcel(1)[0], readExcel(1)[1])
        self.assertTrue(self.getLoginError(), readExcel(1)[2])

    def test_sina_username_format(self):
        '''驗證:測試用戶郵箱格式不正確的錯誤提示信息'''
        # 用戶名:admin@sina.com,密碼:空,提示:請輸入密碼
        self.login(readExcel(2)[0], readExcel(2)[1])
        self.assertTrue(self.getLoginError(),readExcel(2)[2])

if __name__ == '__main__':
    unittest.main(verbosity=2)

  下面是 ddt 在 Excel 中的實踐:將 ddt 和 Excel 進行整合,讓測試代碼更加簡單。

__author__ = "XXX"

import xlrd
import unittest
from selenium import webdriver
import time as t
from ddt import ddt,data,unpack

def readExcels():
    '''讀取 excel 數據添加到 rows 列表中'''
    rows = []
    book = xlrd.open_workbook('test.xlsx','r')
    sheet = book.sheet_by_index(0)
    for row in range(1,sheet.nrows):
        rows.append(sheet.row_values(row,0,sheet.ncols))
    return rows

@ddt
class SinaLogin(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('http://mail.sina.com.cn/')
        self.driver.implicitly_wait(30)

    def tearDown(self):
        t.sleep(3)
        self.driver.quit()

    def login(self,username,password):
        '''驗證:測試新浪郵箱登錄N中情況'''
        self.driver.find_element_by_id('freename').send_keys(username)
        self.driver.find_element_by_id('freepassword').send_keys(password)
        self.driver.find_element_by_link_text(u'登錄').click()

    def getLoginError(self):
        loginError = self.driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/'
                                                    'div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
        # 在freeError-span[1]里,根據情況輸入情況變化的
        return loginError.text

    @data(*readExcels())
    @unpack
    def test_sina_login(self,username,password,result):
        '''登錄業務測試'''
        self.login(username,password)
        self.assertEqual(
            self.getLoginError(),result
        )

if __name__ == '__main__':
    unittest.main(verbosity=2)

  對讀取 Excel 數據函數進行了重寫,函數  readExcels() 是讀取 Excel 所有的數據並且把這些數據添加到 rows 列表中返回。接下來結合 ddt ,在 data 函數  readExcels 前加 “ * ” 號,這樣數據類型變為元組,只需要寫一個測試用例的代碼就可以達到多個測試點的測試覆蓋。

 

謝謝查看!

2019-11-30


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM