亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
selenium結合docker構建分布式測試環境
作者:不再有的年月 發布時間:[ 2017/4/24 11:17:38 ] 推薦標簽:Selenium 功能測試

  selenium是目前web和app自動化測試的主要框架。對于web自動化測試而言,由于selenium2.0以后socker服務器由本地瀏覽器自己啟動且直接通過瀏覽器原生API操作頁面,故越來越多的人不再使用selenium RC了。大家使用的大多數是selenium-client,python版本的selenium-client新版本是3.3.3(2017-04-04發布),卻忽略了selenium server!事實上在大型的Grid分布式布局中必須要使用selenium server,我也會對這個布局的使用做一些必要的解釋。在開始這個話題之前我說明兩點內容:
  第一、寫selenium結合docker的使用只是個縮影,其實我想讓大家了解使用docker,你可以不精通但是你得會用。!
  第二、我不太想寫一些關于selenium的一些基礎操作,如:browser.get(×××),browser.find_element_by_id(×××)....這些大家都會,不會可以查一些文檔都會有相應的解釋,對我自己而言我想記錄的是一些關于比較高級點的話題,或者在自動化過程中遇到的難題(比如上篇操作flash),又或者selenium中大家忽略的一些方法的使用。
  廢話說了不少,開始我們的話題selenium結合docker構建分布式測試環境。
  1.了解Selenium Standalone Server的使用
  Selenium Standalone Server目前新的版本是3.3.1(dcoker中selenium/hub這個鏡像下載的也是這個新的版本),因為我們的分布式測試環境是基于這個包的使用,我們花一點時間來說說如何使用它。下面是一張Grid分布式布局的基本結構:

  上圖中的selenium hub類似于一個中央處理器,selenium node是遠程需要執行測試的節點,selenium Test case是運行在hub上的測試用例。
  如何啟動一個selenium hub?
  首先需要java的運行環境,在終端中輸入java -jar selenium-server-standalone-x.xx.x.jar -role hub -參數。
  關于這個啟動的參數其實是需要我們來關注的。我們輸入java -jar selenium-server-standalone-2.52.0.jar -role hub -help下面列出來很多啟動參數,我相信你應該能看得懂,在下面的介紹中我也會提到一些參數。
  如何向selenium hub中注冊信息?
  在終端中輸入java -jar selenium-server-standalone-x.xx.x.jar -role node -參數。
  同理,我們輸入java -jar selenium-server-standalone-2.52.0.jar -role node -help獲取一些啟動node的參數說明。
  2.了解docker
  說完了Grid的一些原理,我們來看看docker關于它的說明自行百度。我對它的簡單理解如下:
  docker像個貨船,貨船是干嘛的?裝集裝箱的! 那么這些集裝箱是什么?集裝箱是一個個小的容器! 容器是什么? 容器是一個個搭建有簡易linux系統的特定應用,比如這個容器只搭建了java環境或者只搭建了apache環境! 容器如何啟動它? 通過鏡像來啟動! 鏡像怎么來的? 通過從鏡像源pull或者自己構建鏡像!
  自言自語一會,不知道你是否明白我說什么了,不明白也沒關系,我們結合搭建分布式環境這個應用,你應該會明白!
  說完了docker是什么,我們著手使用!
  1.如何安裝docker?
  如何安裝docker百度上有很多它的說明,由于我的是windows系統,關于它的安裝使用推薦文章如下:
  http://www.jianshu.com/p/4052926bc12c這篇文章講述了用docker搭建spalsh服務器,里面有詳細的關于docker的安裝使用
  2.如何獲取鏡像?
  我們用xshell或者CRT連接docker后,執行如下命令:
  docker pull selenium/hub,它會自動從鏡像源中下載新的selenium/hub鏡像
  docker pull selenium/node-firefox,它會自動從鏡像源中下載新selenium/node-firefox鏡像
  當然可以用docker pull selenium/node-chrome下載selenium/node-chrome的鏡像,目前是沒有基于IE或者Safari瀏覽器的鏡像,當然我們完全有能力去自己構建這些鏡像!這一篇我主要講基于firefox瀏覽器的,其他的類似...
  順便提一句,可以利用docker search+鏡像名稱能搜索鏡像源所存在的鏡像名稱。當我們下載完這2個鏡像后,我們在Xshell中輸入docker images應該有如下信息:

  3.如何啟動這2個鏡像?
  上文提到了我們先啟動一個hub,docker啟動命令如下:
  Sikilu$ docker run -p 5555:4444 -d --name 'selenium_hub'  selenium/hub做一些簡單的說明:
  run:通過鏡像啟動一個容器
  -p:端口映射,5555是容器宿主機的端口是我們docker這個輪船的端口,4444是我們容器的端口是我們集裝箱的端口。這說明了我們把容器的4444端口開放給docker主機的5555端口,那么我們可以通過docker主機的5555端口來訪問容器了,有點?嗦~~~
  -d:docker后臺運行這個容器,我們知道運行server-standalone-2.52.0.jar這個包實際上是啟動一個socket程序的,是在一個while循環中的。如果不啟用后臺運行的話,在xshell當前窗口是不能進行其他的操作的,當然你要再開一個窗口連接docker也可以。
  --name:指定容器運行的別名,如果不指定會隨機生成一個。
  selenium/hub:是我們要運行的鏡像文件。
  啟動完hub后,我們啟動一個node,啟動node命令如下:
  docker run -P -d --link selenium_hub:hub  selenium/node-firefox做一些簡單的說明:
  run:和上文相同
  -P:隨機生成映射端口號,上文中的-p是指定特定的端口號,這里面是node我們并不需要知道容器內部的端口號,當然你要指定也可以,端口號不要沖突即可。
  -d:后臺運行與上文相同。
  --link:說明我們這個容器是依賴上文中我們生成的容器selenium_hub,后面我們會提到link的使用。
  selenium_hub:hub:前面的selenium_hub是我們上文中通過selenium/hub鏡像啟動容器的別名;后面的hub一定要寫成hub或者HUB,寫成其他啟動失敗,為什么這樣我們后面會和--link一起說明。
  selenium/node-firefox:node的鏡像。
  啟動了selenium/hub與selenium/node后,我們運行docker ps有如下信息:

  我們看出來相應的一些啟動信息。
  CONTAINER ID:容器的id號,隨機生成,我們可以對他進行docker stop +id號、docker start +id號,或者docker rm+id號(刪除該容器)
  IMAGE:我們利用到的鏡像文件。
  CMMAND:容器啟動時執行的命令,有Dockerfile文件指定,后面提到!
  PORTS:容器的一些端口信息。
  NAMES:注意到,在啟動node時我們沒有指定--name屬性,所以他隨機命名了sleepy_bhabha,而啟動hub我們指定了--name屬性,hub容器的name為我們指定的selenium-hub
  由于我們是在后臺啟動這2個鏡像文件的,我們想要看容器啟動的log怎么辦,以selenium_hub為例子,我們輸入docker logs selenium_hub有如下信息:

  這些信息與我們在本地PC機上使用selenium-server-standalone-×××.jar無異。同理我們可以用docker logs sleepy_bhabha查看node的啟動信息。
  做完這一切我們在瀏覽器中輸入http://192.168.99.100:5555/grid/console,有如下信息:

  可以看出來,我們的hub中有個新注冊的裝有firefox瀏覽器且版本號為50.0的node節點,我們本地寫個簡單的腳本來測試下這個簡單的grid布局代碼如下:
  #coding=utf-8
  from  selenium import webdriver
  firefox_capabilities ={
  "browserName": "firefox",
  "version": "50.0",#注意版本號一定要寫對
  "platform": "ANY",
  "javascriptEnabled": True,
  "marionette": True,
  }
  browser=webdriver.Remote("http://192.168.99.100:5555/wd/hub",desired_capabilities=firefox_capabilities)#注意端口號5555是我們上文中映射的宿主機端口號
  browser.get("http://www.baidu.com")
  browser.get_screenshot_as_file("D:/baidu.png")
  browser.close()
  代碼比較簡單,是打開node端的firefox瀏覽器,輸入百度后截圖,一切看起來都是那么順利,但是細心的同事可能發現至少有以前2個問題:
  第一、我們對百度的截圖中文是亂碼的,這個不能忍啊!!!
  第二、我們再次在IDE運行下這個腳本,發現一直處于阻塞狀態也不報錯,得不到hub遠程的執行信息~~
  對于問題一,因為我們要涉及到關于docker的鏡像制作等操作我們放在后面介紹,先來看看第二個問題,為什么我們再次運行這個腳本無法正常執行?
  首先,這是和docker無關的,你在真實的PC機上也是同樣的結果!既然和docker無關那是selenium-server-standalone-3.3.1.jar這個包的bug了?答案是:也不是!那到底是什么我們來看看是什么原因。我們打開hub的log(docker logs selenium_hub)。截圖如下:

  看出來,第一次我們得到了一個包含有Capabilties請求的request后成功的建立了一個session,這個對應于我們第一次在IDE運行上文的腳本;我們第二次再次運行這個腳本,雖然hub得到了這個請求,但是沒有成功的建立了一個新的session。那么問題可能出在node端它不容許建立新的session,所以我們一直處于阻塞狀態(阻塞的時間由node的啟動參數newSessionWaitTimeout決定),除非我們的第一個session被人為的或者由于超時被自動切斷后,才能重新建立!
  問題知道了,我們如何改進呢?對的是改變node的啟動參數。我們seleniu/node鏡像默認的關鍵參數如下:
  "capabilities": [
  {
  "maxInstances": $NODE_MAX_INSTANCES,#大的瀏覽器實例
  ......
  }
  "maxSession": $NODE_MAX_SESSION #大的Session數目

上一頁12下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 欧美视频1| 成人免费观看www视频 | 91成人精品 | 国产欧美精品区一区二区三区 | 亚洲国产第一页 | 1717she精品国产真正免费 | 欧美成视频一theporn | 亚洲综合在线播放 | 精品欧美日韩一区二区三区 | 色综合久久久久久久久五月性色 | a免费国产一级特黄aa大 | 国产成人福利免费视频 | 日批视频在线免费观看 | 最近中文字幕经典版在线 | www.妞干网 | 日韩黄色精品 | 国产自在线拍 | 三级毛片在线免费观看 | 噜噜噜色噜噜噜久久 | 色五夜 | 日韩伦理一区 | 日本久久精品 | 欧美成人精品第一区首页 | 日韩在线 在线播放 | 日本xxxx18vr69| 亚洲精品成人久久 | 99re热精品视频国产免费 | 狠狠狠狠狠干 | 射影院| 亚洲国产成人va在线观看网址 | 欧美三级中文字幕hd | 91资源在线视频 | 欧美高清在线视频一区二区 | 2021入口一二三四麻豆 | 国产视频大全 | 午夜嘿嘿 | 国产成人精品777 | 国产成人精品免费视频软件 | 亚洲欧洲中文日产 | 国产日产欧美一区二区三区 | 看免费毛片 |