Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Python自动化,大概也许或者是今年最具热度的话题之一了。七月流火,招聘市场上对于Python自动化的追捧热度仍未消减,那么Python自动化到底能帮我们做些什么呢?第一,Python自动化可以避免熟练工种的重复工作,对于功能相对完整和成熟的软件,每发布一个新的版本,无论是大版本还是小版本,其中大部分功能和界面都几乎和上一个版本相似或完全相同,但所谓向上兼容,你不能因为新功能的产生而不对老版本功能进行测试工作,而这些老功能又在上一个版本上线时测过,所以这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。

Python自动化,大概也许或者是今年最具热度的话题之一了。七月流火,招聘市场上对于Python自动化的追捧热度仍未消减,那么Python自动化到底能帮我们做些什么呢?

第一,Python自动化可以避免熟练工种的重复工作,对于功能相对完整和成熟的软件,每发布一个新的版本,无论是大版本还是小版本,其中大部分功能和界面都几乎和上一个版本相似或完全相同,但所谓向上兼容,你不能因为新功能的产生而不对老版本功能进行测试工作,而这些老功能又在上一个版本上线时测过,所以这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。

第二,Python自动化可以帮助我们提高测试效率:比如一个项目要的开发周期只有短短的几个月,而在测试期间是每周都要发布一个版本供测试人员测试,一个系统的功能点有几千个上万个,人工测试是非常的耗时和繁琐,这样必然会使测试效率低下,而自动化流程恰恰帮我们提高了测试效率。

那么对于移动App测试领域,如果一个新的应用发布版本,QA人员面临的挑战就是如何应对市场上数以千计的机型兼容性测试,毫无疑问,这是一个非常浩大的工程,更别提有些工程机在市面上根本就采购不到,比如谷歌的Nexus和Pixel系列手机,所以本次我们就在Win10系统下尝试利用Genymotion模拟器配合Docker构建Appium容器,实现短时间内上千款机型的自动化测试工作。

首先关于Android模拟器为什么选择Genymotion,诚然,国内也有蓝神等模拟器可供选择,但是Genymotion作为Android模拟器领域的执牛耳者,其启动及运行速度非常快,不仅支持多个Android版本,还可以多个Android系统同时启动运行,这就为我们并行测试脚本提供了便利,当然了,Genymotion也有自身的缺点,就是客户端版本为内核x86架构暂不支持arm框架的应用,但是云端服务已经支持了arm架构,这无疑在模拟器领域是一个重大利好。

进入Genymotion注册页面:https://www-v1.genymotion.com/account/create/

注册成功后,注意邮箱需要激活一下,随后进入下载页面:https://www.genymotion.com/download/

这里Win10系统会有两个版本,因为Genymotion内核是基于VirtualBox虚拟机,所以如果未安装VirtualBox,则选择with Virtualbox,否则可以选择without Virtualbox,直接选择Genymotion本体即可。

安装成功后,用刚刚注册的账号进行登录,随后选择personal use(个人版):

随后选择需要测试的机型创建即可:

创建好对应手机的虚拟机,还需要进行一些设置,才能保证虚拟机正常运行。

将Virtualbox设置常规选项中的版本重新选择Ohter Linux-64位

同时将网络选项的混杂模式选择:允许虚拟电脑,这个稍后链接虚拟机的时候会用到:

最后,为了安全起见,最好将宿主机的hyper-v功能关闭,管理员权限打开终端,执行命令

bcdedit /set hypervisorlaunchtype off

重启电脑后,启动手机模拟器,出现Android界面则表示配置成功:

接着我们来配置Android ADB,Android ADB又是什么?ADB 全称是 Android Debug Bridge,是开发或使用 Android 时很常用到的工具。可以从电脑透过 USB 连线到 Android 手机上,利用指令列来控制你的手机。

这里我们主要是通过ADB命令来获取虚拟机的终端ip,直接下载压缩包文件:https://dl.google.com/android/repository/platform-tools-latest-windows.zip

将其解压到C盘根目录,C:\platform-tools\_r31.0.2-windows\platform-tools

然后将该目录配置全局环境变量,使其可以在终端内直接访问:

C:\Users\liuyue>adb --version  
Android Debug Bridge version 1.0.41  
Version 31.0.2-7242960  
Installed as C:\platform-tools_r31.0.2-windows\platform-tools\adb.exe

现在执行设备列表命令:

C:\Users\liuyue>adb devices  
List of devices attached  
192.168.42.103:5555     device

可以看到,刚刚我们启动的虚拟机已经出现在设备列表中了,直接通过connect命令就可以进行连接,和真机几乎没有任何差别:

C:\Users\liuyue>adb devices  
List of devices attached  
192.168.42.103:5555     device  
  
  
C:\Users\liuyue>adb connect 192.168.42.103:5555  
already connected to 192.168.42.103:5555  
  
C:\Users\liuyue>

下面轮到Docker出场了,Docker的任务主要是利用容器运行Appuim自动化脚本,这样就避免了繁缛的Appuim安装配置环节,当然了,您的电脑得提前装好Docker,如果没有,请移步:win10系统下把玩折腾DockerToolBox以及更换国内镜像源(各种神坑)

随后下载Appium基础镜像,Dockerhub上的镜像鱼龙混杂,这里还是推荐官方的版本:https://hub.docker.com/r/appium/appium

执行命令:

docker pull appium/appium

查看镜像:

liuyue@DESKTOP-NVU6CCV MINGW32 ~  
$ docker images  
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE  
appium/appium       latest              70f3d328b949        6 weeks ago         1.55GB

紧接着启动容器:

docker run --privileged -d -p 4723:4723 --name appium appium/appium

这里我们启动Appium容器,端口映射到4723,privileged参数让其具备root权限,-d后台执行。

随后查看容器运行状态:

liuyue@DESKTOP-NVU6CCV MINGW32 ~  
$ docker run --privileged -d -p 4723:4723 --name appium appium/appium  
a2e8f11fdf7c561b075b563dfcc1efb6e5381e78dc3d4435a89cf8f97be52f6d  
  
liuyue@DESKTOP-NVU6CCV MINGW32 ~  
$ docker ps  
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES  
a2e8f11fdf7c        appium/appium       "/bin/sh -c '/root/w…"   7 minutes ago       Up 19 seconds       4567/tcp, 0.0.0.0:4723->4723/tcp   appium

此时,我们就可以利用docker容器内的adb服务进行操作了:

docker exec -it appium adb connect 192.168.42.103:5555

可以看到,docker连接手机配对成功:

liuyue@DESKTOP-NVU6CCV MINGW32 ~  
$ docker exec -it appium adb connect 192.168.42.103:5555  
connected to 192.168.42.103:5555

常用的adb命令都可以进行操作,例如查看手机Android版本:

liuyue@DESKTOP-NVU6CCV MINGW32 ~  
$ docker exec -it appium adb shell getprop ro.build.version.release  
5.0

下面我们来编写一套简单的Appium自动化测试脚本,首先安装Appium库:

pip install Appium-Python-Client

编写appium\_test.py:

from appium import webdriver  
  
cap = {  
        "platformName": "Android",  
        "platformVersion": "5",  
        "deviceName": "192.168.42.103:5555",  
        "udid":"192.168.42.103:5555",  
        # 真机的  
        # "platformName": "Android",  
        # "platformVersion": "7.1.2",  
        # "deviceName": "10d4e4387d74",  
        "noReset": True,  
        "unicodeKeyboard": True,  
        "resetkeyboard": True  
    }  
  
driver = webdriver.Remote('https://192.168.99.100:4723/wd/hub', cap)  
  
# 安装APP  
driver.install_app(app_path='C:\\test.apk',  
                   replace=False, # 不允许覆盖  
                   timeout=10000, # 超时时间为10秒  
                   allowTestPackages=True, # 允许测试包  
                   useSdcard=False, # 不要安装在Sdcard  
                   grantPermissions=False) # 授予权限  
  
driver.quit()

这里的192.168.42.103:5555是Genymotion模拟的手机客户端地址,而https://192.168.99.100:4723/wd/hub则是基于Docker的Appium容器,这里我们为手机安装一款测试的app。

安装操作脚本执行以后,可以判断是否安装成功:

from appium import webdriver  
  
cap = {  
        "platformName": "Android",  
        "platformVersion": "5",  
        "deviceName": "192.168.42.103:5555",  
        "udid":"192.168.42.103:5555",  
        # 真机的  
        # "platformName": "Android",  
        # "platformVersion": "7.1.2",  
        # "deviceName": "10d4e4387d74",  
        "noReset": True,  
        "unicodeKeyboard": True,  
        "resetkeyboard": True  
    }  
  
driver = webdriver.Remote('https://192.168.99.100:4723/wd/hub', cap)  
  
# 判断APP是否安装,传递的参数为包名  
res = driver.is_app_installed('com.tencent.android.qqdownloader')  
print(res)  
driver.quit()

也可以利用脚本启动一些app,比如内置的计算器应用:

from appium import webdriver  
from time import sleep  
cap = {  
        "platformName": "Android",  
        "platformVersion": "5",  
        "deviceName": "192.168.42.103:5555",  
        "udid":"192.168.42.103:5555",  
        # 真机的  
        # "platformName": "Android",  
        # "platformVersion": "7.1.2",  
        # "deviceName": "10d4e4387d74",  
        "appPackage": "com.android.calculator2",  
        "appActivity": "com.android.calculator2.Calculato",  
        "noReset": True,  
        "unicodeKeyboard": True,  
        "resetkeyboard": True  
    }  
  
driver = webdriver.Remote('https://192.168.99.100:4723/wd/hub', cap)  
  
# 等待3秒  
sleep(3)  
# 将APP置于后台运行5秒钟,然后再切回前台  
driver.background_app(5)  
# 关闭APP  
driver.close_app()  
sleep(3)  
# 重新启动APP  
driver.launch_app()  
sleep(3)  
  
driver.quit()

这里计算器的包名和activity信息都配置在cap变量中。

杀死应用进程:

from appium import webdriver  
  
cap = {  
        "platformName": "Android",  
        "platformVersion": "5",  
        "deviceName": "192.168.42.103:5555",  
        "udid":"192.168.42.103:5555",  
        # 真机的  
        # "platformName": "Android",  
        # "platformVersion": "7.1.2",  
        # "deviceName": "10d4e4387d74",  
        "appPackage": "com.android.calculator2",  
        "appActivity": "com.android.calculator2.Calculato",  
        "noReset": True,  
        "unicodeKeyboard": True,  
        "resetkeyboard": True  
    }  
  
driver = webdriver.Remote('https://192.168.99.100:4723/wd/hub', cap)  
  
  
# 等待3秒  
sleep(3)  
# 如果应用程序没有运行或正在后台运行,则激活该应用程序  
driver.activate_app('com.android.calculator2')  
sleep(3)  
# 终止应用程序  
driver.terminate_app('com.android.calculator2')  
sleep(3)  
driver.quit()

几乎所有的移动端应用操作都可以编写Python脚本进行自动化测试,我们可以将Appium理解为移动端的Selenium,使用起来非常方便。

结语:莎士比亚说过,“一千个观众眼中有一千个哈姆雷特”。而在千万个Genymotion模拟器中,移动App也可以是千万种样子,通过编写Appium自动化脚本就可以将测试人员将这千万种的重复测试劳动中解放出来,何乐而不为呢?

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
15天前
|
搜索推荐 Python
使用Python自动化生成物业通知单
本文介绍如何使用Python结合Pandas和python-docx库自动化生成物业通知单。通过读取Excel数据并填充至Word模板,实现高效准确的通知单批量制作。包括环境准备、代码解析及效果展示,适用于物业管理场景。
53 14
|
19天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
5天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
23 7
|
18天前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
29 4
|
18天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
7月前
|
测试技术 API Python
Appium控件交互策略:优化自动化测试效率的关键方法
该文介绍了如何使用Selenium与APP进行交互,包括点击、输入和状态判断等操作。例如,通过element.click()点击控件,element.send_keys()输入文本,以及element.is_displayed()检查元素是否可见。还展示了如何获取元素属性,如resource-id、text和class,并提供了Python代码示例来定位并操作APP元素,如滑动条的显示、可点击性检测及点击滑动条中心位置。在编写测试脚本时,应注意元素定位和状态验证以确保测试稳定性。
|
测试技术 Python
Appium自动化框架从0到1之 执行测试用例& 生成测试报告&发送邮件
Appium自动化框架从0到1之 执行测试用例& 生成测试报告&发送邮件
184 1
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
95 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
4月前
|
测试技术 Android开发 iOS开发
Appium 是一个开源的自动化测试框架,它支持多种平台和多种编程语言
Appium是一款开源自动化测试框架,支持iOS和Android多平台及多种编程语言。通过WebDriver协议,开发者可编写自动化测试脚本。在iPhone上实现屏幕点击等操作需安装Appium及其依赖,启动服务器,并设置所需的测试环境参数。利用Python等语言编写测试脚本,模拟用户交互行为,最后运行测试脚本来验证应用功能。对于iPhone测试,需准备真实设备或Xcode模拟器。
137 1
|
7月前
|
Web App开发 小程序 Android开发
Appium微信小程序自动化环境准备
Appium微信小程序自动化环境准备
237 1
下一篇
DataWorks