发表于: 2019-12-07 22:30:39

1 818


一、今天完成的事情:

1.用selenium Grid通过一个主机控制并行的执行测试用例,看多台服务器上不同浏览器不同操作系统测试环境中的测试运行。

1)配置浏览器环境变量

2)部署Hub节点(hub节点地址:192.168.0.103)

3)查看部署Hub节点是否成功

4)部署Node节点(node节点地址:192.168.0.106)

5)查看Node节点是否已上线

6)编写测试用例

①执行下段代码可以通过hub节点访问node节点的谷歌浏览器,并打开百度搜索selenium Grid

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

driver=webdriver.Remote(
    command_executor='http://192.168.0.103:4444/wd/hub',
    desired_capabilities=DesiredCapabilities.CHROME)
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium Grid")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

执行下段代码可以通过hub节点访问node节点的火狐浏览器成功,并打开百度搜索selenium Grid

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

driver=webdriver.Remote(
    command_executor='http://192.168.0.103:4444/wd/hub',
    desired_capabilities=DesiredCapabilities.FIREFOX)
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium Grid")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()


2.最后把不同浏览器上的测试执行步骤和结果写出,整理并提交

1)执行下段代码,通过hub节点访问node节点谷歌浏览器,访问百度并搜索“selenium Grid”成功

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
import unittest
import HTMLTestRunner

class SeleniumGridBaiduTest(unittest.TestCase):
    def setUp(self): 
        self.driver=webdriver.Remote(
            command_executor='http://192.168.0.103:4444/wd/hub',
            desired_capabilities=DesiredCapabilities.CHROME)

    def test_baidu(self):
        driver=self.driver
        driver.get("https://www.baidu.com")
        driver.find_element_by_id("kw").send_keys("selenium Grid")
        driver.find_element_by_id("su").click()
        time.sleep(3)

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    suite=unittest.TestSuite()
    suite.addTest(SeleniumGridBaiduTest('test_baidu'))
    file_path="C:\\Users\\Administrator\\Desktop\\result1.html"
    file_result=open(file_path,'wb')
    runner=HTMLTestRunner.HTMLTestRunner(stream=file_result,title=u"百度搜索测试报告",description="用例执行情况")
    runner.run(suite)

结果如下

2)执行下段代码,通过hub节点访问node节点谷歌浏览器,访问百度并搜索“selenium Grid”成功

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
import unittest
import HTMLTestRunner

class SeleniumGridBaiduTest(unittest.TestCase):
    def setUp(self): 
        self.driver=webdriver.Remote(
            command_executor='http://192.168.0.103:4444/wd/hub',
            desired_capabilities=DesiredCapabilities.FIREFOX)

    def test_baidu(self):
        driver=self.driver
        driver.get("https://www.baidu.com")
        driver.find_element_by_id("kw").send_keys("selenium Grid")
        driver.find_element_by_id("su").click()
        time.sleep(3)

    def tearDown(self):
        self.driver.quit()

if __name__ == "__main__":
    suite=unittest.TestSuite()
    suite.addTest(SeleniumGridBaiduTest('test_baidu'))
    file_path="C:\\Users\\Administrator\\Desktop\\result1.html"
    file_result=open(file_path,'wb')
    runner=HTMLTestRunner.HTMLTestRunner(stream=file_result,title=u"百度搜索测试报告",description="用例执行情况")
    runner.run(suite)

结果如下:


二、明天计划的事情:

1.完成任务9,开始任务10


三、遇到的问题:

1.selenium Grid如何使用?--http://hiadmin.org/2019/08/02/Selenium-Grid/

                                                                  Selenium Grid分布式测试

selenium Grid的前世今生

       2004年ThoughtWorks公司的一个测试工程师“Jason Huggins”为了减少工作量、自己实现了基于JavaScript代码库;用这套代码库可以进行页面交互操作、并且可以重复在不同的浏览器上进行操作;selenium1.0就诞生了。

       在selenium1.0中包括selenium IDE、selenium Grid、selenium RC三部分;

       2006年一个来自Google的工程师‘Simon Stewart’做了一个叫做‘Webdriver’的项目,这个项目可以直接让测试工具调用浏览器本身提供的内置方法,以此来操作浏览器。

       2008年‘selenium1’和‘Webdriver’2个项目进行了合并;就出现了我们大部分人见到的‘selenium Webdriver’(简称WebDriver)

       selenium2=selenium+webdriver

       而我们今天要介绍的Selenium Grid和Selenium RC合并到了一起,成了全新的Selenium Grid

       现在Selenium Grid已经来到了3.14版本;而最新的Selenium4版本也即将和我们见面(如果作者不延期的话)

selenium Grid能做什么

      selenium Grid允许你在多台机器的多个浏览器上并行的进行测试,也就是说,你可以同时运行多个测试。本质上来说就是,Selenium Grid支持分布式的测试执行。它可以让你的测试在一个分布式的执行环境中运行。

      换言之,使用Selenium Grid可以让我们在分布测试环境下执行测试,例如Windows,Linux,Mac OS,Android/ios等等,这样可以大大减少重复的工作量,提高我们的工作效率。

什么时候需要用到Selenium Grid

      通常需要做多个浏览器的兼容性测试,即在不同浏览器或不同操作系统的浏览器中进行测试。

      测试用例较多时,也可以通过分布式测试减少测试用例执行时间。

Selenium Grid架构

      一个Grid框架包含hub节点和若干个node节点。hub节点是管理所有node节点的注册和状态等信息,是一个中心控制节点。也就是说hub节点一接收到用户的调用请求,就会把这个请求再转给node这类工作节点,node节点便会在相应的环境及浏览器中执行由hub下发的测试用例。原则上说,node越多的话,该测试环境自动化执行效率就会越高。

准备工作

准备测试机器

       由于selenium有hub和Node模式,所以我们至少需要两台电脑

名称IP地址
Hub机192.168.0.103
Node机192.168.0.106

安装Python

下载Selenium Grid最新版本

      从seleniumHq官网下载最新版本的selenium-server。--下载地址http://selenium-release.storage.googleapis.com/index.html

配置Java运行环境

配置浏览器驱动

      请根据你的浏览器版本、下载好对应的驱动程序

      用Chrome浏览器就去下载chromedriver.exe--https://npm.taobao.org/mirrors/chromedriver/

      用firefox浏览器就去下载geckodriver.exe--https://npm.taobao.org/mirrors/geckodriver/

      把浏览器驱动添加到环境变量里面

部署selenium Grid的Hub节点

      在192.168.0.103这台hub机器上运行命令:java -jar selenium-server-standalone-3.14.0.jar -role hub

      hub节点常用参数

  1.            1) -role hub 即用hub模式启动
  2.            2)-port Hub启动的端口;node节点连接的端口
  3.            3)-Hubhost 如果有多个ip的话,可以指定绑定IP地址

      其默认端口是4444,默认IP是localhost,如果要修改,只需要加-port和-Hubhost


      hub启动成功后,在浏览器上访问http://192.168.0.103:4444/grid/console,可以看到hub的状态信息,说明启动成功

部署selenium Grid的Node节点

      在192.168.0.105这台Node节点机器上执行命令:java -jar selenium-server-standalone-3.14.0.jar -role node -hub http://192.168.0.103:4444/grid/register -port 6666

      Node节点常用参数

  •            1)-role node 设置为node模式启动
  •            2)-hub 指定Hub注册服务器;
  •            3)-port 指定本地node节点的所用端口号
  •            4)-hubConfig 指定配置文件;可以把所有配置参数放到配置文件里面
  •            5)-browser 可以指定浏览器

      默认情况下,Node节点允许并发使用11个浏览器:5个Firefox,5个Chrome,1个Internet Explorer。默认情况下,并发测试的最大数量为5。要更改此设置和其他浏览器设置,可以将参数传入每个-browser开关(每个开关节点表示基于参数的节点)。如果使用-browser参数,默认浏览器将被忽略。

      Node节点启动成功后,在命令行窗口可以看到注册成功的信息。

      切换到Hub-Console刷新信息,可以看到Node节点已上线。

编写测试脚本,在Node上执行

再写一个多Node节点的用例


2.执行后node节点没有反应--猜测原因是node节点没有配置浏览器环境变量

2.1谷歌浏览器环境配置--https://www.jb51.net/article/162900.htm

1)下载chromedriver

2)将你下载完成的chromedriver.exe文件解压到C:\Program Files (x86)\Google\Chrome\Application这种路径下

3)右击我的电脑-->属性-->高级系统设置-->环境变量-->双击path-->将刚刚配置C:\Users\AppData\Local\Google\Chrome\Application这种路径复制粘贴进去就行了

2.2火狐浏览器环境配置--https://blog.csdn.net/qq_34908107/article/details/80533338

1)下载火狐浏览器

2)firefox路径添加环境变量

3)下载geckodriver

4)在firefox中下载Selenium IDE

5)验证:在命令窗口输入firefox.exe看能否正常跳转到网页


3.下段代码执行没反应---if __name__== "__main__":和unittest.main()应该退一个tab符。

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
import unittest
import HTMLTestRunner

class SeleniumGridBaiduTest(unittest.TestCase):
    def setUp(self): 
        self.driver=webdriver.Remote(
            command_executor='http://192.168.0.103:4444/wd/hub',
            desired_capabilities=DesiredCapabilities.CHROME)

    def test_baidu(self):
        driver=self.driver
        driver.get("https://www.baidu.com")
        driver.find_element_by_id("kw").send_keys("selenium Grid")
        driver.find_element_by_id("su").click()
        time.sleep(3)

    def tearDown(self):
        self.driver.quit()

    if __name__ == "__main__":
        unittest.main()


四、收获:

1.了解Selenium Grid的用法,会编写测试用例通过hub节点控制node节点的浏览器,一台机器可以有多个node节点(端口号不一样)

2.了解谷歌浏览器和火狐浏览器如何进行环境配置


返回列表 返回列表
评论

    分享到