你以为Shell只是命令行?读懂这篇文,给你的工作赋能

Shell 是什么呢?很多人以为的Shell就是命令行,一条条可以百度出来的命令行。而简历上你只会写熟悉Linux?今天用摩拜App给大家讲解下如何使用
Shell 去操作 Android 设备进行自动化测试。

1 环境准备
首先我们需要准备一部手机或者一个Android模拟器。然后电脑上需要配置Android开发环境。

  • 下载 Android SDK:,按照系统版本下载相应的zip包。请按照自己的系统按需下载。

  • zip包解压缩,会生成一个tools目录。需新建一个sdk目录,然后把tools目录移动到sdk目录下。

        mkdir sdk  
            mv tools sdk
    
  • 设置环境变量,根据新建sdk目录的位置来添加ANDROID_HOME的路径:

        export ANDROID_HOME=sdk的目录位置  
              
                  export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin
    
  • 使用 sdkmanager 下载工具包

        sdkmanager "platform-tools" "build-tools;28.0.3"
    

sdkmanager 位于 sdk/tools/bin/sdkmanager。

2 ADB使用
Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android
设备进行通信。它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix
shell(可用来在模拟器或连接的设备上运行各种命令)的访问。该工具作为一个客户端-服务器程序,包括三个组件:

  • 客户端: 该组件发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。
  • 后台程序: 该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。
  • 服务器: 该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。
    您可以在 sdk/platform-tools/ 中找到 adb 工具。

我们通常使用adb devices来查看电脑上连接的Android设备,使用adb shell打开Android设备上的终端来执行各种命令。使用adb
logcat来查看Android设备产生的log信息。

如果不想使用usb线来连接Android设备,可以使用adb tcpip 端口在Android设备上启动一个指定的端口,然后使用adb connect
Android设备ip:端口远程连接Android设备。

3 ADB Shell下执行命令

uiautomator

uiautomator 是一个 java 库,包含用于创建自定义功能UI测试的API,以及用于自动执行和运行测试的执行引擎。使用uiautomator
help可以查看帮助信息。此处我们主要使用uiautomator
dump来获取当前屏幕的UI层次结构的XML文件。默认存储文件的位置/sdcard/window_dump.xml,也可以指定存放的位置uiautomator
dump /data/local/tmp/ui.xml。

input

input可以用来模拟各种输入操作,例如:发送文本、点击控件、滑动坐标。使用input可以查看帮助信息。

  • input text ab c: 输入文本abc
  • input tap x坐标 y坐标 点击坐标位置x,y
  • input swipe x1坐标 y1坐标 x2坐标 y2坐标 从x1,y1坐标滑动到x2,y2坐标

4 实战练习
好了,当我们配置好Android开发环境,大概了解adb命令的作用之后,同时知道了Android设备上的uiautomator和input命令后,就开始我们进入今天的重点了,使用这些命令来组合成自动化的操作。

首先呢,我们需要找一个我们练习用的APP,今天我们选择的是”摩拜单车“。大家可以在此处下载安装包文件。

下载完成之后,我们把Android设备使用usb线连接到电脑。使用adb devices来确认设备是否连接成功。

设备已经连接成功,我们需要把“摩拜单车”应用安装到Android设备上,执行adb install
摩拜单车安装文件,“有些手机权限管理比较严格,可能需要在手机上点击同意安装此应用。”

进入Android设备的终端下

我们先打开摩拜单车应用,然后去查看一下页面的源码

        uiautomator dump --compressed /data/local/tmp/ui.xml && cat /data/local/tmp/ui.xml

执行后会生成一个.xml文件。文件结构如下。每个控件都是由组成。

        <?xml version='1.0' encoding='UTF-8' standalone='yes' ?><hierarchy rotation="0">  
              
                  <node index="0" text="您尚未完成手机验证,请先进行手机验证" resource-id="com.mobike.mobikeapp:id/text" class="android.widget.TextView" package="com.mobike.mobikeapp" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[48,259][771,365]" /></node>  
                        
                            <node index="1" text="登录" resource-id="com.mobike.mobikeapp:id/action" class="android.widget.TextView" package="com.mobike.mobikeapp" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[819,261][1032,362]" /></node>  
                                  
                                        
                                            此处省略n多行......</hierarchy>

我们可以按照、结构来进行拆分。使用的命令行为:

        cat /data/local/tmp/ui.xml | sed 's#<node #^<node #g' |tr '^' '\n'

sed 含义是把包含<node的字符替换成^<node。然后使用 tr命令把 ^字符替换成\n字符。\n表示换行。

点击
根据控件中的bounds="[x1,y1][x2,y2]"属性来查找控件中心点的 x,y轴坐标,计算方法是(x1+x2)/2,(y1+y2)/2``

        cat /data/local/tmp/ui.xml | sed 's#<node #^<node #g' |tr '^' '\n' | grep '"摩拜单车"'| awk -F '\\[|\\]|,' '{print ($2+$5)/2,($3+$6)/2}'

awk -F 指定分隔符。’\\[|\\]|,'这个字符串匹配的是“ [ ] ,

”这三个字符。其中\\两个反斜线代表转义字符,|竖线代表或者的意思。整体就是匹配“左中括号”或者“右中括号”或者“逗号”。

然后使用上面的方法得到的x,y坐标来点击应用图标input tap 167.5 219。最后写成一个函数,只要传递控件的名字就能点击相应的图标啦。

        # 点击函数  
            function click(){  
                adb shell uiautomator dump --compressed /data/local/tmp/ui.xml  
                    XY=$(adb shell cat /data/local/tmp/ui.xml | sed 's#<node #^<node #g' |tr '^' '\n' | grep "$@"| awk -F '\\[|\\]|,' '{print ($2+$5)/2,($3+$6)/2}')  
                        echo $XY  
                              adb shell input tap $XY  
                                  }

点击坐标,因为我的手机上面显示了两条关于摩拜应用的坐标,一个是应用图标的,一个是应用文本的,选择其中一个即可。

        click 'text="摩拜单车"'  
            click 'content-desc="摩拜单车"'

输入文本

        # 输入文本  
            function send_keys(){  
                adb shell input text "$@"  
                    }

滑动

wm size命令可以查看屏幕分辨率,然后提取分辨率的数值adb shell wm size |awk -F ’ |x’ '{print $3,$4}
,这里使用了空格或者x做分隔符。

        # 滑动函数  
            function swipe(){  
                  # 获取屏幕尺寸  
                      SIZE=$(adb shell wm size)  
                          echo $SIZE  
                              # 开始滑动的坐标 awk -v 设置一个变量x,接收的变量内容是$1,$1是位置参数。  
                                  START=$(echo $SIZE |awk -v x=$1 -v y=$2 -F ' |x' '{print $3*x,$4*y}')  
                                      echo start: $START  
                                          # 结束滑动的坐标  
                                              END=$(echo $SIZE | awk -v x=$3 -v y=$4 -F ' |x' '{print $3*x,$4*y}')  
                                                  echo end: $END  
                                                      # 滑动  
                                                          adb shell input swipe $START $END  
                                                              }

使用swipe x1 y1 x2 y2进行滑动。例如(下面数值均为随机数值):

从右向左滑动: swipe 0.3 0.8 0.7 0.8
从左向右 滑动: swipe 0.7 0.8 0.3 0.8
从上向下滑动: swipe 0.8 0.7 0.8 0.3
从下向上滑动: swipe 0.8 0.3 0.8 0.7

5 实战运行效果

打开APP并停留12秒

         function main(){  
                 echo '打开“摩拜单车”应用'  
                         click 'content-desc="摩拜单车"'  
                                 echo '等待12秒'  
                                     
                                         
                                                 sleep 12

整体的运行效果是这样的。

关闭提示并登录

             echo '关闭提示'
                 
                         click 'resource-id="com.mobike.mobikeapp:id/btn_close"'  
                                 echo '等待2秒'  
                                         sleep 2  
                                                 echo '点击“登录”'  
                                                         click "登录"  
                                                                 echo '等待2秒'  
                                                                     
                                                                         
                                                                                 sleep 2

整体的运行效果是这样的。

输入手机号并登录

             echo '输入“手机号'  
                     send_keys 13718321932  
                             echo '等待2秒'  
                                     sleep 2  
                                             echo '点击“下一步“'  
                                                     click 'text="下一步"'  
                                                         
                                                             
                                                                 }
                                                                     
                                                                           
                                                                               
                                                                                   
                                                                                       main  

整体的运行效果是这样的(上图手机号为随机填写)。

6 写在最后
**
**
当然,脚本自动化远不止上面这些。 你需要知道更多。比如awk,sed 命令功能深入了解,adb到底还有什么好用的参数?adb 的运行原理?

想要摩拜自动化脚本的小伙伴,也可以添加小助手微信回复“第十期”进群。 更多干货在霍格沃兹测试学院第十期:Linux脚本自动化。

- 今日互动 -


欢迎留言并分享给其他爱学习的测试小伙伴


(别忘了 长按 添加小助手微信,

回复“ 第十期 ”即可入群)

_ ****_

来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
视频资料领取:https://qrcode.testing-studio.com/f?from=CSDN&url=https://ceshiren.com/t/topic/15844
点击查看更多信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值