Python+Selenium筆記(十二):資料驅動測試,pythonselenium

來源:互聯網
上載者:User

Python+Selenium筆記(十二):資料驅動測試,pythonselenium

(一)   前言

通過使用資料驅動測試,實現對輸入值和預期結果的參數化。(例如:輸入資料和預期結果可以直接讀取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檔案

郵箱

手機

登陸名稱

暱稱

密碼

確認密碼

預期結果

test@outlook.com

1

bky_110

Apsara Distributed File System

test>100

test>100

手機號碼有誤

test@outlook.com

18898989878

b

Apsara Distributed File System

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         #讀取資料的時候,我們一般說的第一行、第一列,索引都是016         #所以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 rows22 @ddt23 class RegisterNewUserDDT(unittest.TestCase):24     @classmethod25     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     @unpack36     def test_register_new_user(self,email,phone,login_name,nickname,password,confirm_password,expected_result):37         driver = self.driver38         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     @classmethod70     def tearDownClass(cls):71         cls.driver.quit()

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.