范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

基于Docker构建Appium容器Genymotion完成移动端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-windowsplatform-tools
  然后将该目录配置全局环境变量,使其可以在终端内直接访问: C:Usersliuyue>adb --version Android Debug Bridge version 1.0.41 Version 31.0.2-7242960 Installed as C:platform-tools_r31.0.2-windowsplatform-toolsadb.exe
  现在执行设备列表命令: C:Usersliuyue>adb devices List of devices attached 192.168.42.103:5555     device
  可以看到,刚刚我们启动的虚拟机已经出现在设备列表中了,直接通过connect命令就可以进行连接,和真机几乎没有任何差别: C:Usersliuyue>adb devices List of devices attached 192.168.42.103:5555     device   C:Usersliuyue>adb connect 192.168.42.103:5555 already connected to 192.168.42.103:5555  C:Usersliuyue>
  下面轮到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自动化脚本就可以将测试人员将这千万种的重复测试劳动中解放出来,何乐而不为呢?

湖人和太阳的比赛发生大规模冲突湖人客场挑战太阳的比赛中,里夫斯在一次进攻中被布克打脸摔倒在地,艾顿和布克有点挑衅地看着里弗斯,贝弗利立即上前将艾顿推倒!双方随即爆发冲突,布克也被被判罚一级恶意犯规!贝弗利和艾顿嫦娥五号月壤,又有新发现磁铁矿通常涉及古磁场以及地外生命等重大科学问题,因此在行星科学领域备受学者关注。月球表面极端的还原环境使得月壤中的铁元素主要以二价铁离子和零价铁为主,在阿波罗时代仅有非常少量的三价vivoT3x值得点赞,定下6500mAh天玑8000,不怕受冷落在华为遭遇不幸之后,vivo总算是逮到时机了,与子品牌iQOO齐心协力,拿过多次国内市场智能手机出货量第一,成为名副其实的黑马。如今vivo旗下的产品也足够齐全,无论是高端旗舰还是双十二,这四款手机值得入手,12GB256GB大内存降到1669元头条创作挑战赛您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。双11刚刚过去,不过双十二马上又要来了,如果双11没有购买手机的话,双十二可华为鸿蒙心比天高,命比纸薄编辑于斌出品潮起网于见专栏混沌初开,鸿蒙肇始。按照汉典网的解释,古人认为天地开辟之前是一团混沌的元气,这种自然的元气就叫做鸿蒙。而华为自主研发的操作系统以此命名,寓意堪称唯美而深刻华为Mate40pro已经使用300天,和大家聊一下将近一年的使用体验其实我之前一直都是果粉,直到去年才换了华为mate40pro,作为自己的主力机,到今天正好300天,并且今年的工作机也换了华为P50,我这大半年的体验总体来说非常爽!特别是每次出停基于物联网大数据技术的智能化冷链物流解决方案随着生鲜电商线下配送的快速发展,冷链物流已成为越来越重要的基础设施,冷链也被誉为现代世界隐藏的生命线,是分配新鲜易腐食品所必需的通道中对于食品医药等冷链配送上下游相关的生产制造商仓抄书之旅凛冬已至要记住历史上所有伟大的成就,就是由于战胜了看来是不可能的事情而取得的。卓别林摘录新世纪之初充满了春天的希望,不过就像每个传奇的故事一样,一切还要从那个寒冷的冬天说起。在1999年前全球互联网地图可让您直观地体验互联网连接状态随着远程工作和视频分发服务的发展,国际互联网连接已成为现代社会不可或缺的一部分。电信研究公司Telegeography发布了一个信息图全球互联网地图,直观地总结了这种国际互联网连接用了两年的华为Mate40Pro,再次换回苹果后,憋了很多话想说用了两年华为Mate40Pro,今年想换机了,纠结换iPhone14Pro还是华为Mate50Pro,最终被灵动岛吸引了,换回了iPhone,使用两周后,心里有很多话想说。关于息屏科学家警告前所未见的北极僵尸野火,冰下火焰,根本无法扑灭这几年来,随着全球变暖,极端高温频繁来袭,许多地方变得非常干燥,各地火灾发生的也就更加频繁,美国和澳洲发生的野火甚至一烧就是半年以上,消防员根本无法进行人工扑灭,只能放任不管,等待
零百只要1。1秒,贴地飞行器来了!特斯拉Roadster开启预定全新超级跑车Roadster重新开启预定(去年年底停止预定)新车订金仍然是33。2万元人民币,美国定金为5000美元。至于新车会有哪些亮点呢?下面就和玩车弟去看看吧。早在2008年余承东又在吹牛皮了华为余大嘴也挺难,作为消费者业务ceo,其领导的手机终端业务遭受抵制(制裁),而在刚上任不久的华为智能汽车buceo职位上又遇到汽车芯片断供潮,原来1020元的汽车芯片现在居然能被比亚迪带头停产下架!燃油车离物种灭绝还有多久?自从新能源车成为了全球公认的未来,转型电动化就成了传统车企绕不开的主线任务。但当大家都在按部就班的时候,比亚迪居然当上了新能源销冠,最近还把燃油车给停产了其实最早用上48V轻混技术中国知网知识的传播者变为垄断者?文大象知道编辑大象知道图互联网今天,又有一条新闻上了热搜,中科院将从20号起停用中国知网。根据网传消息,中国知网的续订费用近千万,导致很多高校不堪重负。对此,中科院图书馆相关负责人java八股文(值得收藏)Java基础1。String和StringBuffer和StringBuilder的区别?2。sleep()区间wait()区间有什么区别?3。Object中有哪些方法?其中clo老实人刘强东,不应该被无脑黑经历性侵奶茶妹妹出局和京东裁员等风波的刘强东近两年被黑得很惨,我斗胆为东哥讲几句话。刘强东被人黑,正是因为他站出来了,因为他有所作为,树大招风就是这个道理。认真了解一下什么是自杀式董事长对高管多严格,24小时内不回邮件电话的,直接开除京东董事长刘强东曾经说过作为我公司的高管,24小时内不回邮件电话消息的人直接开除,没有商量的余地。其他公司的高层基本也都一样,那么哪些是公司一把手不能触碰的呢?一接受贿赂。这是所有他14岁辍学当保安,31岁身家33亿美元,却47岁突然去世,为啥论出生,他是香港首富李嘉诚的老乡。论年龄,他是昔日布鞋首富宗庆后的同龄人。论职业,他是昔日房产中介领袖左晖的同行兼前辈。论人生暴富逆袭的历程,他不比以上任何一个人轻松,也不比任何一油价调整消息今天4月18日,全国加油站调价后9295号汽油价格新的一周的开始,我们也迎来国内成品油第八次价格调整计价周期,根据现在原油价格显示,油价预计上调。但是大家也别过于担心,因为汽柴油价格调整是要看十个工作日内的平均原油滚动价格。现在市俄乌冲突持续,中国和日本可能将要为持有美债转而向美国付款美国4月15日公布的3月进口物价指数意外大幅升至2。6(远超前值并超越所有经济学家的预期),比2月1。4的数值更是涨超近一倍,4月14日公布的3月生产者物价指数(PPI)再创逾12不得以等待核酸结果为由限制通行刘鹤出席全国保障物流畅通促进产业链供应链稳定电视电话会议并讲话部署十项重要举措要求努力实现民生要托底货运要畅通产业要循环4月18日,全国保障物流畅通促进产业链供应链稳定电视电话会议