您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 > Selenium
使用Selenium測(cè)試時(shí)必需知道的7件事
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2015/11/20 14:16:48 ] 推薦標(biāo)簽:單元測(cè)試工具 Selenium

  行為的重試
  在WebDriver測(cè)試過(guò)程中,糟糕的問(wèn)題在于誤判的錯(cuò)誤,這為自動(dòng)化構(gòu)建過(guò)程帶來(lái)了很大的困難。對(duì)于Yarn的團(tuán)隊(duì)來(lái)說(shuō),這個(gè)問(wèn)題也是他們所面對(duì)的頭號(hào)大敵。為了克服這一點(diǎn),他們?yōu)闇y(cè)試加入了重試的功能,使得測(cè)試結(jié)果得到很大的改善。 以下是這個(gè)重試方法的代碼:
/**
* Try and take an action until it returns a value or we timeout
* @param maxWaitMillis the maximum amount of time to keep trying for in milliseconds
* @param pollIntervalMillis the amount of time to wait between retries in milliseconds
* @param callback a function that gets a value
* @tparam A the type of the callback
* @return whatever the callback returns, or throws an exception
*/
@annotation.tailrec
private def retry[A](maxWaitMillis: Long, pollIntervalMillis: Long)(callback: => A): A = {
val start = System.currentTimeMillis
Try {
callback
} match {
case Success(value) => value
case Failure(thrown) => {
val timeForTest = System.currentTimeMillis - start
val maxTimeToSleep = Math.min(maxWaitMillis - pollIntervalMillis, pollIntervalMillis)
val timeLeftToSleep = maxTimeToSleep - timeForTest
if (maxTimeToSleep <= 0) {        throw thrown      }      else {        if (timeLeftToSleep > 0) {
Thread.sleep(timeLeftToSleep)
}
retry(maxWaitMillis - pollIntervalMillis, pollIntervalMillis)(callback)
}
}
}
}
  這段代碼的功能是通過(guò)一個(gè)簡(jiǎn)單的遞歸算法執(zhí)行所傳入的實(shí)際行為,直到該行為成功,或是運(yùn)行超時(shí)為止。以下是使用這個(gè)方法的簡(jiǎn)單示例:
  def numberOfChildren(implicit user: LucidUser): Int = {
  getWithRetry() {
  user.driver.getCssElement(visibleCss).children.size
  }
  }
  測(cè)試集重試
  Yarn的團(tuán)隊(duì)所做的后一項(xiàng)改善是配置測(cè)試集的重試,測(cè)試集重試會(huì)將失敗的測(cè)試緩存起來(lái),然后重新運(yùn)行這些失敗的測(cè)試。只要在后續(xù)的重試中有一次成功,這項(xiàng)測(cè)試會(huì)被認(rèn)為通過(guò)。否則將繼續(xù)重試,直到重試次數(shù)達(dá)到上限為止。 Yarn的做法是盡量將一些依賴于第三方功能的行為區(qū)分開來(lái),特意為這些功能的集成編寫非常健壯的代碼似乎沒(méi)有什么意義,因此可以將它們放到一個(gè)可重試的測(cè)試集中。對(duì)于他們來(lái)說(shuō),重試的目的不是為了修復(fù)測(cè)試代碼中的問(wèn)題,而是為了消除測(cè)試報(bào)告中由誤判所帶來(lái)的影響。
  創(chuàng)造樂(lè)趣
  Selenium的開發(fā)很容易令人感到疲憊,許多測(cè)試會(huì)無(wú)故地失敗,讓這些測(cè)試得到正確的結(jié)果是非常繁瑣的工作,重復(fù)性的樣板代碼令人提不起興致。而在Yarn的團(tuán)隊(duì)建立了一個(gè)可靠的、可維護(hù)以及可伸縮的框架之后,工作變得有趣起來(lái)了。各種有趣的想法層出不窮,有一位開發(fā)者實(shí)現(xiàn)了對(duì)繪畫canvas截圖并上傳至Amazon S3服務(wù)的功能,隨后又加入了一個(gè)截圖比較的工具以實(shí)現(xiàn)圖片比較測(cè)試。其它令人印象深刻的測(cè)試還包括與Google Drive、Yahoo與Google的單點(diǎn)登錄等功能的整合。整個(gè)測(cè)試工作開始變得生動(dòng)起來(lái),這也為團(tuán)隊(duì)終實(shí)現(xiàn)了重構(gòu)的目標(biāo)帶來(lái)了極大的推動(dòng)力。

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd