<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          測(cè)開必備:Selenium Grid分布式并發(fā)執(zhí)行自動(dòng)化測(cè)試!

          共 6829字,需瀏覽 14分鐘

           ·

          2021-12-09 16:46



          01

          什么是Selenium Grid



          Selenium Grid?是?Selenium套件的一部分,它專門用于并行運(yùn)行多個(gè)測(cè)試用例在不同的瀏覽器、操作系統(tǒng)和機(jī)器上


          Selenium Grid有兩個(gè)版本——老版本Grid 1和新版本Grid 2。我們只對(duì)新版本做介紹,因?yàn)镾elenium團(tuán)隊(duì)已經(jīng)逐漸遺棄老版本了


          Selenium Grid主要使用 master-slaves (or hub-nodes) 理念 --一個(gè) master/hub 和多個(gè) 基于master/hub注冊(cè)的子節(jié)點(diǎn) slaves/nodes。當(dāng)我們?cè)趍aster上基于不同的瀏覽器/系統(tǒng)運(yùn)行測(cè)試用例時(shí),master將會(huì)分發(fā)給適當(dāng)?shù)膎ode運(yùn)行




          02

          使用時(shí)間及如何啟動(dòng)



          什么時(shí)候使用Selenium Grid

          • 同時(shí)在不同的瀏覽器、操作系統(tǒng)和機(jī)器上運(yùn)行測(cè)試。最大程度用于兼容性測(cè)試

          • 減少運(yùn)行時(shí)間


          怎樣啟動(dòng)Selenium Grid?
          啟動(dòng)Selenium Grid的三種方式,一種直接用命令行,另一種用JSON配置文件,最后一種docker啟動(dòng)


          01

          命令行啟動(dòng)




          將會(huì)使用2臺(tái)機(jī)器,一臺(tái)運(yùn)行hub另一臺(tái)運(yùn)行node,為了方便描述,將運(yùn)行hub的機(jī)器命名為“Machine H”(IP:192.168.1.100),運(yùn)行node的機(jī)器命名為“Machine N”(IP:192.168.1.101)


          第一步:

          • 配置Java環(huán)境

          • 已安裝需要運(yùn)行的瀏覽器

          • 下載瀏覽器driver,放到和selenium server相同的路徑下(查看) ,否則在啟動(dòng)node時(shí)要加參數(shù),不然啟動(dòng)不了瀏覽器(java -Dwebdriver.chrome.driver="C:\your path\chromedriver.exe" -jar selenium-server-standalone-3.141.59.jar -role node -hub?http://192.168.1.100:5566/grid/register/,可切換瀏覽器)

          driver?

          link

          comments

          Firefox

          下載?? ?

          安裝的瀏覽器要和下載的driver版本一致

          Chrome?? ?

          下載?? ?

          安裝的瀏覽器要和下載的driver版本一致

          IE?? ?

          下載?? ?

          安裝的瀏覽器要和下載的driver版本一致

          Edge?? ?

          下載?? ?

          安裝的瀏覽器要和下載的driver版本一致

          • 下載selenium server,將selenium-server-standalone-X.XX.jar分別放在“Machine H”和“Machine N”上(自定義路徑)



          第二步:

          • 在機(jī)器“Machine H”上打開命令行,到selenium server所在的路徑,運(yùn)行:java -jar selenium-server-standalone-3.141.59.jar -role hub -port 5566,成功啟動(dòng)你會(huì)看到:


            或者直接在機(jī)器“Machine H”上的瀏覽器(“Machine N”則需要將IP修改為“Machine H”的)打開:http://localhost:5566/grid/console ,將會(huì)看到:



          • 在機(jī)器“Machine N”上打開命令行,到selenium server所在的路徑,運(yùn)行:java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.100:5566/grid/register/ -port 5577,成功啟動(dòng)你會(huì)看到:



            刷新:http://localhost:5566/grid/console ,將會(huì)看到:


          第三步:
          運(yùn)行測(cè)試腳本,將會(huì)看到在機(jī)器“Machine N”上打開了Chrome瀏覽器,并運(yùn)行了測(cè)試用例:


          from selenium import webdriver

          ds = {'platform': 'ANY',
          ????? 'browserName': "chrome",
          ????? 'version': '',
          ????? 'javascriptEnabled': True
          ????? }
          dr = webdriver.Remote('http://192.168.1.101:5577/wd/hub', desired_capabilities=ds)
          dr.get("https://www.baidu.com")
          print dr.name


          02
          Json配置文件啟動(dòng)



          第一步:

          • 創(chuàng)建hub的Json配置文件( 查看)

            代碼如下:

          ??? {
          ????? "port": 4444,
          ????? "newSessionWaitTimeout": -1,
          ????? "servlets" : [],
          ????? "withoutServlets": [],
          ????? "custom": {},
          ????? "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
          ????? "registry": "org.openqa.grid.internal.DefaultGridRegistry",
          ????? "throwOnCapabilityNotPresent": true,
          ????? "cleanUpCycle": 5000,
          ????? "role": "hub",
          ????? "debug": false,
          ????? "browserTimeout": 0,
          ????? "timeout": 1800
          ??? }

          將上述代碼保存為hub_config.json文件,放在“Machine H”上和selenium server相同的路徑下。


          • 創(chuàng)建nodes的 Json配置文件(如果selenium版本是3.0或更高則查看,否則查看)
            代碼如下:

          {
          ????? "capabilities":
          ????? [
          ??????? {
          ????????? "browserName": "firefox",
          ????????? "marionette": true,
          ????????? "maxInstances": 5,
          ????????? "seleniumProtocol": "WebDriver"
          ??????? },
          ??????? {
          ????????? "browserName": "chrome",
          ????????? "maxInstances": 5,
          ????????? "seleniumProtocol": "WebDriver"
          ??????? },
          ??????? {
          ????????? "browserName": "internet explorer",
          ????????? "platform": "WINDOWS",
          ????????? "maxInstances": 1,
          ????????? "seleniumProtocol": "WebDriver"
          ??????? },
          ??????? {
          ????????? "browserName": "safari",
          ????????? "technologyPreview": false,
          ????????? "platform": "MAC",
          ????????? "maxInstances": 1,
          ????????? "seleniumProtocol": "WebDriver"
          ??????? }
          ????? ],
          ????? "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
          ????? "maxSession": 5,
          ????? "port": -1,
          ????? "register": true,
          ????? "registerCycle": 5000,
          ????? "hub": "http://192.168.1.100:4444",
          ????? "nodeStatusCheckTimeout": 5000,
          ????? "nodePolling": 5000,
          ????? "role": "node",
          ????? "unregisterIfStillDownAfter": 60000,
          ????? "downPollingLimit": 2,
          ????? "debug": false,
          ????? "servlets" : [],
          ????? "withoutServlets": [],
          ????? "custom": {}
          ??? }

          保存為node_config.json文件(注意將hub對(duì)應(yīng)的值改為機(jī)器“Machine H”的IP),放在“Machine N”上和selenium server相同的路徑下。(當(dāng)多個(gè)node時(shí)需將該文件放在多個(gè)node機(jī)器上或者同一個(gè)機(jī)器上啟動(dòng)多個(gè)node)

          第二步:

          • hub機(jī)器上命令行運(yùn)行:java -jar selenium-server-standalone-3.141.59.jar -role hub -hubConfig hub_config.json

          • node機(jī)器上命令行運(yùn)行:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node_config.json

          運(yùn)行之前的驗(yàn)證方法和腳本查看是否正確

          (1、2)方式啟動(dòng)的挑戰(zhàn)? 不易啟動(dòng)和維護(hù):

          • 每個(gè)node需要下載和配置依賴

          • java 進(jìn)程占內(nèi)存

          • 出現(xiàn)問題時(shí)需手動(dòng)啟動(dòng)

          • 不易維護(hù)

          • 擴(kuò)展性差


          03
          docker啟動(dòng)



          1、docker啟動(dòng)Selenium Grid

          docker上已經(jīng)有selenium官方的Selenium Grid鏡像,只有你已經(jīng)安裝了docker,即可使用。

          • 啟動(dòng)hub:

          docker run -d -p 4444:4444 --name selenium-hub selenium/hub

          • 啟動(dòng)node(Chrome&&Firefox)

          • docker run -d --link selenium-hub:hub selenium/node-chrome


          • docker run -d --link selenium-hub:hub selenium/node-firefo


          運(yùn)行命令將會(huì)下載內(nèi)置鏡像文件(包括java、Chrome、Firefox、selenium-server-standalone-XXX.jar 等運(yùn)行selenium所需的環(huán)境);此時(shí)你可以訪問:http://localhost:4444/grid/console


          如果需要多個(gè)Chrome node則繼續(xù)運(yùn)行這個(gè)命令:docker run -d --link selenium-hub:hub selenium/node-chrome,刷新則看到多了一個(gè)Chrome實(shí)例。通過運(yùn)行命令:docker ps,顯示正在運(yùn)行的容器


          關(guān)閉docker-grid的命令:docker stop $(docker ps -a -q), docker rm $(docker ps -a -q)
          docker已經(jīng)簡(jiǎn)化了selenium Grid的搭建流程,但是還是有很多的手動(dòng)工作。需要一個(gè)一個(gè)的啟動(dòng)/關(guān)閉hub/nodes.


          2、docker 組件啟動(dòng)Selenium Grid

          selenium Grid通常需要啟動(dòng)一個(gè)hub,多個(gè)nodes像Chrome、Firefox等。我們可以把他們定義到一個(gè)文件中叫做docker-compose.yml,通過一個(gè)命令來整體啟動(dòng),docker提供了一個(gè)這樣的工具 –Docker-Compose。


          安裝docker-compose查看,一旦安裝成功,則創(chuàng)建一個(gè)新的文件夾,創(chuàng)建文件?docker-compose.yml, docker-compose.yml內(nèi)容:

          version: "3"
          services:
          ? selenium-hub:
          ??? image: selenium/hub
          ??? container_name: selenium-hub
          ??? ports:
          ????? - "4444:4444"
          ? chrome:
          ??? image: selenium/node-chrome
          ??? depends_on:
          ????? - selenium-hub
          ??? environment:
          ????? - HUB_PORT_4444_TCP_ADDR=selenium-hub
          ????? - HUB_PORT_4444_TCP_PORT=4444
          ? firefox:
          ??? image: selenium/node-firefox
          ??? depends_on:
          ????? - selenium-hub
          ??? environment:
          ????? - HUB_PORT_4444_TCP_ADDR=selenium-hub
          ????? - HUB_PORT_4444_TCP_PORT=4444


          3、docker-compose命令:

          • 運(yùn)行命令啟動(dòng)(到docker-compose.yml路徑下):docker-compose up -d

          • 查看啟動(dòng)是否成功:docker-compose ps

          • 創(chuàng)建更多實(shí)例:docker-compose scale chrome=5

          • 關(guān)閉命令:docker-compose down



          瀏覽器打開http://localhost:4444/grid/console將會(huì)看到:


          運(yùn)行腳本的話直接運(yùn)行就好(IP:http://localhost:4444/wd/hub) ,和上邊兩種的方法不太一樣;不會(huì)有瀏覽器打開(容器內(nèi)部運(yùn)行),但是已經(jīng)運(yùn)行成功:

          import unittest
          from selenium import webdriver

          class MyTestCase(unittest.TestCase):
          ??? def setUp(self):
          ??????? ds = {'platform': 'ANY',
          ????????????? 'browserName': "chrome",
          ????????????? 'version': '',
          ????????????? 'javascriptEnabled': True
          ????????????? }
          ??????? self.dr = webdriver.Remote('http://localhost:4444/wd/hub', desired_capabilities=ds)

          ??? def test_something(self):
          ??????? self.dr.get("https://www.baidu.com")
          ??????? self.assertEqual(self.dr.name, "chrome")

          ??? def test_search_button(self):
          ??????? self.dr.get("https://www.baidu.com")

          ?self.assertTrue(self.dr.find_element_by_id("su").is_displayed())

          ??? def tearDown(self):
          ??????? self.dr.quit()

          if __name__ == '__main__':
          ??? unittest.main()

          文章主要對(duì)啟動(dòng)Selenium Grid的三種方式做了整理,方便使用者選出最佳的方式。

          來源于:https://blog.csdn.net/lb245557472/article/details/91966770


          推薦書

          推薦資訊除了紙質(zhì)圖書外,電子版也已在京東、當(dāng)當(dāng)網(wǎng)上線了。


          (點(diǎn)擊直達(dá)小程序)

          推薦閱讀:

          1. 重磅消息 | 2021年最新全棧測(cè)試開發(fā)技能實(shí)戰(zhàn)指南(第2期)

          2. 低代碼開發(fā),推薦一款Web 端自動(dòng)化神器:Automa!

          3. 史上最全測(cè)試開發(fā)工具推薦(含自動(dòng)化、APP性能、穩(wěn)定性、抓包神器)

          4. 測(cè)試開發(fā):聊一聊自動(dòng)化測(cè)試框架,值得收藏!

          5. 接口測(cè)試常用工具及測(cè)試方法(新手篇)

          6. 全網(wǎng)最全的Postman接口自動(dòng)化測(cè)試!(菜鳥級(jí)攻略)

          END

          所有原創(chuàng)文章
          第一時(shí)間發(fā)布至此公眾號(hào)「測(cè)試開發(fā)技術(shù)」

          長(zhǎng)按二維碼/微信掃碼? 添加作者


          閱讀原文

          瀏覽 69
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月天在线欧美日韩在线 | 香蕉网站啊好硬 | 激情深爱五月 | 欧美一级黄色电影免费看 | 丁香五月乱伦五月 |