滴滴雲控制檯Selenium自動化測試初探

Selenium是一系列基於Web的自動化工具,提供一套測試函數,用於支持Web自動化測試。函數非常靈活,能夠完成界面元素定位、窗口跳轉、結果比較。具有如下特點:

  1. 多瀏覽器支持。如IE、Firefox、Safari、Chrome、Android手機瀏覽器等。
  2. 支持多種語言。如Java、C#、Python、Ruby、PHP等。
  3. 支持多種操作系統。如Windows、Linux、IOS、Android等。
  4. 開源免費。官網:http://www.seleniumhg.org/

Selenium組成部分

一、Selenium IDE

該工具是一個用於構建腳本的初級工具,其實是FireFox的一個插件,擁有一個易於使用的界面。它擁有記錄功能,能夠記錄用戶執行的操作,並可以導出爲可重複使用的腳本。如果沒有編程經驗,可以通過Selenium IDE來快速熟悉Selenium的命令。較少使用。

二、Selenium RC

Selenium RC是selenium家族核心部分。Selenium RC支持多種不同的語言編寫自動化測試腳本,通過SeleniumRC的服務器作爲代理服務器去訪問應用,從而達到測試的目的。

三、Selenium WebDriver

當Selenium2.x提出了WebDriver的概念之後,它提供了完全另外的一種方式與瀏覽器交互。那就是利用瀏覽器原生的API,封裝成一套更加面向對象的SeleniumWebDriver API,直接操作瀏覽器頁面裏的元素,甚至操作瀏覽器本身(截屏,窗口大小,啓動,關閉,安裝插件,配置證書之類的)。由於使用的是瀏覽器原生的API,速度大大提高,而且調用的穩定性交給了瀏覽器廠商本身,顯然是更加科學。然而帶來的一些副作用就是,不同的瀏覽器廠商,對Web元素的操作和呈現多少會有一些差異,這就直接導致了Selenium WebDriver要分瀏覽器廠商不同,而提供不同的實現。例如Firefox就有專門的FirefoxDriver,Chrome就有專門的ChromeDriver等等。(甚至包括了AndroidDriver和iOS WebDriver)

四、Selenium Grid

Selenium Grid通過在許多服務器上同時運行測試,將Selenium Remote Control帶到另一個層次,從而減少了測試多個瀏覽器或操作系統所需的時間。


這裏藉助Selenium WebDriver,以滴滴雲控制檯默認選中爲例展示Selenium如何解放測試人員的雙手。

滴滴雲控制檯DC2創建頁承載着複雜的業務邏輯,衆多頁面都需要跳轉到此,並需要根據URL上的參數而對DC2的配置做默認選中。當多人開發對業務邏輯耦合時,衆多邏輯均會對默認選中的結果造成影響,難以避免導致BUG的產生。在手動測試的情況下,需要回歸測試整個頁面的所有功能點,而用Selenium如何如何保證頁面的穩定呢?

Selenium安裝

Selenium支持多種語言,python最受歡迎,安裝也比較簡單。

pip install selenium

然後需要根據鏈接下載chromedriver 到/usr/local/bin。

執行以下代碼檢測你的環境已經安裝完畢

# coding = utf-8
from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

如果程序能正常打開你的Chrome瀏覽器,輸入selenium並搜索,則說明Selenium安裝成功。

Selenium定位頁面元素

webdriver提供了一系列的對象定位方法,常用的有id,name,class name,link text,partial link text,tag name,xpath,css selector,針對百度的網頁可以有一下多種方法定位頁面元素。

#coding=utf-8

from selenium import webdriver
import time

browser = webdriver.Chrome()

browser.get("http://www.baidu.com")
time.sleep(2)

#########百度輸入框的定位方式##########

#通過id方式定位
browser.find_element_by_id("kw").send_keys("selenium")

#通過name方式定位
browser.find_element_by_name("wd").send_keys("selenium")

#通過tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")

#通過class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")

#通過CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")

#通過xpath方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")

############################################

browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

測試登錄

因爲滴滴雲控制檯部分頁面需登錄後方可打開,所以測試的第一步打開首頁,填入用戶名密碼。

#coding=utf-8
from selenium import webdriver

import time

driver = webdriver.Chrome()
driver.get("http://app.didiyun.com")

driver.find_element_by_css_selector('input[type="text"]').send_keys("189****3932")
driver.find_element_by_css_selector('input[type="password"]').send_keys("3e****FV")
time.sleep(2)

subbutton=driver.find_element_by_css_selector('button[type="submit"]')

subbutton.click()

time.sleep(3)

檢查程序可以打開滴滴雲控制檯首頁,併成功登錄dashboard頁,則登錄驗證成功。

測試默認項選中

本次自動化測試的目的爲檢測從官網跳轉到控制檯時,進入https://app.didiyun.com/#/dc2/add?srvType=ebs&systemDiskType=HE&zoneId=gz01 頁,能否默認選中廣州一區,標準雲服務器,系統盤爲高效雲盤。

#coding=utf-8
from selenium import webdriver

import time

driver = webdriver.Chrome()
driver.get("http://app.didiyun.com")

driver.find_element_by_css_selector('input[type="text"]').send_keys("189****3932")
driver.find_element_by_css_selector('input[type="password"]').send_keys("3e****GB")
time.sleep(2)

#測試的最終結果
TEST_PASS = True

subbutton=driver.find_element_by_css_selector('button[type="submit"]')

subbutton.click()

time.sleep(3)
if (driver.current_url == 'https://app.didiyun.com/#/'):
	print 'Success our dashboard login'

print "Opening our target page"
driver.get('https://app.didiyun.com/#/dc2/add?srvType=ebs&systemDiskType=HE&zoneId=gz01')

#瀏覽器打開需要時間
time.sleep(3)
if (driver.current_url == 'https://app.didiyun.com/#/dc2/add?srvType=ebs&systemDiskType=HE&zoneId=gz01'):
	print 'Opened the dc2 add page'
#################################################
regionName = driver.find_element_by_css_selector('div.region-select3-item.active .region-head span').text

zoneName = driver.find_element_by_css_selector('div.region-select3-item.active .zone-item.active span').text
if(regionName != u'廣州'):
	TEST_PASS = False
	print u"期望區域是廣州,但實際選中是%s" %(regionName)
else:
	if(zoneName != '1'):
		TEST_PASS = False
		print u"期望1區,但實際選中是%s區" %(zoneName)
#################################################
serverType = driver.find_elements_by_xpath('//*[@id="app"]/div[2]/div/form/div[3]/div[1]/div/div[1]/div/div[2]/div/span[1]')[0].text

if(serverType != u'標準雲服務器'):
	 TEST_PASS = False
	 print u"期望服務器類型是標準雲服務器,但實際選中是%s" %(serverType)
##################################################
serverVerion = driver.find_elements_by_xpath('//*[@id="app"]/div[2]/div/form/div[3]/div[2]/div[1]/div/label[1]/span/span')[0].text

if(serverVerion != u'通用型'):
	TEST_PASS = False
	print u"期望服務器類型是通用型,但實際選中是%s" %(serverVerion)
#################################################
diskType = driver.find_element_by_css_selector('div.selector-wrapper input').get_attribute('value')
if(diskType != u'高效雲盤'):
	TEST_PASS = False
	print u"期望的系統盤類型是高效雲盤,但實際選中是%s" %(diskType)

if(TEST_PASS):
	print 'SUCCESS 從官網跳到控制檯dc2創建頁,選中了對應的配置'
else:
	print 'FAIL 從官網跳到控制檯dc2創建頁,未選中了對應的配置'


time.sleep(3)
driver.close()

如果有如下輸出,則測試失敗,需要我們手動進入對應頁面查看默認選中項的情況。

(venv) ➜  ~ python test.py
Success our dashboard login
Opening our target page
期望的系統盤類型是高效雲盤,但實際選中是普通雲盤
FAIL 從官網跳到控制檯dc2創建頁,未選中了對應的配置
(venv) ➜  ~ 

如果有如下輸出,則通過測試。

(venv) ➜  ~ python test.py
Success our dashboard login
Opening our target page
Opened the dc2 add page
SUCCESS 從官網跳到控制檯dc2創建頁,選中了對應的配置
(venv) ➜  ~

在這裏插入圖片描述

後記

我們知道,selenium是一個很優秀的web框架,提供了很豐富的API,使用它結合進行做web的自動化測試真的很完美,但是在實際的情況中,理想與現實總是存在那麼一點距離,這點距離主要是難維護,難維護的最核心是頁面元素經常改變,測試過程中數據很多,不知道怎麼進行維護,頁面元素確實經常改變,很難改變,另外一個就是數據問題,比如我們驗證N個表單在不同輸入情況下的提示信息,會有不同的提示信息,都得需要驗證。

本文只是一個菜雞前端爲減少重複勞動而對自動化測試所做的一個探索,專業的自動化測試肯定會封裝的更加易用,可讀,可維護。斷言,日誌都會用更加專業的框架。

期待自動化測試可以爲滴滴雲的穩定性出一份力。

參考鏈接:

Selenium官網:https://www.seleniumhq.org

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章