• .NET自动化测试工具:Selenium Grid


      在生产环境,QA会同时跑几十个上百个的test case。如果用单机串行的话,是一件非常耗时的事情,估计比手点快不了多少。使用并行方案的话,有两种方法,一个是自己写并行框架,一个是用现成的Selenium Grid。

    自己写并行框架,好处是一切尽在掌控,有问题可以快速定位,针对业务的定制化程度高,用户用起来方便。目前想到的问题是,如果在单机多账户登录同一系统的情况下,会不会串cookie?不过我发现,可能是浏览器厂商把不同的Driver实例给隔离了,这样就省很多事。实现思路大体是:各Client(测试脚本的解析器)向MQ队列发送TestCase消息,多个执行器监听同一队列消费消息,执行测试用例,再返回结果。

    由于自己偷懒,这里先用现成的Selenium Grid来做并行。SeleniumGrid是一个集群,有一个中心节点,称为hub;多个执行节点,称为node。其中,Hub的职责是管理各Node节点(如节点信息、是否Alive)、与Client建立连接、向各Node发送执行命令。 Client与Hub的分界点在Driver这儿。即Selenium脚本还是在Client上跑,但是控制的Driver是在Grid里面。(这其实跟自己写并行框架的边界划分已经不同了)。下面就入个门,介绍一下安装、运行、Helloworld(哦,应该是Hello baidu...)

    1. 下载:

      1.Selenium Standalone Server: http://www.seleniumhq.org/download/

      

      2.各种Driver。在www.seleniumhq.org/download也能找到入口。

      

      ChromeDriver可以直接访问:https://sites.google.com/a/chromium.org/chromedriver/

    2. 安装:

      1. 找两台机器,虚拟机也可以。我这里用的是A:10.189.1.206,B:10.189.1.201。A作为Hub,B作为Node

      2. 安装Hub:把下载的selenium-server-standalone-3.5.2.jar 放在在A机器上,运行命令:

    java -jar selenium-server-standalone-3.5.2.jar -role hub
    

      

      3. 安装Node:同样,把下载的selenium-server-standalone-3.5.2.jar 放在在B机器上,运行命令:

      java -jar selenium-server-standalone-3.5.2.jar -role node -port 6666 -hub http://10.189.1.206:4444/grid/register
    

      这里必须要指定Hub的地址,端口号(port)可以设定,也可以不管。执行完后,Hub的界面如下,表示Hub已经接受了Node的注册:

      

      可以访问整个Grid的控制台:http://10.189.1.206:4444/grid/console/

      

      4. 在Hub和Node上安装ChromeDriver:

        把下载的chromedriver.exe复制到A机器上,比如放在C:SeleniumPlugins目录下。在环境变量的Path中,添加该目录地址:C:SeleniumPlugins。

        在B机器上,执行同样的操作。

        

    3. C#代码: 

      1. 创建控制台项目,添加Selenium引用。

      

      2. 代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using OpenQA.Selenium;
    using OpenQA.Selenium.Remote;
    using OpenQA.Selenium.Chrome;
    
    namespace RunTestOnRemoteGrid
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                IWebDriver driver=new ChromeDriver();
                try
                {
                    driver = new RemoteWebDriver(new Uri("http://10.189.1.206:4444/wd/hub"), new ChromeOptions());
                    driver.Navigate().GoToUrl("http://www.baidu.com");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());   
                }
                finally
                {
                    driver.Quit();
                }
            }
        }
    }
    

      3. 运行:就可以看到Client端在执行,没啥动作,而B机器上,打开了Chrome浏览器,访问Baidu

  • 相关阅读:
    [Python]爬虫v0.1
    [Python]同是新手的我,分享一些经验
    [python]闭包到底是什么鬼?
    测试Flask应用_学习笔记
    Flask模板_学习笔记
    SQL Server Alwayson概念总结
    JDBC数据库编程:ResultSet接口
    JDBC操作,执行数据库更新操作
    接口怎么实例化?
    java数据库编程:JDBC操作及数据库
  • 原文地址:https://www.cnblogs.com/cc299/p/7449630.html
Copyright © 2020-2023  润新知