1. 程式人生 > >Python+Selenium筆記(十二):數據驅動測試

Python+Selenium筆記(十二):數據驅動測試

name excel表格 assm ddt table clear div 讀取數據 郵箱

(一) 前言

通過使用數據驅動測試,實現對輸入值和預期結果的參數化。(例如:輸入數據和預期結果可以直接讀取Excel文檔的數據)

(二) ddt

使用ddt執行數據驅動測試,ddt庫可以將測試中的變量參數化。使用ddt的時候,在測試類上使用@ddt裝飾符,在測試方法上使用@data裝飾符。@data裝飾符將參數當作測試數據,參數可以是單個值、列表、元組、字典。對於列表和元組,需要用@unpack裝飾符把列表和元組解析成多個參數。

使用下面的命令安裝ddt庫

pip install ddt

(三) 通過Excel獲取數據

讀取Excel文件,需要用到xlrd庫。

安裝xlrd的庫

pip install xlrd

如果要往Excel表格寫數據,需要用到xlwt庫

pip install xlwt

(四) 示例中用到的excel文件

郵箱

手機

登陸名稱

昵稱

密碼

確認密碼

預期結果

[email protected]

1

bky_110

盤古

test>100

test>100

手機號碼有誤

[email protected]

18898989878

b

盤古

test>100

test>100

不合要求,至少2個字符,最多30個字符

技術分享圖片

(五) 示例

 1 from selenium import
webdriver 2 from ddt import ddt,data,unpack 3 import xlrd 4 import unittest 5 #讀取excel文件的函數 6 def get_data(file_name): 7 rows = [] 8 #讀取excel的數據 9 book = xlrd.open_workbook(file_name) 10 #通過索引訪問第一個sheet頁 11 sheet = book.sheet_by_index(0) 12 #叠代讀取excel第一個sheet頁的數據,sheet.nrows指excel的行數
13 for r_idx in range(1, sheet.nrows): 14 #row_values讀取第r_idx行的數據(0代表讀取第1列及後面所有列的數據) 15 #讀取數據的時候,我們一般說的第一行、第一列,索引都是0 16 #所以r_idx=1的時候,讀取的其實是excel第二行的數據 17 rows.append(list(sheet.row_values(r_idx,0))) 18 #先將手機號刪除並賦值給pthone,然後轉換為字符串並添加回原來的位置 19 pthone = rows[r_idx - 1].pop(1) 20 rows[r_idx - 1].insert(1, str(int(pthone))) 21 return rows 22 @ddt 23 class RegisterNewUserDDT(unittest.TestCase): 24 @classmethod 25 def setUpClass(cls): 26 cls.driver = webdriver.Chrome() 27 cls.driver.implicitly_wait(20) 28 cls.driver.maximize_window() 29 cls.driver.get(https://www.cnblogs.com/) 30 login_area = cls.driver.find_element_by_css_selector(#login_area) 31 register = login_area.find_element_by_link_text(註冊) 32 register.click() 33 #讀取excel文件的數據作為參數 34 @data(*get_data(data/reTest.xlsx)) 35 @unpack 36 def test_register_new_user(self,email,phone,login_name,nickname,password,confirm_password,expected_result): 37 driver = self.driver 38 self.assertTrue(用戶註冊 - 博客園 == driver.title) 39 # 定位註冊頁面各個字段 40 user_email = driver.find_element_by_id(Email) 41 user_phone_country = driver.find_element_by_id(CountryCode) 42 user_phone = driver.find_element_by_id(PhoneNum) 43 user_login_name = driver.find_element_by_id(LoginName) 44 user_nickname = driver.find_element_by_id(DisplayName) 45 user_password = driver.find_element_by_id(Password) 46 user_confirm_password = driver.find_element_by_id(ConfirmPassword) 47 #清除各字段的值(如果有) 48 user_email.clear() 49 user_phone.clear() 50 user_login_name.clear() 51 user_nickname.clear() 52 user_password.clear() 53 user_confirm_password.clear() 54 #輸入郵箱、手機號等信息 55 user_email.send_keys(email) 56 user_phone.send_keys(phone) 57 user_login_name.send_keys(login_name) 58 user_nickname.send_keys(nickname) 59 user_password.send_keys(password) 60 user_confirm_password.send_keys(confirm_password) 61 #判斷提示是否正確(這邊應該有辦法可以獲取當前是第幾次執行,下面的寫法太死板了) 62 if phone == 1: 63 phone_error = driver.find_element_by_id(PhoneNum-error) 64 self.assertTrue(phone_error.text == expected_result) 65 elif login_name == b: 66 loginName_error = driver.find_element_by_id(LoginName-error) 67 self.assertTrue(loginName_error.text == expected_result) 68 69 @classmethod 70 def tearDownClass(cls): 71 cls.driver.quit()

Python+Selenium筆記(十二):數據驅動測試