• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Selenium在電話自動撥測系統(tǒng)中的應(yīng)用

      2021-10-28 04:42:28馬天鳴
      計算機技術(shù)與發(fā)展 2021年10期
      關(guān)鍵詞:測試報告測系統(tǒng)測試用例

      馬天鳴,梁 琛

      (1.上海工程技術(shù)大學(xué) 電子電氣工程學(xué)院,上海 201620; 2.電信科學(xué)技術(shù)第一研究所有限公司,上海 200032)

      0 引 言

      在項目的開發(fā)過程中,新版本的連續(xù)發(fā)布使回歸測試的需求更為頻繁,在項目周期長,模塊功能復(fù)雜的情況下,采用手工方式對系統(tǒng)功能進(jìn)行多次重復(fù)的驗證時,會消耗大量時間,增加測試成本。因此,選擇正確的回歸測試策略來改進(jìn)測試的效率和有效性是很有必要的。使用自動化測試[1-3]的方式來進(jìn)行回歸測試,可以進(jìn)行大規(guī)模、長時間和多周期的測試,既減少測試人員的工作量,又保證了測試的效率和準(zhǔn)確性。

      為了實現(xiàn)全國各局之間、局與各電信運營商網(wǎng)絡(luò)之間的通信暢通,實時監(jiān)測全網(wǎng)通斷情況,及時、準(zhǔn)確定位故障線路,對全網(wǎng)設(shè)備、資源優(yōu)化提供科學(xué)依據(jù)等運營目標(biāo),迫切需要建設(shè)一套覆蓋全網(wǎng)的電話自動撥測系統(tǒng)。

      根據(jù)電話自動撥測系統(tǒng)需求變動不頻繁、項目周期長以及系統(tǒng)界面穩(wěn)定、變動少的特點,引入UI自動化測試來達(dá)到擴大測試覆蓋率,降低回歸測試成本的效果。

      Selenium[4-8]是一個主要用于web應(yīng)用程序自動化測試[9]的工具集合,最初是為網(wǎng)站自動化測試而開發(fā)的[10],它支持各種主流瀏覽器和多種編程語言,可以跨平臺使用。該工具能模擬用戶操作,在瀏覽器中直接運行,擁有足夠好的用戶體驗[11],其開源優(yōu)勢以及功能特點符合電話自動撥測系統(tǒng)對于自動化測試工具的要求。

      1 Selenium自動化測試的相關(guān)工作

      1.1 電話自動撥測系統(tǒng)的介紹

      電話自動撥測系統(tǒng)是B/S(瀏覽器/服務(wù)器)架構(gòu)的系統(tǒng),由統(tǒng)計分析、端局狀態(tài)、端局管理、號碼管理、撥測管理和系統(tǒng)管理六個模塊組成,如圖1所示。

      其中,登錄是進(jìn)入系統(tǒng)的前提,端局管理和號碼管理兩個模塊需要對大量的省市端局和號碼進(jìn)行增加、刪除、修改、關(guān)聯(lián)等操作,系統(tǒng)管理則需要添加各端局的登錄用戶、配置對應(yīng)的權(quán)限,步驟重復(fù)繁瑣,僅以手工的方式對這部分功能進(jìn)行測試會消耗大量的時間和精力,增加測試人員的負(fù)擔(dān)。故需要引入適合web應(yīng)用程序的自動化工具對系統(tǒng)進(jìn)行回歸測試,從而提高測試效率。

      1.2 Selenium概述

      Selenium是一種基于瀏覽器的自動化測試工具,提供了一種跨平臺、跨瀏覽器的端到端web自動化解決方案。Selenium支持主流的瀏覽器,包括Firefox、IE、Chrome、Safari和Opera等,它可以模擬使用者與瀏覽器之間的交互,如訪問網(wǎng)站、點擊鏈接、填寫表單、瀏覽網(wǎng)頁等。Selenium前后共經(jīng)歷了三個版本,分別是Selenium1.0、Selenium2.0和Selenium3.0,現(xiàn)使用最新版本3.0來做測試,Selenium3.0主要包括三個部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。

      Selenium IDE作為瀏覽器Mozilla Firefox的插件,不需要任何編程邏輯來編寫測試腳本,它通過與瀏覽器的交互可以進(jìn)行錄制和回放,并能把錄制的操作以多種編程語言的形式導(dǎo)出測試用例。

      Selenium WebDriver提供了web自動化所需的API(應(yīng)用程序接口),主要用作瀏覽器控制、頁面元素選擇和調(diào)試。使用Selenium WebDriver前要選擇一種語言來編寫自動化腳本且需要由selenium client library支持。

      Selenium Grid提供了在不同瀏覽器上運行Selenium的能力,它的作用是分布式執(zhí)行測試,可以控制多臺機器以及多個瀏覽器執(zhí)行測試用例。在測試用例較多的情況下,通過Selenium Grid可以提高測試效率。

      1.3 python的優(yōu)勢

      python是一門被廣泛應(yīng)用的高級編程語言,它語法簡單、簡潔易懂、框架復(fù)用性高、可移植性強,并且提供了大量的內(nèi)置庫、函數(shù)以及用戶編寫的第三方庫,眾多開源的科學(xué)計算軟件包都提供了python的調(diào)用接口[12],從而可以容易地實現(xiàn)一些復(fù)雜的功能。python支持Selenium client library,既可以使用C/C++進(jìn)行擴展,又能嵌入其他編程語言中,故選擇python來編寫自動化測試腳本。

      1.4 Selenium自動化測試流程

      Selenium的測試過程分為六個步驟,分別是制定測試計劃、編寫測試腳本、優(yōu)化測試腳本、執(zhí)行測試腳本、生成測試報告和郵件發(fā)送報告,如圖2所示。

      圖2 Selenium自動化測試過程

      1.4.1 制定測試計劃

      自動化項目的測試計劃做得越詳細(xì),后期就越能按部就班地去執(zhí)行,測試的成功率也就越高。對于系統(tǒng)而言,并非所有的功能點都適合使用自動化來進(jìn)行回歸測試,因此需要羅列所有符合Selenium測試條件的模塊并對其功能點進(jìn)行細(xì)化來設(shè)計測試用例,然后再實施后面五個步驟。

      1.4.2 編寫測試腳本

      單元測試框架是編寫自動化測試用例的基礎(chǔ)[4]。unittest一般稱為PyUnit,是從Java程序中廣泛應(yīng)用的JUnit啟發(fā)而來的,可以使用unittest為任何項目創(chuàng)建全面的測試套件,unittest也是python中用來測試各種標(biāo)準(zhǔn)類庫模塊的[13]?,F(xiàn)使用unittest單元測試框架來創(chuàng)建基于python的Selenium Webdriver測試腳本。unittest適用于web自動化測試用例的開發(fā)和執(zhí)行,它可以用來組織和執(zhí)行系統(tǒng)各模塊的測試用例。

      1.4.3 優(yōu)化測試腳本

      編寫的腳本只包含元素定位和頁面操作,沒有校驗測試用例中預(yù)期結(jié)果和程序返回的實際結(jié)果是否一致,因此需要對腳本進(jìn)行優(yōu)化,通過斷言的方式來判定測試用例執(zhí)行成功與否,如等價校驗、邏輯校驗和異常校驗等。

      1.4.4 執(zhí)行測試腳本

      測試腳本是以py為后綴的文件,在代碼編輯器中運行當(dāng)前文件,腳本便自動開始執(zhí)行,Chrome瀏覽器立即彈出并按測試用例中的步驟依次執(zhí)行,在結(jié)束時瀏覽器的窗口會自動進(jìn)行關(guān)閉。

      1.4.5 生成測試報告

      使用unittest的拓展HTMLTestRunner生成格式友好的HTML測試報告,既能獲取測試結(jié)果的概況,又能深入查看報告的細(xì)節(jié)。

      1.4.6 郵件發(fā)送報告

      以郵件附件的形式自動發(fā)送測試報告至相關(guān)技術(shù)人員的郵箱,這樣能讓他們及時了解系統(tǒng)缺陷的詳細(xì)情況,有助于其后續(xù)工作的安排和開展。

      2 Selenium測試的實例分析

      2.1 制定測試計劃

      電話自動撥測系統(tǒng)中的系統(tǒng)管理、端局管理和號碼管理分別牽涉到大量的端局用戶、省市端局和撥測號碼,用手動測試的方法進(jìn)行重復(fù)的操作會消耗不少時間,而且降低了測試人員對于工作的積極性,使用Selenium工具對這三個模塊中部分適合自動化測試的功能點進(jìn)行回歸測試,比如對撥測號碼以及端局用戶信息的新增,刪除和修改等,這樣可以減輕重復(fù)操作的負(fù)擔(dān),從而提高測試人員的工作積極性。

      系統(tǒng)登錄雖然不在系統(tǒng)管理、端局管理和號碼管理三個模塊的范圍內(nèi),但由于操作任何一個模塊都無法逾越這個步驟,因此該部分也納入了自動化測試的范圍。

      2.2 編寫測試腳本

      2.2.1 系統(tǒng)登陸驗證碼

      登錄電話自動撥測系統(tǒng)的前提是輸入正確的用戶名、密碼和由四個隨機數(shù)字組成的驗證碼,用戶名和密碼是固定的,驗證碼則是隨機生成的,需要正確識別才能進(jìn)行后續(xù)操作,系統(tǒng)登錄框如圖3所示。

      圖3 登錄框的顯示

      主要有四個方法來解決通過驗證碼的問題:(1)去掉驗證碼部分的代碼;(2)使用一個萬能驗證碼;(3)通過cookie直接登錄系統(tǒng),從而避開驗證碼這一步驟;(4)識別驗證碼中的數(shù)字并登錄系統(tǒng)。第一種方法去掉驗證環(huán)節(jié)會給系統(tǒng)帶來安全風(fēng)險,第二種方法則需要通過開發(fā)的協(xié)助才能完成,第三種方法不能對驗證碼進(jìn)行自動化測試,因此只有最后一種才是安全,可行的方法。

      要識別驗證碼首先要對數(shù)字區(qū)域進(jìn)行截取,webdriver能對瀏覽器頁面進(jìn)行截圖,但是整個瀏覽器頁面過大,需要具體定位到驗證碼圖片的所在位置。通過驗證碼的標(biāo)簽id定位到該標(biāo)簽所在頁面的像素位置,再獲取標(biāo)簽大小,確定圖片的寬和高,從而獲得驗證碼的位置和大小。在截取驗證碼圖片后,使之轉(zhuǎn)化成灰度圖并增強它的飽和度,此時保存后的圖片如圖4所示。

      圖4 處理后的驗證碼圖片

      從圖4可以看出,此時驗證碼的辨識度比較高,通過把圖片中的內(nèi)容轉(zhuǎn)化為字符串的操作,成功地辨識出驗證碼中的數(shù)字,使得系統(tǒng)登錄的整個過程得以自動完成。

      2.2.2 單元測試框架

      單元測試是一項對技術(shù)要求很高的工作,只有白盒測試人員和軟件開發(fā)人員才能勝任,但用單元測試框架做單元測試卻十分簡單,而且單元測試框架不僅可以用來做單元測試,還適用于不同類型的自動化測試[14]。

      單元測試框架是構(gòu)建自動化測試用例的基礎(chǔ),在python中有多種單元測試框架,如unittest、doctest、pytest和nose等,電話自動撥測系統(tǒng)使用的是unittest,它可以為任何項目創(chuàng)建全面的測試套件,主要由Test Case、Test Suite、Test Runner和Test Fixture四個核心組件構(gòu)成。在執(zhí)行Test Suite(測試套件)后,unittest在命令行會輸出對應(yīng)的測試結(jié)果,使用unittest的拓展HTMLTestRunner可以進(jìn)一步生成Test Report(測試報告),如圖5所示。

      圖5 unittest單元測試框架

      (1)Test Case[15-18](測試用例)。一個測試用例是在unittest中執(zhí)行測試的最小單元,它通過assert方法來驗證一組特定的操作和輸入以后得到的具體響應(yīng)。unittest提供了TestCase基類,可以用來創(chuàng)建測試用例。

      (2)Test Suite(測試套件)。一個測試套件是多個測試或測試用例的集合,是針對被測程序的對應(yīng)的功能和模塊創(chuàng)建的一組測試,一個測試套件內(nèi)的測試用例將一起執(zhí)行。

      (3)Test Runner(測試執(zhí)行器)。測試執(zhí)行器負(fù)責(zé)測試執(zhí)行調(diào)度并且生成測試結(jié)果給用戶。測試執(zhí)行器可以使用圖形界面、文本界面或者特定的返回值來展示測試執(zhí)行結(jié)果。

      (4)Test Fixture(測試夾具)。通過使用測試夾具,可以定義在單個或多個測試執(zhí)行之前的準(zhǔn)備工作和測試執(zhí)行之后的清理工作。

      (5)Test Report(測試報告)。測試報告用來展示所有執(zhí)行用例的成功或者失敗狀態(tài)的匯總,執(zhí)行失敗的測試步驟的預(yù)期結(jié)果與實際結(jié)果,還有整體運行狀況和運行時間的匯總。

      2.2.3 頁面定位元素

      頁面元素都是由HTML代碼組成的,它們之間有層級地組織起來,每個元素有不同的標(biāo)簽名和屬性值,WebDriver就是根據(jù)這些信息來定位元素的。Selenium主要有id、name、tag、class、link_text、partial link、XPath、CSS_selector八種元素定位的方法,這些方法根據(jù)一定的標(biāo)準(zhǔn)取查找元素,如果元素被正常定位,那么WebElement實例返回,否則拋出NoSuchElementException的異常。

      電話自動撥測系統(tǒng)主要使用id、name和class屬性來查找元素,這三種方式是最為普遍和快捷的,當(dāng)上述方法無法生效時,使用XPath的方式可以靈活地運用絕對或相對路徑來進(jìn)行定位。

      基于元素id的定位方法是通過查找Web頁面上的元素id值來獲取元素,比較簡單,適合Web元素id固定的情況來使用,對于動態(tài)分配Web元素id的情況不能使用[11]。由于頁面中元素的id是唯一的,因此通過id定位元素是最佳方法。

      基于元素name的定位方法是另一種常見的查找元素的方式,可以通過匹配name的值來定位一個或者一組元素,如果匹配成功則返回查找的元素,匹配失敗則拋出異常。

      基于元素class的定位方法用來關(guān)聯(lián)css中定義的屬性,class可以指定元素的類名,其用法和id、name相類似。

      基于元素XPath的定位方法是通過元素的路徑來完成對元素的查找,XPath是XML路徑語言,可以用來定位XML文檔中元素的位置。Xpath分兩種定位方法,一種是用絕對/相對路徑來定位,另一種是使用元素屬性來進(jìn)行定位。

      2.2.4 操作頁面元素

      Webdriver提供很多用來與瀏覽器交互的功能和設(shè)置,可以通過使用Webdriver的功能和方法來實現(xiàn)與瀏覽器窗口、警告、框架和彈出窗口的交互。自動化過程中與頁面元素進(jìn)行交互的方法都是由WebElement接口提供的,頁面元素包含文本框、文本域、按鈕、單選框、多選框和下拉列表等。

      WebElement提供了一些功能和方法來實現(xiàn)與網(wǎng)頁元素的交互,WebElement的功能如size(獲取元素大小)、tage_name(獲取元素的標(biāo)簽名稱)和text(獲取元素的文本值)等,方法如clear(清除文本)、send_keys(*value)模擬按鍵輸入和click()(單擊元素)等。WebElement與各種HTML控件的自動化交互,例如在輸入框內(nèi)寫入文本、單擊一個按鈕和選擇單復(fù)選框等。

      2.2.5 頁面元素等待

      當(dāng)沒有定位到標(biāo)簽元素時,除了找錯標(biāo)簽這個原因以外,還有一種可能就是標(biāo)簽由于網(wǎng)速等因素沒有及時加載出來,直接獲取會導(dǎo)致程序運行時報錯,因此需要設(shè)置線程等待,Selenium提供了兩種等待機制:隱式等待和顯式等待。

      隱式等待對于解決網(wǎng)絡(luò)延遲或者利用Ajax動態(tài)加載元素所導(dǎo)致的程序響應(yīng)時間不一致,是非常有效的,WebDriver類提供了implicitly_wait()方法來設(shè)置超時時間;顯式等待可以只作用于僅有同步需求的測試用例,WebDriver提供了WebDriverWait類和expected_conditions類來實現(xiàn)顯式等待[13]。

      在處理同步問題上,顯式等待的可操控性更佳,處理方式更靈活,故在電話自動撥測系統(tǒng)腳本的編寫中使用顯式等待的機制。

      2.2.6 控制瀏覽器

      瀏覽器的工具欄中一般都有前進(jìn)、后退以及刷新的按鈕,這些功能比較實用,在網(wǎng)頁操作中經(jīng)常會用到,Selenium Webdriver提供了這些操作瀏覽器的方法。

      瀏覽器全屏模式可以用maxmize_window()的方法來實現(xiàn),該方法無需設(shè)置參數(shù);當(dāng)想要讓瀏覽器以某種特定的大小運行時,可以用set_window_size()的方法來設(shè)置瀏覽器的窗口大小。

      Webdriver提供了forward(),back()和refresh()來模擬瀏覽器前進(jìn)、后退以及刷新/重新加載的按鍵功能。

      2.3 優(yōu)化測試腳本

      測試腳本中驗證實際和預(yù)期結(jié)果是否一致是很重要的,unittest的TestCase類提供了很多實用的方法來校驗預(yù)期結(jié)果與程序返回的實際結(jié)果是否一致,如assertEqual/assertNotEqual、assertTrue/assertFalse、assertIn/assertNotIn等,這些方法要求必須滿足某些條件才能繼續(xù)執(zhí)行接下來的測試。如果給定的斷言通過了,下面的測試代碼則被執(zhí)行,否則將會導(dǎo)致測試立即停止并且給出異常信息。

      2.4 生成測試腳本

      執(zhí)行測試套件后,unittest在命令行輸出測試結(jié)果,但是給相關(guān)技術(shù)人員發(fā)送命令行日志并不是一個明智的選擇,生成一個包含所有用例執(zhí)行情況的測試報告是很有必要的。unittest沒有相應(yīng)的內(nèi)置模塊能創(chuàng)建格式友好的測試報告,可以通過使用unittest的拓展HTMLTestRunner來實現(xiàn),腳本生成的測試報告如圖6所示。

      圖6 HTML測試報告

      測試報告為HTML文件,可以用瀏覽器進(jìn)行讀取,它包含測試開始時間、持續(xù)時長、狀態(tài)統(tǒng)計以及每個測試用例執(zhí)行結(jié)果的詳細(xì)描述。圖6為系統(tǒng)管理、端局管理和號碼管理三個模塊選取部分用例所生成的測試報告,其中執(zhí)行失敗的用例可以通過展開Detail來對問題進(jìn)行具體的定位和分析。

      圖7 郵件自動發(fā)送測試報告

      2.5 郵件自動發(fā)送測試報告

      以郵件的形式自動發(fā)送測試報告是電話自動撥測系統(tǒng)的重要需求之一,當(dāng)測試腳本執(zhí)行完成以后,便會自動向項目相關(guān)人員的郵箱發(fā)送測試報告。yagmail是python的一個第三方庫,通過使用yagmail能以比較簡單的方法來實現(xiàn)自動發(fā)送郵件的功能。在發(fā)送郵件時,除了填寫主題和正文外,還可以增加抄送人和添加附件等。

      由于HTMLTestRunner報告在展示時引用了Bootstrap樣式庫,當(dāng)作為正文寫在郵件中時,會導(dǎo)致樣式丟失,所以作為附件發(fā)送更為合適,如圖7所示。

      3 結(jié)束語

      為減少手工測試工作量,提高測試效率,使用Selenium自動化測試工具對撥測系統(tǒng)中三個主要模塊進(jìn)行回歸測試。測試結(jié)果表明,該方法可以模擬手工操作反復(fù)地執(zhí)行并生成直觀、易于定位bug的HTML測試報告,最后以郵件附件形式每天定時發(fā)送給相關(guān)技術(shù)人員。相比手工測試,此方法節(jié)省了重復(fù)執(zhí)行測試用例的時間,提高了測試效率,為開發(fā)能盡早修復(fù)缺陷,相關(guān)人員能及時了解測試情況提供了便利。

      猜你喜歡
      測試報告測系統(tǒng)測試用例
      關(guān)于戶外體育游戲?qū)τ變后w能影響的調(diào)查研究
      甘肅教育(2021年5期)2021-12-29 15:41:24
      基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
      基于混合遺傳算法的回歸測試用例集最小化研究
      百變星君:ROLLINGSTONE 變色龍紫破風(fēng)車架測試報告
      防洪非工程措施設(shè)計實例——嘉興市水文巡測系統(tǒng)項目設(shè)計
      電快速瞬變脈沖群對核測系統(tǒng)的影響及對策
      SSAB Hardox悍達(dá)450材料輕型自卸車廂體測試報告
      專用汽車(2016年9期)2016-03-01 04:17:19
      基于廣域量測系統(tǒng)的電力系統(tǒng)綜合負(fù)荷辨識模型的研究
      電測與儀表(2015年8期)2015-04-09 11:50:12
      基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
      三維標(biāo)測系統(tǒng)指導(dǎo)下射頻消融治療房顫的護理觀察
      开平市| 广汉市| 翁源县| 石嘴山市| 巨鹿县| 乌拉特后旗| 康马县| 定边县| 板桥市| 大名县| 陈巴尔虎旗| 蕲春县| 双峰县| 县级市| 横山县| 陵水| 六枝特区| 云浮市| 栾川县| 五河县| 泾川县| 师宗县| 新密市| 乐平市| 乌兰浩特市| 和龙市| 伊宁县| 东安县| 苏尼特左旗| 洪江市| 临泽县| 湖南省| 康保县| 南溪县| 虎林市| 屏山县| 山丹县| 喀什市| 颍上县| 保靖县| 昌黎县|