本文来自网易云社区

前言

一直以来,项目迭代的时间都是比较紧张的,开发加班加点coding,测试加班加点提bug。都说“时间像海绵里的水,挤挤总会有的”(当然这里的“挤挤”就是加班喽,哈哈~) 然而,就算再怎么挤,一天就那么24个小时,除了睡觉吃饭,挤出来的时间完成平常的功能测试已经算不错了,很难抽出时间做一些兼容性测试之类的东东。但是,“混吃等死”显然不是我司员工的一派作风,解决问题才是缓解现状、拯救自我的最佳方式。然而,一提到兼容性,就不可避免地要考虑如何让自动化用例在不同的浏览器中同时跑起来的问题。考虑到docker环境隔离的特点,我决定先来尝试一下如何在Docker下进行web UI自动化~~~

Docker是什么?

Docker是一个开源的应用容器引擎,它可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上。

Docker内部有三个主要的部件,即镜像、容器和仓库:

Docker镜像:用于创建Docker容器的只读模板,是一个独立的文件系统,包括运行容器所需要的数据,可以用来创建容器。

Docker容器:由Docker镜像创建的运行实例,容器中包含应用的代码和所需要的依赖文件,可以运行对应的应用。

Docker仓库:代码控制中的代码仓库,用来保存镜像。

容器是以镜像为模板创建的,以一个镜像为基础可以创建多个容器,容器之间相互隔离,可以同时运行同一个应用,互不影响。

Docker安装

以mac为例,安装docker-toolbox,访问链接https://www.docker.com/products/docker-toolbox,下载mac版本的安装包。下载完毕后, 按照指引点下一步就可以了,安装完成后,会生成三个图标

点第一个图标打开终端,第一次进入时,它会自动帮你创建一个docker machine,然后进入如下界面:

后面再打开终端时,就不会再自动创建machine了,直接进入上述页面。在这个页面可以通过命令进行各种docker相关的操作,比如创建镜像,创建容器,启动容器,停止容器,删除容器,删除镜像等等。可以通过docker --help来查看都有哪些命令。如果想要了解docker的某一个命令的使用方法,如运行容器,可以用docker run --help来查看了解,其他以此类推。这里列几个这次比较常用的命令:

创建镜像: docker build [OPTIONS] PATH | URL | -

查看镜像:docker images

删除镜像: docker rmi [OPTIONS] IMAGE [IMAGE...]

创建运行容器: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

查看所有容器:docker ps -a

停止容器:
docker stop [OPTIONS] CONTAINER [CONTAINER...]

删除容器:
docker rm [OPTIONS] CONTAINER [CONTAINER...]

创建镜像

1)Dockerfile

在创建镜像之前,不得不提一个叫Dockerfile的脚本,该脚本是一种被Docker程序解释的脚本,由一条条指令组成。Dockerfile用来创建一个自定义的镜像,包含用户指定的软件依赖等。Dockerfile示例如下:

其中,

FROM markadams/chromium-xvfb-py2表示以markadams/chromium-xvfb-py2为基础镜像,markadams/chromium-xvfb-py2集成了Chromium和Xvfb,可以满足在Docker容器中通过Selenium进行无界面的操作 。

RUN xxx表示运行一些Linux命令

ADD aaa bbb 表示将aaa目录下的内容拷贝到容器中的bbb目录下

2)requirements.txt

从Dockerfile中可以看到有一个叫requirements.txt的文件,这个文件是用来记录所有依赖包及其精确的版本号的,以便应用能正常部署运行。该文件可以通过“
pip freeze >requirements.txt"命令进行生成,然后通过"
pip install -r requirements.txt
"安装这些依赖包。生成的文件内容大体如下:

但是生成的这些依赖,通常情况下,有很多用不到,创建镜像的时候,又要耗时下载。为了减少创建镜像时间,可以在 requirements.txt中只包含需要的依赖即可,可以通过命令"pip install pipreqs" "
pipreqs  项目路径/项目",该命令只会包含项目imports的包,而不是所有包,这样就减少了不必要包的安装。

Dockerfile中还有一个叫input.sh的脚本文件,后面会说明其作用。

3)创建自己的镜像

介绍了Dockerfile之后,接下来就开始根据Dockerfile和项目工程,创建自己的镜像了。把项目、Dockerfile、requirements.txt以及input.sh放在一个文件夹内,然后在docker命令窗口中,进入Dockerfile所在文件夹,执行命令" ocker build -t nicole_image6 .",执行成功后如下图所示:

这样,我们就创建了一个自己项目的镜像,查看创建的镜像:

这就是我们刚刚创建的镜像。

创建容器

创建了自己的镜像后,就可以在这个镜像上创建自己的容器,来运行我们的项目。执行命令" docker run --name nicole_container6_1 -it nicole_image6 /bin/bash",执行该命令后,创建一个名为nicole_container6的容器,并进入容器内,如下图所示:

由图可知,已经进入创建的容器内,且宿主机的文件夹内容也已经拷贝到容器内。

运行项目

既然项目已经部署在容器内,那接下来就是愉快地执行我们的demo代码啦。进入项目文件夹内,执行"python main.py",等待一会儿,即可执行完毕:

执行完毕后,会生成一个报告。把报告从容器中拷贝出来,查看执行结果。执行命令" docker cp 26aeeb16268b:/usr/src/app/pagepmodemo/report/page_demo_Report.html /Users/nicole_hf",即可将容器中的报告拷贝到宿主机的指定目录下。报告如下:

实践过程中遇到的坑

当我把项目部署到容器内运行的时候,一直提示运行失败。当时以为是环境没部署好,或者是该加载的包没有加载进来,然后一直陷入这个问题中不能自拔,花费了很长时间纠结这个问题。后来把报告拷贝出来一看才发现,每次运行到输入内容时,就走不下去了,原来是不支持执行带有键盘的操作,经过查阅资料发现,只需要在启动容器时执行Xcfb,申请一块Screen,在Dockerfile中加入启动脚本即可。脚本内容如下:

加入脚本后,再部署到容器中运行后,果然不报错了!!

以上是我对docker的一点点小尝试,如有什么不对的地方,欢迎大家批评指正。或者如果有什么意见或者建议,也欢迎提出讨论,撒花~~~

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者黄芬授权发布。

基于Docker的UI自动化初探的更多相关文章

  1. 基于Docker+Jenkins实现自动化部署

    使用码云搭建Git代码存储仓库 https://gitee.com/login 使用码云创建私有私有git仓库 将本地springboot项目上传到git仓库中 基于Docker安装Jenkins环境 ...

  2. 《软件测试自动化之道》读书笔记 之 基于反射的UI测试

    <软件测试自动化之道>读书笔记 之 基于反射的UI测试 2014-09-24 测试自动化程序的任务待测程序测试程序  启动待测程序  设置窗体的属性  获取窗体的属性  设置控件的属性  ...

  3. 《软件测试自动化之道》读书笔记 之 基于Windows的UI测试

    <软件测试自动化之道>读书笔记 之 基于Windows的UI测试 2014-09-25 测试自动化程序的任务待测程序测试程序  启动待测程序  获得待测程序主窗体的句柄  获得有名字控件的 ...

  4. 软件测试自动化之- 基于反射的UI自动化测试框架 - UI Automation Test Framework

    测试自动化程序的任务 基于反射的ui测试自动化程序,要完成的6项任务: 通过某种方式从测试套件程序中运行待测程序(AUT: Applicaton Under Test),以便于两个程序之间进行通信 操 ...

  5. 开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑

    在使用了pytest完成了一个系统的UI自动化后,因为系统的前端框架,是 基于VUE写的,这就让我编写脚本的时候踩了些坑. 无法用JS 修改标签属性,从而进行的操作 比如上传图片,我们的上传是这样子的 ...

  6. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  7. ATOMac - 基于Python的Mac应用Ui自动化库

    ATOMacTest 一.缘 起 近期工作需要对一款Mac端应用实现常用功能的自动化操作,同事推荐ATOMac这款工具,这几天简单研究了下,同时也发现现网介绍ATOMac的资料非常有限,故在此记录下A ...

  8. 基于Docker UI 配置ceph集群

    前言 前一篇介绍了docker在命令行下面进行的ceph部署,本篇用docker的UI进行ceph的部署,目前来说市面上还没有一款能够比较简单就能直接在OS上面去部署Ceph的管理平台,这是因为OS的 ...

  9. 基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍

    1. 启动浏览器 前边有详细介绍启动三种浏览器的方式(IE.Chrome.Firefox): private WebDriver driver = null; private String chrom ...

随机推荐

  1. CAShapeLayer使用

    UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubv ...

  2. Linux学习总结(十)-文件复制及查看, 环境变量

    一 文件复制及移动 1.命令 cp --------copy 的意思格式 cp 选项 源文件 目标文件a: 对于文件我们直接cp 文件 目标文件假定我们在普通用户家目录下/home/lv新建两个普通文 ...

  3. CSS:层叠样式表—position

    CSS position属性用于指定一个元素在文档中的定位方式.top,right,bottom和left属性则决定了该元素的最终位置. 常见语法 static | relative | absolu ...

  4. Reading Notes : 180211 概述计算机

    读书<计算机组成原理> <鸟哥的Linux私房菜 基础篇> 本章介绍电子计算机概念以及发展历史和发展趋势,内容摘自<计算机组成原理>  <鸟哥的Linux私房 ...

  5. Crash for small compressed texture on some Android device

    I created a full white texture with 4x4 size. Unity requires that compressed texture size should be ...

  6. Python的多进程

    这里不说其它,Python的多进程网上已经有很多了,可以尽情搜索.但是用多进程一般是采用对任务的方式,所以注意文件锁定.一般采用Pool是比较合适的.给个网友的小代码 from multiproces ...

  7. #leetcode刷题之路10-正则表达式匹配

    匹配应该覆盖整个字符串 (s) ,而不是部分字符串.说明:s 可能为空,且只包含从 a-z 的小写字母.p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *. 示例 1:输入:s = & ...

  8. tornado用户指引(三)------tornado协程使用和原理(二)

    Python3.5  async和await async和await是python3.5引入的2个新的关键字(用这两个关键字编写的函数也称之为"原生协程"). 从tornado4. ...

  9. openstack之kvm常用操作

    KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理. 1.   查看KVM虚拟机配置文件及运行状态 KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/ autostart目录 ...

  10. Java软件开发者,如何学习大数据?

    正常来讲学习大数据之前都要做到以下几点 1.学习基础的编程语言(java,python) 2.掌握入门编程基础(linux操作,数据库操作.git操作) 3.学习大数据里面的各种框架(hadoop.h ...