美文网首页vagrant
使用Ansible与Vagrant构建一键式Appium自动化测

使用Ansible与Vagrant构建一键式Appium自动化测

作者: shane51 | 来源:发表于2016-09-09 10:40 被阅读313次

    为什么要有一键式搭建测试脚本开发环境?


    回想读着安装配置文档,一步一步搭建环境的经历,是否是这样的:

    • 粗心大意型: 装了几个小时,突然发现少走了一步,导致安装错误,不得不在出错后,重新搭。
    • 文档过时型: 文档虽然有,可是好久没人维护,不能工作了。
    • 环境差异型: 明明按照文章一步一步走,为啥还是错了? 经过了各种Google,Stackoverflow,才发现,由于自己机器了曾经装了XXX,与现有的程序不兼容。。。

    怎么破?

    有人参与的过程,就可能有错误,人会受到外界的影响,如身体状态,情绪等,但是机器不会啊,如果能自动安装,既避免了人为错误,当脚本可读性很高时,还可以当活文档。此时,不得不提到自动化运维工具,puppet, Chef, AnsibleSalt。通过使用它们,我们可以通过简单的内置脚本命令,方便的自动化安装环境。

    puppet和Chef出现的比较早,非常成熟,且功能强大;Ansible和Salt作为新秀,以简单,直观迅速崛起,而且这两种脚本的可读性都很高。

    基于本文的需求,我决定在Ansible和Salt选择一个。在简单的实验后,发现Salt文档较少,出了问题后,Google不是很方便,因此最终选定了ansible(但是个人非常喜欢Salt的脚本风格)。

    此时,粗心大意和文档过时的问题有了方案,那环境差异呢?

    如果每个都有完全一致的环境,就可以避免写文档的人与搭建环境的人都是做了同样的操作,却得到不同的结果。

    虚拟机就是其中一个解决方案。Vagrant提供了便利的创建VM的途径。而且Vagrant提供了系统镜像市场(vagrant中镜像被称为box),仅仅只要两条命令就可以创建一个虚拟机(包括Linux,Windows, Mac OSX).

    # 创建一个Linux虚拟机, box为ubuntu/trusty64
    $ vagrant init ubuntu/trusty64
    $ vagrant up
    
    

    Vagrant同时支持shell,puppet,Chef, Ansible和Salt的provision,当虚拟机启动时 自动运行上述工具的脚本,实现软件安装,服务启动,配置等等功能,从而实现一键式构建环境的目的。

    如何实现


    1. 安装Vagrant和Ansible

    Vagrant是安装包安装,下载地址

    由于Vagrant仅仅作为虚拟机管理工具,我们还需要虚拟机工具,我们采用免费的vitualbox,下载地址

    Ansible通过官方教程安装教程安装

    2. 创建Vagrantfile

    vagrant通过配置文件Vagrantfile创建虚拟机,每个为vagrant创建的项目仅有一个Vagrantfile。它定义了虚拟机的类型,配置(如内存,网络等),以及使用哪种工具对虚拟机进行自动化安装配置。

    Vagrantfile可以通过vagrant init命令创建。
    下面我们将一步一步教大家创建环境,完整的程序在我的github里,源码在这

    首先,我们为项目创建一个文件夹,并基于ubuntu/trusty64box创建虚拟机。

    $ mkdir vagrant-ansible
    $ cd vagrant-ansible
    $ vagrant init ubuntu/trusty64
    

    其次,Vagrantfile生成后,通过编辑器打开它。(我使用的编辑器为atom
    修改两个部分:配置内存为1024以及provision为ansible方法。

    修改内存如下,幸运的是Vagrantfile中已经帮我们提供内存修改的方法,当被注释了,我们要做的就是取消注释既可:

      # Example for VirtualBox:
      #
      config.vm.provider "virtualbox" do |vb|
        # Display the VirtualBox GUI when booting the machine
        # vb.gui = true
    
        # Customize the amount of memory on the VM:
        vb.memory = "1024"
      end
      #
    

    修改provision为ansible如下,Vagrantfile中提供了shell方式,我们参考它创建ansible即可:

      # Enable provisioning with a shell script. Additional provisioners such as
      # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
      # documentation for more information about their specific syntax and use.
      # config.vm.provision "shell", inline: <<-SHELL
      #   sudo apt-get update
      #   sudo apt-get install -y apache2
      # SHELL
      config.vm.provision :ansible do |ansible|
        ansible.playbook = "playbook.yml"
      end
    

    ansible同样也是采用基于配置文件来运行自动化安装脚本,该配置文件默认名为playbook.yml,格式为YAML格式。

    3. 创建ansible playbook

    ansible playbook的具体语法,见ansible中文网站

    在创建Vagrantfile的路径下创建playbook.yml

    $ touch playbook.yml
    

    打开playbook,添加如下内容:

    • 指定运行ansible脚本的机器(hosts)与何种用户权限执行

      对于vagrant,我们制定hosts为all,为了方便,运行权限为sudo。

    ---
    - hosts: all
      become: yes
    
    • 指定运行哪些任务

      任务以tasks开头。

    ---
    - hosts: all
      become: yes
      tasks:
        - user: name=vagrant group=vagrant
        - name: Add source for nodejs
          shell: 'curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -'
    

    具体见我github上的源码

    任务主要包含几个部分:

    1. 指定在哪个用户下执行task。
    2. 添加nodejs的安装源
    3. 添加oracle-java-8的安装源
    4. 设置自动确认java安装的license。
    5. 为Appium安装依赖(nodejs, java8 等等)
    6. 安装Appium
    7. 下载安装android sdk 23 及 platform工具
    8. 设置环境变量

    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,参考

    5. npm 安装appium 失败,返回码为1

    appium 1.5.3 使用npm install -g appium安装时,如果通过ansible, Salt,甚至时shell脚本来调用安装,则会返回安装错误,具体问题见appium的issue。
     
    解决: 与appium团队成员沟通后,给出了一个临时方案,可以将安装命令true相与。即

    npm install -g appium || true
    

    参考文献

    Setting up Vagrantified Android Appium environment provisioned with Ansible

    最后: 文章以后将同步在微信公众号中,欢迎大家关注~~

    Paste_Image.png

    相关文章

      网友评论

        本文标题:使用Ansible与Vagrant构建一键式Appium自动化测

        本文链接:https://www.haomeiwen.com/subject/cuyeettx.html