由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

每日打包之自动化安装(打通app自动化测试)

自动化 西门飞冰 5916℃
[隐藏]

1.前言

我们前段时间实现了安卓和ios的自动打包,可以每天把最新的代码制作成安装包,放到下载目录,让产品,测试等人员进行下载,以便每日验证产品开发进度以及及时反馈开发功能的方向是否正确。

但是这样新的问题出现了,实现每日打包之后,那就意味着测试、产品等人员每天都需要删除旧的软件包,重新安装新的软件包,整个过程还是比较烦得,那么能不能实现每天自动化安装打出来的包到手机上呢?答案是当然可以的,而且这周我已经研究出来了。

2.实现介绍

由于我自己的手机是安卓系统,所以这里只介绍安卓,如果想了解IOS是如何实现的,请给我提供个苹果手机。没办法苹果设备太贵了,前段时间刚研究除了黑苹果技术,安装了mac os系统,但是不知道朕的小米能不能刷成苹果,如果有朋友知道如何实现,请联系我,谢谢。好了废话不多说,我们看安卓如何实现自动安装apk应用包。

实现思路:一般做运维的同学,jdk肯定都知道,而且里面的一些小工具大家都玩过,但是adk很多人就不知道了,那么什么是adk?adk就是安卓开发工具包,里面提供了一个adb的命令可以进行手机软件的安装卸载。既然可以通过命令进行安装卸载手机软件,那么我们是不是就可以写成一个脚本,自动把最新的apk安装包下载到本地,然后调用命令进行安装。答案是必须的,我们的实现环境是windows(主要是给测试、产品使用),所以我这里使用python写了一个apk的自动下载安装脚本,给大家参考。

3.环境搭建

环境介绍:

电脑:Windows 7 旗舰版 64位

手机:小米5

3.1.电脑环境搭建:

(1)安装jdk。jdk下载地址

(2)安装adk。adk下载地址

(3)配置好jdk和adk的path环境变量

(4)环境配置好之后,打开cmd页面,验证jdk和adk环境配置,如果能够正常输入版本信息,说明电脑环境ok。

image001

3.2.手机环境配置

(1)打开手机的开发者选项和usb调试模式

image002

(2)使用USB将手机和电脑连接,打开cmd终端,输入adb devices可以看到已经有一个设备连接上了。

注意:电脑调试手机的时候,手机会提示是否允许这台电脑调试,选择信任即可,不然电脑没法控制手机。

image003

4.我的安装包获取方式

注意事项:自动打包的apk文件不能包含中文,不然使用命令安装会报错。

(1)每日打包在凌晨2点进行,打完包之后放到nginx服务器提供下载,不同目录代表不同的环境,分别开发(dev),alpha(测试),beta(预生产),生产(pro)。

image004

(2)nginx服务器每日打包目录结构如下

[root@node1 html]# tree /data/www/Android/everyday_pack/
/data/www/Android/everyday_pack/
├── alpha
│   ├── hehe-release-2016-12-10.apk
│   ├── hehe-release-2016-12-6.apk
│   ├── hehe-release-2016-12-7.apk
│   ├── hehe-release-2016-12-8.apk
│   └── hehe-release-2016-12-9.apk
├── beta
│   ├── hehe-release-2016-12-10.apk
│   ├── hehe-release-2016-12-6.apk
│   ├── hehe-release-2016-12-7.apk
│   ├── hehe-release-2016-12-8.apk
│   └── hehe-release-2016-12-9.apk
├── dev
│   ├── hehe-release-2016-12-10.apk
│   ├── hehe-release-2016-12-6.apk
│   ├── hehe-release-2016-12-7.apk
│   ├── hehe-release-2016-12-8.apk
│   └── hehe-release-2016-12-9.apk
└── pro
    ├── hehe-release-2016-12-10.apk
    ├── hehe-release-2016-12-6.apk
    ├── hehe-release-2016-12-7.apk
    ├── hehe-release-2016-12-8.apk
    └── hehe-release-2016-12-9.apk

5.手动安装apk应用

在使用python进行自动化安装之前,我们应该使用知道如何使用命令行进行apk应用的安装和卸载。

(1)下载apk安装包到电脑的指定目录下

(2)使用adb install命令进行安装

image005

这里再说两个参数:

-s:指定设备进行安装,如果电脑同时连接了多个手机就非常有用了

-r:如果之前安装过则覆盖安装

比如我电脑同时连接了两个手机,一个想安装测试环境的最新包,一个想安装生产环境的最新包,可以通过-s指定设备进行安装,方法如下

image006

如果我之前安装过这个应用,再次安装会提示应用已经存在不允许安装,我们就可以直接使用-r选项进行覆盖安装

image007

(3)使用adb uninstall命令进行卸载

语法:adb uninstall [-k] <package>

-k:卸载不删除数据和缓存文件

注意:使用adb卸载apk应用的package参数,是应用的包名。包名获取有两种方式。

(1)询问公司app开发人员。

(2)使用app测试工具获取:比如我要获取微信的包名,我是用GT(一款app性能测试工具)打开需要卸载的应用,就可以看到包名,如下图。

image008

6.Python 自动安装apk应用

在windows安装python的运行环境,并设置环境变量,就可以使用下面的脚本进行安装了。

#!/usr/bin/pyenv python
import urllib.request
import os
import time
def download_apk(env="alpha"):
    ctime = time.strftime("%Y-%m-%d")
    apk_name = "hehe-release-%s.apk" % (ctime)
    global apk_name

    url = "http://192.168.100.10/Android/everyday_pack/{0}/{1}".format(env,apk_name)
    response = urllib.request.urlopen(url)
    apk = response.read()

    with open(apk_name,'wb') as f:
        f.write(apk)


def install_apk():
    install_command = "adb install -r %s" % (apk_name)
    os.system(install_command)

download_apk()
install_apk()

脚本执行效果如下:

image009

那我们就可以通过这个脚本来自动安装apk程序包了。比如我们每日打包是凌晨2点执行,那么我们就可以在windows上面配置定时任务3点执行apk程序的安装。也可以每天来运行一下脚本进行安装。

转载请注明:西门飞冰的博客-专注于Linux运维 » 每日打包之自动化安装(打通app自动化测试)

喜欢 (0)or分享 (0)