在Docker中安装安卓11、12+Appium【web端android】

13,525 阅读4分钟

image.png

Docker-Android是一个docker镜像,建立在与移动网站测试和安卓项目有关的一切。

仿真器--三星设备仿真器--Nexus设备真实设备
image.pngimage.pngimage.png

目标

  1. 使用 appium为移动网站运行UI测试
  2. 用最新的构建工具构建Android项目并运行单元测试
  3. 使用不同的框架为Android应用程序运行UI测试 (appiumespressorobotium, etc.)
  4. 运行猴子/压力测试
  5. 短信测试

与其他docker-android项目相比的优势

  1. 没有VNC,可以看到docker容器内发生的一切
  2. 不同设备/皮肤的仿真器,如三星Galaxy S6、LG Nexus 4、HTC Nexus One等。
  3. 连接到Selenium Grid的能力
  4. 能够通过使用adb connect从外部容器控制仿真器。
  5. 支持真实设备的屏幕镜像
  6. 能够在测试执行过程中录制视频以进行调试
  7. 与其他云解决方案集成,例如 Genymotion Cloud
  8. 开放源代码,更多功能即将推出

Docker图像列表

OSAndroidAPI浏览器浏览器版本Chromedriver图像
Linux6.023browser44.02.18budtmo/docker-android-x86-6.0
Linux7.024chrome51.02.23budtmo/docker-android-x86-7.0
Linux7.1.125chrome55.02.28budtmo/docker-android-x86-7.1.1
Linux8.026chrome58.02.31budtmo/docker-android-x86-8.0
Linux8.127chrome61.02.33budtmo/docker-android-x86-8.1
Linux9.028chrome66.02.40budtmo/docker-android-x86-9.0
Linux10.029chrome74.074.0.3729.6budtmo/docker-android-x86-10.0
Linux11.030chrome83.083.0.4103.39budtmo/docker-android-x86-11.0
Linux12.031chrome93.093.0.4577.15budtmo/docker-android-x86-12.0
All-----budtmo/docker-android-real-device
AllAllAllAllAllAllbudtmo/docker-android-genymotion

List of Devices

TypeDevice Name
PhoneSamsung Galaxy S10
PhoneSamsung Galaxy S9
PhoneSamsung Galaxy S8
PhoneSamsung Galaxy S7 Edge
PhoneSamsung Galaxy S7
PhoneSamsung Galaxy S6
PhoneNexus 4
PhoneNexus 5
PhoneNexus One
PhoneNexus S
TabletNexus 7

要求

Docker已经安装在你的系统中。

快速启动

  1. 你的机器需要支持虚拟化。要检查它。

    sudo apt install cpu-checker
    kvm-ok
    
  2. 运行Docker-Android

    • 对于Linux操作系统,请使用包含 "x86 "的镜像名称。

       docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" --name android-container budtmo/docker-android-x86-8.1
      
    • 对于OSXWindows操作系统,请使用支持Ubuntu操作系统的虚拟化的虚拟机。

  3. 确认docker主机的IP地址。

    • 对于OSX,你可以通过使用以下命令找到。

      docker-machine ip default
      
    • 对于不同的操作系统,localhost应该可以。

  4. 从网络浏览器打开***http://docker-host-ip-address:6080***。注意:添加?view_only=true将给予用户只能查看的权限。

自定义配置

本文包含了你可能需要的Docker-Android的自定义配置,例如代理,在飞行中改变语言,等等。

构建Android项目

Docker-Android可以用来构建Android项目并执行其单元测试。下面的步骤将说明如何构建Android项目。

  1. 克隆这个样本测试项目

    git clone git@github.com:android/testing-samples.git
    
  2. 建立该项目

    docker run -it --rm -v $PWD/testing-samples/ui/espresso/basicSample:/tmp -w /tmp budtmo/docker-android-x86-8.1 /tmp/gradlew build
    
  3. 用这个命令创建一个docker容器

    $ docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -p 4723:4723 --name android-container-appium budtmo/docker-android-real-device
    
  4. 打开noVNC http://localhost:6080

  5. noVNC窗口上点击右键打开终端,>>终端模拟器

  6. 连接到主机的adb(确保你的主机有adb并连接到设备上。)

    $ adb -H host.docker.internal devices
    

    要指定端口,只需添加-P port_number

    $ adb -H host.docker.internal -P 5037 devices
    
  7. 现在你的容器可以访问你的主机设备。但是,你需要添加 "remoteAdbHost "和 "adbPort "所需的能力,以使Appium能够识别这些设备。

Appium和Selenium Grid

如果你想使用Appium和Selenium Grid,你可以按照该文档。它还包含样本和用例。

控制容器外的安卓模拟器

adb connect <docker-machine-ip-address>:5555

**注意:**你需要在主机上安装Android调试桥(adb)。

短信模拟

  1. 使用telnet

    • 找到auth_token并复制它。
    docker exec -it android-container cat /root/.emulator_console_auth_token
    
    • 使用telnet访问模拟器,用auth_token登录
    telnet <docker-machine-ip-address> 5554
    
    • 使用1.步骤中给定的auth_token登录
    auth <auth_token
    
    • 发送短信
    sms send <phone_number> <message>(短信)。
    
  2. 使用adb

    docker exec -it android-container adb emu sms send <phone_number> <message>。
    
  3. 你也可以使用adb库将其集成到项目中。

谷歌游戏服务和谷歌游戏商店

目前没有安装。

Jenkins

这个文件给你提供了关于支持Docker-Android的自定义插件的信息。

VMWARE

这个文档告诉你如何在VMWARE上配置虚拟机,以便能够运行Docker-Android。

这个文档包含关于在云服务上部署Docker-Android的信息。

Genymotion

对于没有资源维护模拟器或购买机器或需要不同设备配置文件的人来说,你需要尝试一下Genymotion Cloud。Docker-Android与Genymotion集成在不同的云服务上,例如Genymotion云、AWS、GCP、阿里巴巴云。请关注本文档本博客以了解更多细节。

故障排除

容器内的所有日志都存储在**/var/log/supervisor文件夹下。你可以通过使用docker exec**打印出日志文件。例子。

docker exec -it android-container tail -f /var/log/supervisor/docker-android.stdout.log

仿真器皮肤

仿真器皮肤取自Android Studio IDE三星开发者网站

监控

你可以使用cadvisor结合influxdb / prometheus和grafana(如果需要的话)来监控每个正在运行的容器。