前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结。

1.记录下学习中遇到的坑,当做学习笔记。
2.有前人路过看到文章中比较落后的做法,请务必一定要指教。(因为是初学者视角,很多东西只是走通而已,不足的地方多的去了,无论谁的指教都会让我受益匪浅)
3.因为我就是一个初学者,所以我打算详细的记录操作步骤,争取和我一样的初学者看着这篇文章就可以成功搭建测试环境。

项目背景:
我负责的自动化web测试框架已经搭建完成了。框架主要主要使用了:
语言:python
测试框架:pytest
web自动化:selenium
报告框架:allure
CI集成:jenkins

引入docker的目的:
优化自动化测试框架。当case在单个浏览器上走通了以后,就开始考虑是否需要考虑下兼容性,反正都是机器跑,跑一个浏览器是跑,跑二个也是跑。刚开始的时候打算用Selenium Standalone Server解决这个问题,但是在社区里看到了docker文章。立刻被吸引到了,通过docker 启动容器创建一个干净的测试环境,把外界因素对自动化测试的干扰降至最低。自动化测试稳定才是王道。

目标:
1.成功搭建docker结合selenium构建分布式测试环境。
2.编写脚本执行web的自动化测试分布式测试。

1.安装docker

以前docker必须安装太linux系统上的,不过最近docker发布了windows的版本,至少让我这种没有linux操作环境的人也能使用docker。
去docker官网下载dockerToolbox.exe,然后直接安装即可。这个完全没有难度。
然后在启动或者找快捷方式 Docker Quickstart Terminal ,打开docker的terminal。
第一次启动可能花费很长时间,耐心等待即可。看到下图就说明我们可以开始使用docker了。

 

2.获取docker镜像

按照我对docker理解,初学者就直接认为docker是一种轻量级的虚拟机,然后在虚拟机里搭建各种环境,在需要的时候,直接启动即可。docker的根本就是镜像,任何操作的来源都是从镜像开始的,找到合适我们自己项目的镜像就可以了。
我们可以去docker的公共仓库找一些已经做好的镜像。
输入命令
docker search selenium
我们可以在公共仓库里找到关于selenium的镜像。
既然是分布式测试,那么我们就需要hub,node。合适我们的镜像就被我们找到了。
hub:selenium/hub
node:selenium/node-firefox , selenium/node-chrome
node有两种,一个是firefox,一个chrome。看来这两种浏览器是现在的主流,当然如果我们在将来的工作需要在docker上进阶,我们自己也可以构建ie之类的镜像,那就是后话了。
输入命令
docker pull selenium/hub
docker pull selenium/node-firefox
docker pull selenium/node-chrome
如果下载镜像不成功,就多试几次,再不行就翻墙再下载。
全部下载完成以后
输入命令
docker images
查看镜像列表

 

如上图显示的话,基本上就成功了。

3.运行docker镜像

我们已经下载好了docker的镜像,接下来就是运行镜像,在docker的世界里叫做启动容器,通俗点就是启动了虚拟机。

3.1启动selenium-hub

输入命令
docker run -p 5555:4444 -d --name hub selenium/hub
输入命令
docker ps
可以看到以下内容

 

我来解释下基本命令
run 是让我们运行一个镜像,创建出一个容器。
运行的镜像名字叫做selenium/hub
-p 5555:4444 这个是把容器里的端口映射出来,让别人可以访问。
-d 在后台运行
--name 给这个容器起一个容易明白的名字,这里我就直接把这个容器成为hub。

3.2启动selenium-node

输入命令
docker run -P -d --link hub:hub --name firefox selenimu/node-firefox
docker run -P -d --link hub:hub --name chrome selenimu/node-chrome
--link 是链接别名为hub的容器

输入命令docker ps

 

然后在本机的浏览器中输入
http://192.168.99.100:5555/grid/console

 

这个页面相信大家都熟悉了。就是用java 去启动selenium-server-standalone-×××.jar,然后注册node到selenium-server上。
然而我们现在用docker+selenium 也做到了这点。

输入命令
docker logs hub

 

我们可以通过logs 查看hub容器内的日志。上图显示在hub上注册了两个node

4.运行测试脚本

# coding=utf-8

from selenium import webdriver
chrome_capabilities ={
"browserName": "chrome",
"version": "",
"platform": "ANY",
"javascriptEnabled": True,
# "marionette": True,
}
browser = webdriver.Remote("http://192.168.99.100:5555/wd/hub", desired_capabilities=chrome_capabilities)
browser.get("http://www.163.com")
browser.get_screenshot_as_file(r"D:/sample/chrome.png")
browser.quit()

这是一个典型的python的selenium脚本调试命令。
其中要注意的的以前在本机调试我们都是
browser = webdriver.Chrome()
但是我们现在node和hub的概念,所以我们在定义webdriver的时候是定义在hub上的。所以我们看到了
webdriver.Remote("http://192.168.99.100:5555/wd/hub", desired_capabilities=chrome_capabilities)

在本机上运行改脚本,没有很大问题应该会在制定的目录生成一张快照,证明我们脚本的确跑起来了。

5.debug模式

我们在运行docker的时候是看不到任何界面的,但是有的时候为了 debug方便,我们需要看容器里到底在干什么。
所以,docker-selenium提供了debug模式。

首先我们要去下载debug专用的镜像
输入命令
docker pull selenium/node-chrome-debug
docker pull selenium/node-firefox-debug
如果如要本地调试的镜像
docker pull selenium/standalone-chrome-debug
docker pull selenium/standalone-firefox-debug

输入命令
docker run -d -p 5900:5900 --link hub:hub selenium/node-chrome-debug
我们在创建了node 容器的同时把接口5900暴露出来了。
那么我们现在就要使用vnc进行连接。
我选择了vnc viewer

 

如图所示,vnc server 输入docker的ip加上容器暴露出来的接口5900
连接,会要求输入密码,默认密码就是secret
进入vnc viewer 就可以看到以下Ubuntu系统的图形界面。会linux的人肯定不会陌生。

 

在运行我们前面的调试脚本,这次就会在vnc viewer中的看到selenium整个操作过程。

以上我们应该就已经把selenium结合docker构建分布式测试环境配置好了,debug模式也配置好了。


需要软件测试资料的小伙伴,可以来加群:747981058。群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

selenium 结合 docker 构建分布式测试环境 (初学者视角)的更多相关文章

  1. selenium结合docker构建分布式测试环境

    selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...

  2. docker+selenium Grid搭建自动化分布式测试环境

    自动化测试需要考虑到兼容性的时候,之前的做法是每个执行机上安装不同版本的浏览器,实际上这样做会很浪费硬件资源,现在有了docker容器化技术,让一切变得简单. 工具清单: 语言:python 2.7 ...

  3. Docker构建Python Web环境

    出于寻找Docker对Python相关项目部署的学习,找到腾讯课堂NEXT公开课中[Docker构建Python Web环境]的课程,本文对其进行内容梳理及知识点汇总. 该课程总计6小时左右,是个适合 ...

  4. selenium===使用docker搭建selenium分布式测试环境

    准备: #请在此之前先了解,selenium grid :参考:selenium-grid ,下载地址,win-本地部署过程 >>>环境准备: Linux操作系统 >>& ...

  5. Selenium Grid分布式测试环境搭建

    Selenium Grid简介 Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成.Hub用来管理各个代理节点的注册信息 ...

  6. 用 Docker 构建 MySQL 主从环境

    开源Linux 一个执着于技术的公众号 前言 本篇文章记录使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境.如果你严格按照文中的步骤进 ...

  7. 【selenium 3】 Mac 下测试环境搭建 Firefox 47+ gecko driver Mac

    错误代码如下:File "/usr/local/lib/python2.7/dist-packages/selenium-3.0.0b2-py2.7.egg/selenium/webdriv ...

  8. Win7系统下,docker构建nginx+php7环境实践

    前面两章介绍的是Windows系统下如何安装和配置docker,主要原因在于,公司大多人数用的是Windows环境,想通过在Windows环境上,通过docker,构建一个公用的配置. 首先要说明的是 ...

  9. JMeter分布式测试环境搭建(禁用SSL)

    JMeter分布式环境,一台Master,一到多台Slave,Master和Slave可以是同一台机器. 前提条件: 所有机器,包括master和slave的机器: 1.运行相同版本的JMeter 2 ...

随机推荐

  1. vector详讲(二)迭代器

    先看一下代码: #include <iostream> #include <vector> int main() { std::vector<double> dou ...

  2. AMQ(approximate membership queries)介绍

    目录 简介 举例 Bloom Filter 算法过程 1)位数组: 2)添加元素,k个独立hash函数 3)判断元素是否存在集合 Quotient Filter and Cascade Filter ...

  3. SwaggerUI用户手册

    SwaggerUI是一个非常好用的API文档工具,最关键的是他还能在工具内调试API,简直爽的不要不要的~网上针对开发者的文档非常多,但是给用户的手册却非常少.所以我来简单写个用户手册,供没有使用过s ...

  4. kafka restful api功能介绍与使用

    前述 采用confluent kafka-rest proxy实现kafka restful service时候(具体参考上一篇笔记),通过http协议数据传输,需要注意的是采用了base64编码(或 ...

  5. Notes 20180312 : String第四讲_String上的操作

    作为一个基本的工具类,同时又是使用频率很高的类,Java为其提供了丰富的方法支持.Java中的String类中包含了50多个方法.最令人惊讶的是绝大多数方法都很有用,下面我们根据功能来分类介绍一下: ...

  6. 解决Windows下编辑脚本上传到Linux后遇到^M的方法

    Windows下编辑脚本上传到Linux后遇到^M,导致脚本无法执行,原因是因为Linux与Windows对 "回车键" 编码不同 解决方法如下: 在使用UE->文件-> ...

  7. hiveSql常见错误记录

    1. In strict mode, if ORDER BY is specified, LIMIT must also be specified. 这个错误提示是因为在hive下写的sql使用了or ...

  8. Python 基础 函数

    python 什么是函数 Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用.   python 函数的调用 Python内置了很多有用的函数,我们可以直接调用. 要调用 ...

  9. linux学习笔记三:防火墙设置

    请注意:centOS7和7之前的版本在防火墙设置上不同,只有正确的设置防火墙才能实现window下访问linux中的web应用. centOS6添加端口: vi /ets/sysconfig/ipta ...

  10. vue+element 页面输入框--回车导致页面刷新的问题

    el-form 后面加上 @submit.native.prevent