大家周五好,周五总是个开心的日子,新文章来了。今天图表君给大家邀请了他的好基友Shane同学,给大家带来一篇新文章。Shane51同学是ThoughtWorks高级咨询师,专注于软件测试领域,曾在国内多个大会上做过专题演讲。今后图表君和他的小伙伴们来一起分享更多的文章。欢迎大家订阅公众号,一起分享代码人生。
为什么要有一键式搭建测试脚本开发环境?
回想读着安装配置文档,一步一步搭建环境的经历,是否是这样的:
粗心大意型: 装了几个小时,突然发现少走了一步,导致安装错误,不得不在出错后,重新搭。
文档过时型: 文档虽然有,可是好久没人维护,不能工作了。
环境差异型: 明明按照文章一步一步走,为啥还是错了? 经过了各种Google,Stackoverflow,才发现,由于自己机器了曾经装了XXX,与现有的程序不兼容。。。
怎么破?
有人参与的过程,就可能有错误,人会受到外界的影响,如身体状态,情绪等,但是机器不会啊,如果能自动安装,既避免了人为错误,当脚本可读性很高时,还可以当活文档。此时,不得不提到自动化运维工具,puppet, Chef, Ansible 和 Salt。通过使用它们,我们可以通过简单的内置脚本命令,方便的自动化安装环境。
puppet和Chef出现的比较早,非常成熟,且功能强大;Ansible和Salt作为新秀,以简单,直观迅速崛起,而且这两种脚本的可读性都很高。
基于本文的需求,我决定在Ansible和Salt选择一个。在简单的实验后,发现Salt文档较少,出了问题后,Google不是很方便,因此最终选定了ansible(但是个人非常喜欢Salt的脚本风格)。
此时,粗心大意和文档过时的问题有了方案,那环境差异呢?
如果每个都有完全一致的环境,就可以避免写文档的人与搭建环境的人都是做了同样的操作,却得到不同的结果。
虚拟机就是其中一个解决方案。Vagrant提供了便利的创建VM的途径。而且Vagrant提供了系统镜像市场(vagrant中镜像被称为box),仅仅只要两条命令就可以创建一个虚拟机(包括Linux,Windows, Mac OSX).
Vagrant同时支持shell,puppet,Chef, Ansible和Salt的provision,当虚拟机启动时 自动运行上述工具的脚本,实现软件安装,服务启动,配置等等功能,从而实现一键式构建环境的目的。
如何实现
安装Vagrant和Ansible
Vagrant是安装包安装,下载地址。
由于Vagrant仅仅作为虚拟机管理工具,我们还需要虚拟机工具,我们采用免费的vitualbox,下载地址。
Ansible通过官方教程安装教程安装
2. 创建Vagrantfile
vagrant通过配置文件Vagrantfile创建虚拟机,每个为vagrant创建的项目仅有一个Vagrantfile。它定义了虚拟机的类型,配置(如内存,网络等),以及使用哪种工具对虚拟机进行自动化安装配置。
Vagrantfile可以通过vagrant init命令创建。下面我们将一步一步教大家创建环境,完整的程序在我的github里,源码在这
首先,我们为项目创建一个文件夹,并基于ubuntu/trusty64box创建虚拟机。
其次,Vagrantfile生成后,通过编辑器打开它。(我使用的编辑器为atom)修改两个部分:配置内存为1024以及provision为ansible方法。
修改内存如下,幸运的是Vagrantfile中已经帮我们提供内存修改的方法,当被注释了,我们要做的就是取消注释既可:
修改provision为ansible如下,Vagrantfile中提供了shell方式,我们参考它创建ansible即可:
ansible同样也是采用基于配置文件来运行自动化安装脚本,该配置文件默认名为playbook.yml,格式为YAML格式。
3. 创建ansible playbook
ansible playbook的具体语法,见ansible中文网站
在创建Vagrantfile的路径下创建playbook.yml
打开playbook,添加如下内容:
指定运行ansible脚本的机器(hosts)与何种用户权限执行
对于vagrant,我们制定hosts为all,为了方便,运行权限为sudo。
指定运行哪些任务
任务以
tasks开头。
具体见我github上的源码
任务主要包含几个部分:
指定在哪个用户下执行task。
添加nodejs的安装源
添加oracle-java-8的安装源
设置自动确认java安装的license。
为Appium安装依赖(nodejs, java8 等等)
安装Appium
下载安装android sdk 23 及 platform工具
设置环境变量
4. 启动虚拟机与自动化环境安装
一条命令可以搞定:
$ vagrant up然后等待虚拟机下载box,并自动执行ansible的provision即可。
成功后,通过
$ vagrant ssh登陆虚拟机,启动appium。
$ appium遇到的问题
1. nodejs版本问题
ubuntu/trusty64系统的apt-get install的nodejs版本太老,无法支持appium 1.5.3版本。
解决:利用二进制版本安装,安装教程
2. oracle java 8安装
ubuntu/trusty64系统的apt-get install所安装的java为openjdk。
解决:添加oracle java 8的安装源。
oracle java安装时需要确认license。 可以通过命令行自动确认
3. appium 安装被中断
在安装appium过程中,系统kill了安装进程。搜索了一圈后发现,原来是系统内存不足导致。
解决:增加虚拟机内存为1024MB
4. android sdk 命令行安装platform-tool:
解决: 更改android安装目录权限为vagrant用户,并通过--no-ui --filter 安装platform-tools,参考
请点击阅读原文,访问原文链接,参考实例代码。