Python-UiAutomator2实现Android自动化测试

本帖转自搜狗测试公众号

 

【一、前言】

       基于Python-UiAutomator2实现Android自动化测试,小编在Android应用的自动化性能测试中进行了实践。本篇将简单介绍python中使用adb、aapt命令的方法以及Python-UiAutomator2使用,后续文章将对环境搭建以及自动化性能测试进行介绍,希望能给大家一些微薄的帮助。

【二、python中使用adb、aapt命令】

在python中使用adb命令,可以导入os模块

1、简单的adb命令

如:os.system('adb devices)

2、稍微复杂的adb命令

如:os.system('adb shell "dumpsys activity | grep "com.sogou.map.android.***.*""')

3、将adb读出的内容保存(os.system不支持读取,os.popen支持读取)

如:out = os.popen('adb shell "dumpsys activity | grep 

"com.sogou.map.android.***.*""').read()

 

 

在python中使用aapt命令

aapt即Android Asset Packaging Tool,可以在Android SDK的platform-tools目录下找到该工具。aapt可以查看、创建、更新ZIP格式的文档,也可将资源文件编译成二进制文件。

1、 列出apk包的内容

aapt l[ist] [-v] [-a]file.{zip,jar,apk}

-v 以table形式列出来

-a 详细列出内容

2、 查看apk一些信息

aapt d[ump] [--values]WHAT file.{apk} [asset [asset ...]]

badging  Print the label and icon for the app declaredin APK

permissions  Print the permissions from the APK.

Resources  Print the resource table from the APK.

Configurations  Print the configurations in the APK.

Xmltree  Print the compiled xmls in the given assets.

Xmlstrings  Print the strings of the given compiled xmlassets.

例如:执行aapt d badging **.apk,可以看到其中包含了应用包名、版本号、permission等信息。

 

 

 

 

【三、Python-UiAutomator2使用】

1、UiAutomator

UiAutomator是google为Android平台开发的自动化测试框架,基本上支持所有的Android事件操作,主要是针对UI的自动化测试,支持Android 4.1以及更高的版本。

UiAutomator提供了以下两种工具来支持UI自动化测试:

(1). uiautomatorviewer:用来分析UI控件的图形界面工具,位于SDK目录下的tools文件夹中。

(2). uiautomator:一个java库,提供执行自动化测试的各种API。

是否能够用更脚本化的语言,例如Python,可以所见即所得地修改测试、运行测试?

非常感谢Xiaocong实现并分享(详见参考2),为Python和UiAutomator架了一座桥。

2、Python-UiAutomator2

python-uiautomator2是一个Android UI自动化框架,支持Python编写测试脚本对设备进行自动化。底层基于Google uiautomator2,允许测试人员直接在PC上编写Python的测试代码,操作手机应用,完成自动化,提高自动化代码编写的效率。原理是在手机上运行了一个http服务器,将uiautomator中的功能开放出来,再将这些http接口,封装成Python库。

支持平台及语言

 

python-uiautomator2主要分为两个部分,python客户端,移动设备

  • python端:运行脚本,并向移动设备发送HTTP请求

  • 移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

 

整个过程

(1).   在移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator2服务(默认7912端口)进行监听;

(2).   在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端);

(3).   移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作。

python-uiautomator2代码示例

 

上面代码的作用是启动“搜狗地图”应用,然后点击“身边tab”,代码简洁、高效。

 

3、python-uiautomator2常用API介绍

3.1 获取机器的信息

d.info

d.window_size()

d.current_app()

d.serial  #获取设备序列号

d.wlan_ip  #获取无线局域网ip

 

3.2 屏幕相关的操作

开关屏幕,代码如下

d.screen_off()  #打开屏幕

d.screen_on()  #关闭屏幕

d.unlock()  #解锁屏幕

3.3 按键(软/硬)操作

d.press('back')

d.press('home')

还支持如下按键的操作,

home、back、left、right、up、down、center、menu、search、enter、recent(recent apps)、volume_up、volume_down、volume_mute、camera、power

3.4 手势相关的操作,包括短按/长按/滑动/拖拽

点击操作

d.click(x, y)

双击操作

d.double_click(x,y)

长按操作

d.long_click(x, y)

滑动操作

d.swipe(sx, sy, ex, ey)

d.swipe(sx, sy, ex, ey, steps=10)

拖拽操作

d.drag(sx, sy, ex, ey)

3.5 屏幕相关的操作

获取并设置屏幕的旋转方向

orientation = d.orientation

d.set_orientation("l") # or "left"

d.set_orientation("r") # or "right"

d.set_orientation("n") # or "natural"

冻结/解冻旋转功能

d.freeze_rotation()  # 冻结旋转

d.freeze_rotation(False)  # 解冻旋转

屏幕截图

d.screenshot("home.png")

获取屏幕层级(hierachy)XML

xml = d.dump_hierarchy()

打开通知栏或快速设置栏

d.open_notification()

d.open_quick_settings()

【四、参考文献】

参考

https://github.com/openatx/uiautomator2

https://github.com/xiaocong/uiautomator#uiautomator

https://blog.csdn.net/jgw2008/article/details/78286469

https://testerhome.com/topics/11357

转载于:https://www.cnblogs.com/Yanss/p/10166512.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件信息修改大师_零成本学习之单片机硬件开发(1)

从今天开始给大家逐步讲解单片机编程,有兴趣的小伙伴们,可以关注本课程,完全免费本人从事从2004年大学毕业开始从事开发工作,先后做过单片机开发、ucOSII开发、手机开发、android APP开发、PHP开发、微信小程序开发,目…

ionic3 自动创建启动背景splash以及图标icon

在新建的项目文件夹下的 resources下就是我们放置图标以及启动背景图片的位置了。 如果现在我们想生成自己的图片的启动背景以及图片,我们需要把resources下的 icon.png 以及splash.png 替换为我们的图片。 icon 图片最好为1024x1024像素 splash 图片最好为2732x2…

Spring容器的简单实现(IOC原理)

引言:容器是什么?什么是容器?Spring容器又是啥东西?我给Spring容器一个对象名字,为啥能给我创建一个对象呢? 一、容器是装东西的,就像你家的水缸,你吃饭的碗等等。 java中能作为容器…

epic怎么添加本地游戏_游戏日报:原神公测无法上架多家安卓渠道;Epic投资布局游戏UGC平台...

// 热点标签/// NOCITCE华为|小米|OPPO|米哈游|腾讯|莉莉丝B站|阅文集团|Epic|万国觉醒|灰烬战线FGO|怪物弹珠|勇者斗恶龙|金币大师阴阳师|和平精英|王者荣耀|三国志战略版1.华为、小米、OPPO等多家安卓渠道的《原神》版主发布公告称,因开发者要求/未与米哈游达成一…

php 出错处理,PHP 错误处理机制

在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息;有些错误异常会终止脚本执行,这个…

使用structure101分析软件包的依赖关系

稳定应用程序的一个关键是结构良好的代码库。 我们知道我们应该建立尽可能多的黑匣子,因为一旦完成一个黑匣子,我们就不必再考虑它的内部了。 您只需要使用您或其他团队成员通过明确定义的界面编写的代码即可。 这使您可以专注于要添加的下一个功能。 当…

excel高级筛选怎么用_神!Excel高级筛选原来如此好用

转自EXCE不加班这两天的宏教程都提到了高级筛选这个功能,不过只是用到最基本的用法。高级筛选其实是一个很好用的功能,今天卢子来全面讲解。1.按关键词筛选高级筛选最重要的就是条件区域,资产名称四门书柜,日期2017/1/1&#xff0…

iis7.5配置php环境,iis7.5安装配置php环境 - iis

前言iis7.5是安装在win7、win8里的web服务器,win2003、win2000的web服务器使用的是iis6.0,由于win7、win8系统相比win2003、win2000有了改新革面的不同,因此对于iis7.5的配置也必需捣鼓一翻才能熟悉。不过...前言iis7.5是安装在win7、win8里的…

微信小程序 网络请求之设置合法域名

设置域名 登录微信公众号后台小程序中 设置→开发设置→服务器设置 必须设置域名,微信小程序才能进行网络通讯,不然会报错 如果设置好了合法域名,开发工具还提示不在合法域名列表中,因为在微信会有一段时间的缓存,等…

money (dp)

牛客网暑假训练第二场D题: 链接:https://www.nowcoder.com/acm/contest/140/D来源:牛客网 题目描述 White Cloud has built n stores numbered from 1 to n. White Rabbit wants to visit these stores in the order from 1 to n. The store …

php gps 坐标,php 计算gps坐标 距离

在计算机或GPS上经纬度经常用度、分、秒和度.度、分.分、秒.秒的混合方式进行表示,度、分、秒间的进 制是60进制,度.度、分.分、秒.秒的进制是100进制,换算时一定要注意。可以近似地认为每个纬度之间的距离是不变的111KM,每分间 1.85KM&#…

博客园如何使用MarkDown

如何使用博客园下的markdown:https://www.cnblogs.com/ulrica/p/8933549.html 博客园的 MarkDown 代码样式如何设置https://www.cnblogs.com/zhongxia/p/26b4b061f2a47518681bcdd4ff89c344.html 博客园 Markdown 编辑器指南http://www.cnblogs.com/qiaogaojian/p/61…

jQuery -- 光阴似箭(五):AJAX 方法

jQuery -- 知识点回顾篇&#xff08;五&#xff09;&#xff1a;AJAX 方法 1. $.ajax 方法&#xff1a;用于执行 AJAX&#xff08;异步 HTTP&#xff09;请求。 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"t…

ggplot2设置坐标轴范围_R语言数据可视化| ggplot2中会“分身术”的facet_wrap()与facet_grid()...

【R语言】高维数据可视化| ggplot2中会“分身术”的facet_wrap()与facet_grid()姐妹花​mp.weixin.qq.comfacet_grid()形成由行和列面化变量定义的面板矩阵。当有两个离散变量&#xff0c;并且这些变量的所有组合存在于数据中时&#xff0c;它是最有用的。如果只有一个具有多个…

php resque 计划任务,PHP-RESQUE - 实现重试

因为PHP-Resque 的重试部分需要自己写&#xff0c;网上又没啥轮子&#xff0c;而且resque也已经很久不更新了&#xff0c;所以自己研究下resque的源码&#xff0c;然后也借鉴了Laravel的队列重试机制&#xff0c;实现了PHP-Resque的重试机制。Resque地址设计思路1.这里需要阅读…

RabbitMQ集群、镜像部署配置

1 RABBITMQ简介及安装 RabbitMQ是一个开源的AMQP实现&#xff0c;服务器端用Erlang语言编写&#xff0c;支持多种客户端&#xff0c;如&#xff1a;Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等&#xff0c;支持AJAX。用于在分布式系统中存储转发消息…

C语言、c++实现超好玩植物大战僵尸(完整版附源码)

实现这个游戏需要Easy_X main.cpp //开发日志 //1导入素材 //2实现最开始的游戏场景 //3实现游戏顶部的工具栏 //4实现工具栏里面的游戏卡牌 #define WIN_WIDTH 900 #define WIN_HEIGHT 600 //定义植物类型 enum { WAN_DOU, XIANG_RI_KUI, ZHI_WU_COUNT }; #include<stdio.…

【代码笔记】Web-HTML-颜色

一&#xff0c;效果图。 二&#xff0c;代码。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>html 颜色</title> </head> <body> <!--html 颜色--> <p style"">> 通过十六…

java 如何去掉http debug日志_你居然还去服务器上捞日志,搭个日志收集系统难道不香吗?...

作者&#xff1a;MacroZheng链接&#xff1a;https://juejin.im/post/5eef217d51882565d74fb4eb来源&#xff1a;掘金SpringBoot实战电商项目mall&#xff08;35kstar&#xff09;地址&#xff1a;http://github.com/macrozheng/…摘要ELK日志收集系统进阶使用&#xff0c;本文…

GitHub的10,000个最受欢迎的Java项目-以下是它们使用的顶级库

随着Java开发人员正在使用既成熟又高度发展的语言来工作&#xff0c;无论何时编写新代码&#xff0c;我们都将面临一个持续的难题–使用大家都在谈论的热门新技术&#xff0c;或者坚持使用久经考验的库&#xff1f; 由于Java应用程序的很大一部分是商业性质的&#xff0c;因此…