精华内容
下载资源
问答
  • linux 自动化测试
    千次阅读
    2021-05-26 22:34:21

    参考1
    参考2
    源码

    1. 关于dogtail

    dogtail 是 使用可访问性(A11Y,Accessibility)技术与桌面应用程序通信的图形用户界面GUI测试工具和自动化框架。
    dogtail 是 用 Python 编写,是python 中的一个第三方包。
    dogtail 适用于Linux系统

    2. 安装dogtail

    ①首先需要安装依赖包

    sudo apt-get install python3-pyatspi python3-pyqt5
    

    ②再进入该网站下载安装包,并且解压。terminal中切换到解压的安装包目录下,并且输入如下命令进行安装

    sudo python3 setup.py install
    

    或者

    sudo pip3 install dogtail (我执行这个,sniff不能用)
    

    3. sniff 组件

    在 dogtail 的发行包中,自带了一个 sniff 组件(嗅探器),该组件在 GUI 程序追踪方面非常有用。

    在terminal终端,输入 sniff 命令并执行,会弹出一个 AT-SPI Browser 界面,里面包含了所有正在运行的程序。所有程序是以 tree 的形式显示。
    在这里插入图片描述

    1. 获取元素控件的标签名称
      为了方便查看元素控件对应的位置,建议现在上方工具栏点击Actions,然后勾选Hightlight Items。
      在这里插入图片描述
      在 AT-SPI Browser 界面中点击相应的应用标签tree,点击相应的元素控件,在工具的下方会显示元素空间的Name,这个就是标签名。
      在这里插入图片描述

    4. dogtail的 应用

    4.1 启动应用

    dogtail 中utils 模块下提供run()方法,用于启动应用。

    run(string, timeout=30, interval=0.5, desktop=None, dumb=False, appName='')
    # Runs an application.
    

    这种方法的优点是采用进程的方式直接启动,不依赖与UI,无论桌面或任务栏上是否存在应用图标,都可以正常启动。

    应用:

    from dogtail.utils import *
    
    run('deepin-music')
    

    4.2 获取应用程序

    dogtail 中tree 模块下root类 提供了一个application方法,用于启动应用。

    API具体 方法:

    
    1. applications(self)    # Get all applications.	
    2. application(self, appName, retry=True)	#Gets an application by name, returning an Application instance or raising an exception. This is implemented using findChild, and hence will automatically retry if no such child is found, and will eventually raise an exception. It also logs the search.
    
    

    源码:请看这里哦

    应用:

    from dogtail.tree import *
    root.application(AppName,) ## 获取应用程序(根据程序名称查找)
    
    

    4.3. 定位元素控件

    在这里插入图片描述

    应用对象使用child()方法

    from dogtail.tree import *
    
    app_obj = root.application(AppName,) # 获取应用程序(根据程序名称查找)
    element = app_obj.child('element_name') # 定位元素控件
    

    我们可以通过传入元素的Name,获取到相应元素的对象。Name可以通过sniff查看

    4.4. 操作元素

    单击

    element.click(button=1) #button 1 —>左键,2—>滚轮,3—>右键,默认为1
    

    双击

    element.doubleClick(button=1)
    

    鼠标移动到元素控件上

    element.point()
    

    4.5.控制键盘和鼠标操作

    dogtail中控制键盘和鼠标操作,依赖于rawinput包
    首先需要导入rawinput包

    from dogtail import rawinput
    
    4.5.1鼠标相关操作

    点击

    rawinput.click(x, y, button=1, check=True)
    #1.x, y 为所要点击的坐标
    #2.button为鼠标左右键,1代表左键,2代表滚轮,3代表右键,默认参数,可以不传
    #3.check为坐标检查,如果为负数,会抛异常,默认参数,可以不传
    

    双击

    rawinput.doubleClick(x, y, button=1, check=True)
    

    长按鼠标左键不放

    rawinput.press(x, y, button=1, check=True)
    

    长按鼠标左键后松开

    rawinput.release(x, y, button=1, check=True)
    

    鼠标移动(相对位置、绝对位置)

    # 一.鼠标移动到相对位置
    rawinput.relativeMotion(x, y, mouseDelay=None)
    # 1.x, y 为所要移动的相对位置,比如从当前位置移动100,100,注意和绝对位置的区别
    # 2.mouseDelay为鼠标移动的延迟时间,默认参数,可以不传
    # 二. 鼠标移动到绝对位置
    rawinput.absoluteMotion(x, y, mouseDelay=None, check=True)
    # 1.x, y 为所要移动到的坐标
    # 2.mouseDelay为鼠标移动的延迟时间,默认参数,可以不传
    # 3.check为坐标检查,如果为负数,会抛异常,默认参数,可以不传
    

    1. 绝对位置
    rawinput.drag(fromXY, toXY, button=1, check=True)
    # 1.fromXY 起始位置的坐标(x, y )
    # 2.toXY 目标位置的坐标(x, y )
    
    1. 相对位置
      rawinput没有提供相对位置的拖拽,但是我们可以通过如下代码,进行二次封装实现相对位置的拖拽。
    rawinput.press(x, y ) 
    rawinput.relativeMotion(x, y)
    rawinput.release(x, y)
    
    
    4.5.2 键盘相关操作

    键盘输入文本

    rawinput.typeText(string)  #传入要输入的字符串即可
    

    注意: 不支持中文输入,经过分析源码,输入的功能实际是遍历字符串里面的每一个字符然后调用的pressKey,也就是敲键盘的方式实现输入,所以中文输入的bug无解。在UOS上使用这个方法输入中文的时候,系统直接崩溃(注销)。

    键盘按键

    rawinput.pressKey(keyName)
    
    # 其中 keyName = {
        'enter': 'Return',
        'esc': 'Escape',
        'alt': 'Alt_L',
        'control': 'Control_L',
        'ctrl': 'Control_L',
        'shift': 'Shift_L',
        'del': 'Delete',
        'ins': 'Insert',
        'pageup': 'Page_Up',
        'pagedown': 'Page_Down',
        ' ': 'space',
        '\t': 'Tab',
        '\n': 'Return'
    }
    

    键盘组合按键

    rawinput.keyCombo(comboString)
    
    # comboString组合按键,比如:
    '<Control><Alt>p' 
    '<Control><Shift>PageUp' 
    '<Control>q'
    
    更多相关内容
  • 打开eclipse创建模拟器,完成 二、 android studio 官方下载 下载后解压: #我的包名 android-studio-2021.1.1.22-linux.tar.gz tar -xvf android-studio-2021.1.1.22-linux.tar.gz cd android-studio/bin # 直接...

    注!!!(作者电脑为Ubuntu20 不同发行版可能存在些许差异)

    需要环境如下

    1. java

    2. Android sdk

    3. Android模拟器

    4. python

    5. appium

    java

    java可以直接使用apt命令安装,此方法无需配置环境变量,ps:ubuntu20好像自带了jdk11。安装命令如下:

    #查看存在的版本
    sudo apt list |grep openjdk
    #选择对应版包本名安装
    sudo apt install openjdk-...
    

    sdk和模拟器 模拟器使用adt或android studio可以跳过这里

    sdk 下载地址1 下载地址2_度盘
    下载后解压 ,sdk目录如下

    build-tools  licenses  platforms       skins          tools
    emulator     patcher   platform-tools  system-images
    #配置adb及uiautomatorviewer软链接,方便后续使用   下面 /...  表示全路径,根据实际路径自己替换 软链接命令为小写的 LN
    sudo ln -s  /.../platform-tools/adb   /usr/bin/adb
    sudo ln -s  /.../tools/bin/uiautomatorviewer      /usr/bin/uiautomatorviewer
    #验证
    adb --version
    # 显示如下
    #Android Debug Bridge version 1.0.41
    #Version 33.0.1-8253317
    #此时SDK就算完成了
    

    模拟器我试过几个Bliss OS和Genymotion 感觉比较麻烦,所以还是推荐使用adt的或android studio里的,大致说一下这个的配置
    一、 adt_bundel 下载地址
    这个相对Android_studio而言还是比较麻烦,先下载adt_bundel,下载后解压,包里包含eclipse及sdk,
    运行安卓模拟器需要自己下载sdk-system-image 最下面 并在sdk文件夹新建system-images,
    把下载的image解压到此,打开eclipse创建模拟器,完成

    二、 android studio 官方下载 下载后解压:

    #我的包名  android-studio-2021.1.1.22-linux.tar.gz
    
    tar -xvf android-studio-2021.1.1.22-linux.tar.gz    
    
    cd android-studio/bin
    
    # 直接启动  
    
    ./studio.sh
    

    启动后创建一个项目,会让你选择sdk路径,(路径别带中文)
    进入项目后点击右上角的模拟器(driver Manager)
    在这里插入图片描述

    点击Creat drivice
    在这里插入图片描述

    选择phone 并选择一个机型 并选择下一步

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZEcMMJK-1648887689602)(/uploads/photo/2022/a9815b15-cd79-4e72-92f9-abaa7bfc20e1.png!large)]

    选择镜像 根据需求自行选择,可以推荐按Target选择,点download下载

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3XtfYSt-1648887689603)(/uploads/photo/2022/c66204d2-dba0-48f3-99ff-772088bd7b2f.png!large)]

    下载后选择镜像,下一步,给模拟器取名,点完成
    返回driverManager启动模拟器,此步完成

    python ubuntu20自带python3 略过

    appium

    官方github
    进入网站后自行选择版本,点开Assets并选择xxx.AppImage下载如图:(appimage为linux可执行文件)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AcZSYLbo-1648887689603)(/uploads/photo/2022/0f966ec9-8c0e-4344-b7b7-ce979b7abdd5.png!large)]

    下载后 右键-属性-权限 允许文件作为程序执行 打钩,或者用命令

      chmod +x Appium-XXXX.AppImage
      # 打开方式 双击或者
    ./Appium-XXXX.Appimage
    

    重点!!! 因为之前没有配置安卓环境变量,所以需要在appium里面配置
    打开appium,点击Advanced 选择Edit Configurations配置环境 如图:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mzbCOhdU-1648887689604)(/uploads/photo/2022/b864bb4f-270f-455c-8875-eba02a10ef4d.png!large)]

    在ANDROID_HOME输入你得SDK路径 如果没修改过文件夹名称就应该是 /xxx/xxx/sdk

    至此,整个appium的Linux开发环境就完成了

    展开全文
  • 本文主要阐述了Linux下进行Appium+Python+Headless的移动应用自动化测试的实操。 这项工作非常有助于在DevOps流程中执行持续集成。

    Linux下Appium+Python+Headless移动APP自动化测试实战



    Linux系统由于其出色的稳定性而备受欢迎。为了方便linux用户进行android自动化测试,这篇文章主要讲述一下在linux下准备appium+python自动化测试环境的相关步骤和要求(我用的是linux mint 19.3)。
    这里强烈建议大家不要在虚拟机上搞,可能会碰到各种这样那样的问题。我当时在linux主机上一次性顺利完成所有期望的配置和安装。为了写这篇文章,我在虚拟机上重新操作了一遍,结果卡在了手机模拟器启动的环节。因此读者看到的这篇文章的截图来源于两个linux计算机,一部分是我在linux主机的截图,一部分是我在linux虚拟机的截图。不过不影响阅读和参照。


    1. 环境准备

    1.1 安装配置JDK

    linux终端下运行java -version看有没有相关的输出。另外可以执行以下的命令看看有没有JAVA_HOME环境变量的设置。

    # echo $JAVA_HOME
    

    如果这些都没有的话,请自行在linux下安装jdk并设置环境变量,这里不再赘述。
    不过有一点需要说明,有的linux下自己带了openjdk,并且版本不一定适合,建议删除后再安装自己的jdk(这里建议安装JDK的1.8版本,后面会说相关原因)。
    linux mint下的卸载命令如下,如果第三行命令中的目录不存在的话,第四行命令也不需要执行

    # sudo apt-get purge openjdk*
    # sudo apt-get purge icedtea-* openjdk-*
    # cd /usr/lib/jvm
    # sudo dpkg --list | grep -i jdk
    

    1.2 安装配置Android SDK

    现在官网已经没有了独立的Android SDK的下载了,新提供的是Android Studio套件,其中囊括了所有需要的工具。

    当前使用的是 https://developer.android.google.cn/studio下面的最新版本4.2.2如下图
    在这里插入图片描述
    解压以后放到指定的目录下面

    # tar -zxvf android-studio-ide-202.7486908-linux.tar.gz
    # sudo mv android-studio /usr/local/share/
    

    然后通过下面的命令在/etc/profile中添加Android Studio环境变量。

    # sudo vi /etc/profile
    

    在文件的最后添加如下的内容(具体路径根据自己的实际情况刷新)

    export JAVA_HOME=/opt/jdk1.8.0_291
    export JRE_HOME=${JAVA_HOME}/jre
    export ANDROID_HOME=/home/mint/Android/Sdk
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:/usr/local/share/android-studio/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/tools:${ANDROID_HOME}/emulator:$PATH
    

    如下图
    在这里插入图片描述添加完成后,保存退出。 source一下,使新添加的环境变量生效。

    # source /etc/profile
    

    这个时候发现命令行前面的当前用户信息和机器信息由绿色变成了白色,说明已经生效。
    在这里插入图片描述
    直接在命令行中执行studio.sh,会启动已经安装好的android Studio。

    # studio.sh
    

    首先打开的是启动画面,如下图。
    在这里插入图片描述

    如果是无法正常链接google服务器(国内大多数网络)的话,请按照如下的步骤走
    然后出现是到如android srudio的对话框,如下图
    在这里插入图片描述
    选择不导入,点击OK按钮,接下来是上报用户数据对话框,根据自己的偏好选择即可,我选择不上传。

    选择不上传以后,会出现错误,如下图
    在这里插入图片描述
    Android Studio第一运行的时候,会链接官方服务器去下载Android SDK,但是由于众所周知的原因,这一步在国内会失败。解决办法是在 Android Studio 安装目录 bin/idea.properties 文件最后添加如下一行内容。
    disable.android.first.run=true
    在这里插入图片描述

    这里说明一下,这个办法不治本,仅仅是不让弹出这个错误而已,Android SDK并没有下载下来。
    这样,下一次运行的时候,就不会出现这个错误提示了,会直接进入下面的界面,直接点击Create New Project,如下图
    在这里插入图片描述这时候提示Android SDK不存在(很正常,上面刚刚解释过),如下图
    在这里插入图片描述
    选择打开SDK Manager,进入下面的界面
    在这里插入图片描述点击上面设置Android SDK路径的、选项后面的Edit,打开设置Android SDK路径页面,如下图默认是在当前用户的家目录下创建“Android/Sdk”目录,保持默认即可
    在这里插入图片描述点击Next,确认配置
    在这里插入图片描述再点击Next开始下载,如下图
    在这里插入图片描述下载过程中报了一个如下的错误,还是因为网络不稳定原因。
    在这里插入图片描述一般情况下多试几次就好,下载完成后,如下图
    在这里插入图片描述点击Finish按钮,页面显示已经安装好了一个Android SDK,如下图。
    在这里插入图片描述通过命令行查看,相关内容确实已经安装到~/Android/Sdk目录下,如下图
    在这里插入图片描述
    如果是能够正常链接google服务器的话,请按照如下的步骤走
    之后出现的是Setup Wizard页面,step by step结束以后出现组件下载界面,组件下载结束以后,显示如下的页面,点击Finish按钮,结束安装配置。
    在这里插入图片描述
    到目前为止,Android SDK被安装到了~/Android/Sdk目录下面。在这里插入图片描述

    如果读者安装的目录不是这个,或者这个目录下面找不到对应的内容,请自行搜索找到对应的Android SDK安装目录。

    现在,不管用哪种方法都安装好了Android SDK,这里开始,下面步骤都是一样的

    到这里,尽管Android SDK已经安装完成,但是使用还有点不方便,接下来吧SDK对应的工具包添加到环境变量中。

    # sudo vi /etc/profile
    

    在这里插入图片描述
    保存退出后,source一下,使新的环境变量生效。这时候adb命令可以正常使用了,如下图。
    在这里插入图片描述

    1.3 安装配置Python3

    这里没有什么好讲的,自行安装配置python3和pip3就可以了,略。
    在这里插入图片描述
    在这里插入图片描述

    1.4 安装配置NodeJs

    appium是基于nodejs的,linux mint下通过下面两行命令就可以顺利安装NodeJs(我当时安装的10.16.0版本,最新的appium需要nodejs 12或者以上)。
    如果是安装nodejs 10.x,请用下面的脚本

    # curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
    # sudo apt-get install -y nodejs
    

    如果是安装nodejs12.x,请用下面的脚本

    # sudo apt-get -y install curl dirmngr apt-transport-https lsb-release ca-certificates
    # curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
    # sudo apt-get install -y nodejs
    

    读者也可以通过官网下载对应的版本的压缩包,直接解压到指定的目录下,配置一下环境变量就可以使用了。
    安装好后,用node -v和npm -v验证一下,如下图所示能够相应的版本信息,则说明已经安装好。
    在这里插入图片描述

    1.5 安装配置Appium

    通过npm安装appium

    # npm install -g appium
    

    安装过程中可能会报权限不足的错误,这时候加上sudo重新执行一下即可。

    # sudo npm install -g appium
    

    这里描述一下我碰到的问题。之前在物理机上安装的时候,执行对应的命令一次性顺利完成安装。但是我在虚拟机上安装的时候,一直报错如下错误。
    在这里插入图片描述

    网上对这个问题有各种解决方法,但是对我来说都没有生效。虽然报错是权限问题,但是就算给对应目录777的权限,也还是报错。最终发现一个可以用的npm选项 --unsafe-perm=true --allow-root。

    # sudo npm install -g appium --unsafe-perm=true --allow-root
    

    在这里插入图片描述

    成功安装appium,问题解决。 appium -v可以查看版本信息。
    在这里插入图片描述

    不过我还是有些不安,这样虽然安装成功,但是不排除后面还隐藏着坑。初步猜测这个错误可能跟虚拟机有一定的关系。
    接下来安装appium-doctor

    # sudo npm install -g appium-doctor
    

    顺利安装完成,运行appium-doctor进行状态检查。

    # appium-doctor
    

    在这里插入图片描述

    存在红叉叉。作为一个重度强迫症患者,这个是不可忍受的。直接whereis java,把找到的结果放到环境变量里面即可。再次运行appium-docker,红叉叉消失。
    接下来安装 Appium-Python-Client

    # sudo pip3 install Appium-Python-Client
    

    到此为止,Appium+Python的移动应用自动化测试环境基本上准备完毕。


    2. 配置Android Studio开发环境

    对于App的运行环境,无非就是Android模拟器或者安卓实体手机。


    2.1 使用Android虚拟机

    对于App的运行环境,无非就是Android模拟器或者安卓实体手机。
    Android模拟器的使用很简单,运行Android Studio,进入AVD Manager,启动已有的Android虚拟机或者配置新的Android虚拟机即可,如下图,这里略过。
    在这里插入图片描述
    不过这里有可能会碰到一个问题,那就是因为权限问题导致Android虚拟机启动失败,如下图。
    在这里插入图片描述
    解决方法也很简单,给对应的/dev/kvm分配owner给当前用户即可,不会配置的自己问度娘。
    配置结束后,启动Android虚拟机,运行adb命令,可以看到链接到linux计算机的Android虚拟机设备。
    在这里插入图片描述

    2.2 使用Android物理手机

    这里重点介绍一下,linux机器下,如何配置运行Android实体机器。

    2.2.1 获取Android设备信息

    在Android手机没有通过数据线链接linux主机的时候,执行一下lsusb命令,然后手机通过USB线链接到linux主机,再次运行lsusb命令。
    细心的你会发现,命令输出结果里面多了一行,如下图。
    在这里插入图片描述
    这里面记录了你的Android手机链接linux主机的相关信息,请详细拷贝下来,备用。

    2.2.2 Linux下配置Android手机的配置文件

    通过下面的命令,创建Android主机配置文件,如果对应文件已经存在的话,请添加对应Android手机的信息。

    # sudo vi /etc/udev/rules.d/51-Android.rules
    

    在配置文件中添加如下的内容。

    SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", ATTR{idProduct}=="107e",MODE="0666", GROUP="plugdev", OWNER="billson"
    

    如下图。
    在这里插入图片描述
    这里用到了前面步骤中获取的Android手机相关信息,做一下说明,idVendor对应的字段代表手机厂商,我的华为手机这里对应的是12d1,idProduct对应的可以理解为手机型号, OWNER对应linux主机当前的用户名。有的资料里面没有加OWNER信息,但是我这里添加上了,因为我的主机不添加找不到手机。
    对应内容确认无误后保存退出,然后执行下面的命令修改配置文件对应的权限。

    # sudo chmod a+rx /etc/udev/rules.d/51-Android.rules
    

    2.2.3 linux下配置ADB的USB配置文件

    执行下面的命令,创建配置文件。

    # sudo vi ~/.android/adb_usb.ini
    

    在文件中以十六进制的形式添加手机对应的厂商信息和型号信息,比如对应文章中我的Android手机的配置信息为0x12D1107E。
    如下图,保存退出。
    在这里插入图片描述

    2.2.4 打开Android手机调试选项

    对于华为或者荣耀手机,依次进入“设置/系统/关于手机”, 如下图。
    在这里插入图片描述

    在“版本号”那一行快速点击至少5下(具体应该几下我没有数),如果手机有锁屏密码这个时候会弹出输入锁屏密码的界面,输入锁屏密码屏幕上会提示您已处于开发者模式。对于其他android手机,请自行查找进入开发者模式的方法。
    然后进入手机“开发人员选项”配置页面,华为手机在“设置/系统/开发人员选项”下面,依次打开“开发人员选项”和“USB调试”开关。
    在这里插入图片描述

    这个时候将手机通过数据线链接linux主机,手机上弹出是否允许计算机进行手机调试的页面,如下图,打勾确认即可。
    在这里插入图片描述

    然后linux主机运行adb命令,可以看到连接到linux计算机的Android手机设备。
    在这里插入图片描述

    3. 元素定位与测试用例编写

    有很多童鞋环境搭建好了却没有进行下一步,是因为缺少step by step的资料。 互联网上appium环境准备的资料多如牛毛,但是step by step操作的资料却少了很多。春节前的最后一个工作日事情不是很多,顺便把这一块总结整理一下,分享给需要的人。


    下面所有的操作都是基于你已经准备好前面描述的所有安装部件的情况。

    3.1 操作前的准备

    3.1.1 启动appium server

    命令行中直接运行appium,启动appium服务。

    appium
    

    出现如下图所示的相关信息的时候,表示appium server已经成功启动。
    在这里插入图片描述

    3.1.2 启动DDMS(Android Monitor)

    A N D R O I D S D K H O M E / t o o l s 目 录 下 , 运 行 m o n i t o r 。 或 者 在 你 正 确 设 置 了 A n d r o i d S D K 环 境 变 量 并 生 效 的 情 况 下 , 在 任 意 个 命 令 行 或 者 目 录 下 , 直 接 执 行 {ANDROID_SDK_HOME}/tools目录下,运行monitor。 或者在你正确设置了Android SDK环境变量并生效的情况下,在任意个命令行或者目录下,直接执行 ANDROIDSDKHOME/toolsmonitorAndroidSDK{ANDROID_SDK_HOME}/tools/monitor命令即可。

    ${ANDROID_SDK_HOME}/tools/monitor
    

    如果没有异常的话,会出现如下图所示的界面。
    在这里插入图片描述

    这个时候的界面空空,什么内容都没有。

    如果出现如下图所示的异常,请参照我之前的帖子处理。链接如下:
    linux下Android Monitor启动失败问题

    3.1.3 启动Android模拟器

    运行android studio,依次进入“Configure/AVD Manager”,运行已经配置好的Android模拟器。
    在这里插入图片描述
    这里执行速度视机器性能而定,Android模拟器启动完成以后,回到Android Monitor, 这时候发现左边的devices列表中多了一个Android 模拟器,状态是Online,如下图。
    在这里插入图片描述
    这里要多啰嗦几句。一定要先启动Android Monitor,再启动Android模拟器,否则会出现Android模拟器状态一直是offline的情况。这里我没有深究具体原因,但是在我的linux系统下,如果先启动模拟器再启动monitor的话,这个问题必然出现。

    3.1.4 运行被测试APP

    这里以Android模拟器自带的计算机为例子进行讲解。
    在Android模拟器上运行Calculator程序,只要进入主界面就可以了,如下图所示。
    在这里插入图片描述
    在Android Monitor界面,选中devices列表中的模拟器,然后点击中间那个小手机图标(Dump View Jierarchy for UI Automator),如下图。
    在这里插入图片描述
    信息加载完成以后,模拟器上运行的计算器程序界面展示在了Monitor中,如下图。
    在这里插入图片描述
    从上图中可以看出计算器APP的包名是com.android.calculator2。

    3.1.5 获取App的包信息

    命令行中运行adb shell dumpsys package YOUR_PACKAGE_NAME即可获取对应的包信息。

    adb shell dumpsys package com.android.calculator2
    

    如下图
    在这里插入图片描述
    等会儿编写测试代码的时候,要用到这些信息。

    3.2 获取界面元素并编写测试用例

    3.2.1 获取界面元素

    在Android Monitor上面,每点选一个界面元素,右边就会显示对应的控件的ID,可以直接拷贝控件ID用于在测试用例中识别界面元素,如下图。
    在这里插入图片描述

    3.2.2 编写测试用例脚本

    创建一个名称为Calculator.py的python脚本,内容如下。

    #!/usr/bin/python3
    import selenium
    import time
    import pytest
    from appium import webdriver
    
    my_dc = dict()
    my_dc['platformName'] = 'Android' #平台为Android
    my_dc['platformVersion'] = '7.1.1' #平台版本为7.1.1
    my_dc['deviceName'] = 'Android_SDK_built_for_x86 device' # 取一个机器名字
    my_dc['appPackage'] = 'com.android.calculator2' # 被测试App的包名
    my_dc['appActivity'] = '.Calculator' # 被测试App的主Activity
    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", my_dc) # 链接Appium服务器创建webdriver实例
    
    ###下面的测试用例定义的时候,一定要以test开头,否则pytest不认为是测试用例。
    # 计算器 加法测试用例
    def test_addition():
        driver.find_element_by_id("com.android.calculator2:id/digit_3").click() #点击3
        driver.find_element_by_id("com.android.calculator2:id/op_add").click() #点击+
        driver.find_element_by_id("com.android.calculator2:id/digit_7").click()  #点击7
        driver.find_element_by_id("com.android.calculator2:id/eq").click()  #点击=
        result = driver.find_element_by_id("com.android.calculator2:id/result").text #获取计算结果并赋值给变量result
        assert result == "10"  #计算结果跟预期结果相符
    
    # 计算器 减法测试用例
    def test_subtraction():
        driver.find_element_by_id("com.android.calculator2:id/digit_9").click()
        driver.find_element_by_id("com.android.calculator2:id/op_sub").click()
        driver.find_element_by_id("com.android.calculator2:id/digit_7").click()
        driver.find_element_by_id("com.android.calculator2:id/eq").click()
        result = driver.find_element_by_id("com.android.calculator2:id/result").text
        assert result == "2"
    
    # 计算器 乘法测试用例
    def test_multiplication():
        driver.find_element_by_id("com.android.calculator2:id/digit_9").click()
        driver.find_element_by_id("com.android.calculator2:id/op_mul").click()
        driver.find_element_by_id("com.android.calculator2:id/digit_7").click()
        driver.find_element_by_id("com.android.calculator2:id/eq").click()
        result = driver.find_element_by_id("com.android.calculator2:id/result").text
        assert result == "63"
    
    # 计算器 除法测试用例
    def test_divition():
        driver.find_element_by_id("com.android.calculator2:id/digit_9").click()
        driver.find_element_by_id("com.android.calculator2:id/op_div").click()
        driver.find_element_by_id("com.android.calculator2:id/digit_3").click()
        driver.find_element_by_id("com.android.calculator2:id/eq").click()
        result = driver.find_element_by_id("com.android.calculator2:id/result").text
        assert result == "3"
    

    上面的脚本内容不做详细解释。 仅仅注意下面两点。
    (1)界面元素的定位,使用了 driver.find_element_by_id方法,ID就是上面2.1中获取的界面元素ID。
    (2)测试脚本中引用了pytest库进行测试用例编写。pytest库要求每个测试用例都是以test_开头。

    3.2.3 执行测试用例

    命令行中通过下面的命令执行测试用例。

    pytest calculator.py 
    

    运行结果如下图。
    在这里插入图片描述
    运行过程中,你会看到模拟器的手机界面上,按照测试用例预期的顺序依次点击了各个界面元素,并且得到了预期的测试结果。
    最后,附上,测试用例执行过程中,模拟器界面,以及Appium服务器上的动态效果视频。
    https://v.youku.com/v_show/id_XNTEwMTk5NDI1Mg==.html

    4.Appium自动化测试的headless模式

    通过前面的几篇文章,相信基本上都能够上手appium+python进行android应用的自动化测试工作了。但是在当今DevOps大行其道的日子里,如果要让这种自动化框架在CICD的持续集成环境里面顺利跑起来,可能还是有点问题的。首先,CICD的服务器以Linux居多;其次,Linux服务器一般情况下都是运行在命令行模式下;最后,传统的android emulator运行的时候占用了大量的系统资源。 这个时候,Android Emulator的headless模式就是比较好的选择了。从28.0.25版本开始,Android Emulator支持headless模式运行。这篇文章将带领大家使用Emulator的headless模式。


    4.1 关于Emulator

    我没有研究过Google的意图是什么,竟然在Anndroid SDK下面设置了两个emulator可执行程序。一个是${ANDROID_SDK_HOME}/tools/emulator, 另一个是${ANDROID_SDK_HOME}/emulator/emulator,可能Google有它自己的考虑。这里要说的的是,一般情况下命令行运行android模拟器,用的是${ANDROID_SDK_HOME}/emulator/emulator,我本地linux下验证的时候,${ANDROID_SDK_HOME}/tools/emulator会报各种异常。 为了保证emulator能够正常运行,在设置PATH环境变量的时候,emulator最好要放在tools的前面。

    4.2 关于Headless模式

    网络上有各种关于headless的方法和描述,比如emulator-headless, -no-skin,isHeadless=true等等。在最新的Android Emulator 30.3.5下(注意这里是Android Emulator的版本,不是Android Studio的版本),这些都不靠谱,直接添加参数-no-window即可。

    emulator -avd EMULATOR_NAME -no-window
    

    这个时候你可能会碰到如下图所示的一些类似audio等相关的错误提示,如果被测内容不相关的话,可以忽略。
    在这里插入图片描述

    4.3 关于linux下程序的后台执行

    这个不再赘述,无非就是用&还是用nohup。具体的区别大家自己问问度娘或者狗狗。

    4.4 整体的执行脚本

    这个也很简单,根据正常运行的顺序,执行相关的命令即可。将如下内容写入到shell脚本automation_test.sh中,并赋予其执行权限。

    # 修改/dev/kvm的属主为当前用户,否则因为权限问题启动android模拟器失败
    sudo chown -R ${USER}:${USER} /dev/kvm
    sleep 5s
    # 后台启动appium服务用于监听界面操作,并把相关内容输出到文件appium_out.txt中
    appium > ./appium_out.txt &
    sleep 5s
    # 后台启动android模拟器,并把相关内容输出到文件emulator_out.txt中
    emulator -avd Nexus_4_API_25 -no-window > ./emulator_out.txt &
    sleep 20s
    # 后台运行自动化测试用例,并输出结果到test_result.txt中
    pytest calculator.py > ./test_result.txt &
    

    命令行下直接执行automation_test.sh脚本。
    $ bash automation_test.sh
    执行如下图。
    在这里插入图片描述
    执行过程中,可以看到整个屏幕没有相关界面弹出。执行结束后,目录下多了几个txt文件,查看相关输出文件内容,重点查看测试结果输出文件即可。
    如下图,可见本次执行的4个测试用例全部通过。
    在这里插入图片描述

    展开全文
  • Linux GUI自动化测试工具 -- LDTP

    千次阅读 热门讨论 2020-09-01 09:05:44
    目录 1. 背景 2. 环境 3. 安装和使用 ...GNU LDTP(Linux Desktop Testing Project) 是一个 GNU/ Linux/ Unix 下的 GUI 应用测试工具。支持系统包括:FreeBSD/ Fedora/ Mac/ OpenSUSE/ OpenSolaris/ Wi

    目录

    1. 背景

    2. 环境

    3. 安装和使用

    1)下载地址

    2)Windows下的安装和使用

    3)Linux下的安装和使用

    4. 踩到的“坑”

    5. 参考资料


    1. 背景

    项目需要,研究了一下Linux下的GUI测试工具:LDTP。GNU LDTP(Linux Desktop Testing Project) 是一个 GNU/ Linux/ Unix 下的 GUI 应用测试工具。支持系统包括:FreeBSD/ Fedora/ Mac/ OpenSUSE/ OpenSolaris/ Windows/ Ubuntu等。本文介绍一下LDTP2的环境搭建,基本使用以及在使用中踩的坑。

    2. 环境

    • 操作系统:Ubuntu 18.4/ Window7
    • LDTP: ldtp2 v3.5.1
    • 语言:Python2 >= 2.6; Python3 >= 3.0

    3. 安装和使用

    1)下载地址

    操作系统地址
    Linuxhttps://github.com/ldtp/ldtp2
    Windowshttps://github.com/ldtp/cobra/releases

     

    2)Windows下的安装和使用

    a.双击 CobraWinLDTP-4.0.0.msi,按照提示安装完即可。

    b.在<安装盘>\Program Files (x86)\VMware\CobraWinLDTP目录下,双击 CobraWinLDTP.exe,启动Server端。

    c. 运行-》cmd,输入 Python3,进入Python命令;输入如下命令,如果没有报错,则证明安装成功。

    3)Linux下的安装和使用

    这里有两种方法。

    a. 度娘上都能查到的在线安装方法:

    apt-get install ldtp

    同样的,安装完成后,导入LDTP,如果没有报错则表示安装成功。

    b. 源码安装(这里以作者环境和安装过程为例,均是亲验总结,如有其他环境或问题需要具体分析):

    i. 安装完Ubuntu后,缺省无法ssh连接,会出现报错:Permission denied(publickey, password)。修改方法:

    • 编辑ssh配置文件: # vi /etc/ssh/sshd_config。去掉如下两个参数的注释,修改参数值:
      • PermitRootLogin yes
      • StrictModes yes
    • 重启ssh服务。# /etc/init.d/ssh restart

    ii. 修改apt源。这是由于作者的环境无法直接对接外网镜像源,若能直接连网则可以忽略该步骤。

    • # vi /etc/apt/sources.list。全部替换为本地源,这里列举其中部分源信息

        deb [trusted=yes] http://本地源IP/本地源路径 bionic main restricted universe multiverse

        deb-src [trusted=yes] http://本地源IP/本地源路径 bionic main restricted universe multiverse

    • 更新源后升级apt。# apt update -y

    iii. 修改gsettings。这里需要在Ubuntu系统中进行修改,不能直接ssh连接修改。

    # gsettings set org.gnome.desktop.interface toolkit-accessibility true
    # gsettings set org.gnome.desktop.a11y.applications screen-reader-enabled true

    补充:gsettings的部分命令

    # gsettings list-schemas | grep interface
    # gsettings list-keys org.gnome.desktop.interface | grep toolkit
    # gsettings get org.gnome.desktop.interface toolkit-accessibility

    iv. 安装LDTP

    如若直接按照github上的安装过程,是无法使用的(这里被坑了好久),首先需要安装如下一些依赖包。

    # apt install -y python3-pip
    # apt install -y python3-setuptools
    # pip3 install twisted -i <本地源> --trusted-host <本地源IP>
    # apt install -y python-ldtp

    v. 修改源码。这是因为Python3中已经没有unicode()这个方法了,而LDTP的部分源码是基于Python2进行开发的。为了解决这个兼容性,只能进行源码修改,否则无法获取中文字符。

    # vi /usr/local/lib/python3.6/dist-packages/ldtp-3.5.1-py3.6.egg/ldtp/__init__.py

    将gettextvalue()的返回从unicode()改为str():

    vi. 重启Ubuntu。一定要记得做完上述的修改后,重启操作系统哦~~~

    vii. 基本使用方法同windows。

    • mouseleftclick('frm0', 'btn关闭')              # 点击frm0中的“关闭”按钮
    • gettextvalue('frm0', 'txt0')                       # 获取frm0中文本框txt0中的文本
    • setcursorposition('frm0', 'txt0', 1)           # 将光标放在frm0中文本框txt0的首字符位置

    4. 踩到的“坑”

    1)在Windows中没有启动Server端。出现报错:ConnectionRefusedError: [WinError 10061]

    2)在Windows缺省安装之后,导入LDTP包是正常的,但是使用方法getwindowlist()却出现如下报错:

    TypeError:unsupported operand type(s) for *: 'map' and 'list'

    报错的代码只是一个日志记录,并不影响功能使用,所以将这里注释后,重新导入LDTP包即可。

    3)部分方法在使用时出现有这样的报错:Unable to get editable textText cannot be entered into object. 。暂时还没有找到解决方法,怀疑是由于元件有属性没有设置正确导致的。

    4)按照说明文档中进行远程连接# ldtp -s 时,报错: ModuleNotFoundError: No module named 'xmlrpc_daemon'。暂时没有找到解决办法。不清楚是没有使用对远程连接场景还是确实有错误。

    5. 参考资料

    https://ldtp.freedesktop.org/ldtp-tutorial.pdf

    https://ldtp.freedesktop.org/user-doc/d7/d25/a00182.html#Syntax

    https://www.cnblogs.com/backpacker/p/10945514.html

    https://blog.csdn.net/amy0428/article/details/52041909?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-5-52041909.nonecase&utm_term=linux%E8%87%AA%E5%8A%A8%E5%8C%96%E5%AE%89%E8%A3%85%E5%B7%A5%E5%85%B7  -- 其他工具

     

    展开全文
  • linux系统搭建python+appium自动化测试环境0 前言1 环境准备2 安装centos72.1 本地安装vmware workstation2.2 安装centos73 安装java 9.0.43.1 下载安装包3.2 卸载原open jdk3.3 安装jdk93.3.1 上传安装包3.3.2 解压...
  • Linux下SANE Driver自动化测试工具的设计与实现.pdf
  • 之前在X公司参与测试的项目,整个结构如图所示:我负责第一层Linux服务器产品测试工作(红色标示部分),我到之前的测试流程为:1.数据库准备(远程Linux操作或者使用工具Toad/Navicat对多服务器的Oracle/MySQL测试...
  • 1.适用于linux系统 2.python自动化测试工具 3.一种反向断言方式
  • 安装Chrome浏览器 下载Linux版chrome浏览器,如下图所示,在谷歌浏览器官网下载...测试浏览器是否可用,会调用浏览器并将页面生成截图保存在当前路径 google-chrome-stable --no-sandbox --headless --disable-gpu
  • linux环境下实现python自动化

    千次阅读 热门讨论 2022-04-17 13:29:47
    今天主要介绍 Linux 下的 cron 这个服务,熟练使用它可以让你在工作中省去大部分时间,提高工作效率 一、安装cron 基本上所有的Linux发行版在默认情况下都预安装了cron工具。 即使未预装cron,也很简单,执行几条...
  • 基于嵌入式Linux的输电线路杆塔倾斜度自动化测试系统的设计与实现.pdf
  • USB3.0自动化测试方法

    2018-10-16 11:43:10
    USB3.0介绍 USB3.0测试项目及方案 USB3.0测试方法 Polling.LFPS 信号切换测试码型
  • 一种Linux系统下自动化测试网卡压力的方法.pdf
  • Squish(简称小青蛙),支持针对Qt,QML,Qt Quick,Qt Webkit,Qt WebEngine,JavaSwing,AWT,SWT,RCP,JavaFx,本机Windows和macOS,移动iOS和台式机,嵌入式和移动平台上的GUI自动测试。Android,Web / HTML5应用...
  • Linux自动化测试执行管理工具的设计与实现.pdf
  • 基于LINUX平台的自动化测试的研究与应用.pdf
  • 基于LINUX平台的自动化测试的应用与探索.pdf
  • jmeter作为一款开源轻便的接口测试工具,极大的方便了我们的接口自动化测试工作;但是如何把jmeter和其他工具结合起来,实现自动化运行,释放部分人力以提升效率,是我们需要去研究的方向,并且怎么样才能达到轻便化...
  • Linux平台下CT机架软件系统自动化测试实现.pdf
  • 自动化测试】开展自动化测试的过程

    千次阅读 热门讨论 2021-05-13 21:37:33
    文章目录1)自动化测试需求分析1.1 如何确定系统是否适合做自动化测试?周期较长:稳定系统:脚本可复用:*被测系统适合怎样的自动化测试?2)调研测试工具、测试框架2.1 框架的选择2.1.1 TestNG主要特点:TestNG的...
  • 1.3 手工测试与自动化测试的比较 1.4 手工测试的局限性与自动化测试的优势 1.5 自动化测试介入的场景 1.6 自动化测试的流程 1.7 适合自动化测试的工具 2 - 常用的自动化测试工具 2.1 QTP 2.2 Selenium(Webdriver) ...
  • 在上一篇章就软件自动化测试当中最简单也是最常用接口自动化测试进行了一个比较完整性的实战。可是当我们投入到实际工作应用中就会发现,虽然接口测试很有效也很容易推广开来,但是很多时候真正需要测试验证的不仅仅...
  • 大家好,前面我们学习了通过 selenium 实现 WEB 自动化测试,像这种针对浏览器这样的,我们称之为 B/S 架构模式的测试任务。随着移动互联网的到来与蓬勃发展、手机APP使用的频繁、应用的增多,所以对于手机APP的测试...
  • 自动化测试过程中,不可缺少的一部分就是 "测试报告" 。在前面的接口自动化测试的章节,其实已经讲了一些,最终是使用 "HTMLTESTRUNNER" 生成的测试报告。今天依然用其生成一个 "WEB自动化登录Case" 的测试报告。....
  • App 自动化测试

    千次阅读 2022-06-08 17:26:12
    App 自动化测试
  • Linux下的自动化工具xdotool

    千次阅读 2019-11-30 19:37:19
    毕竟都Ubuntu了,还不允许更自动一些吗。结合语音识别,就可以懒到家了。虽说Python是把瑞士军刀,但不编程,用点小工具也是不错的选择。只是它缺少一些图形识别功能,否则还真是Linux下的按键精灵。 安装还是如此...
  • linux自动化运维ansible

    千次阅读 2022-04-23 16:12:16
    linux自动化运维ansible一、概述二、安装1、配置安装源2、安装3、查询版本信息三、设置主机清单1、添加ip及账号信息2、修改主配置文件3、测试是否成功四、模块应用1、模块2、运行临时命令3、剧本编写 一、概述 使用...
  • 自动化测试介绍及分类 什么是自动化测试? 自动化测试是软件测试活动中一个重要的分支和组成部分,即利用工具或脚本达到测试目的,没有人工或者极少人工参与的软件测试活动称为自动化测试. 自动化测试的优势有...
  • 行业分类-设备装置-Linux平台下CLI模块的代码自动化测试方法.zip
  • 自动化测试系列(三)|UI测试

    千次阅读 2021-09-26 10:50:43
    UI 测试是一种测试类型,也称为用户界面测试,通过该测试,...在上次的自动化测试系列(二)中为大家大体介绍了API测试的概念及在猪齿鱼中的实践展开,本文主要围绕UI测试进行概念介绍及Choerodon中的实践展开。 下面.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 326,527
精华内容 130,610
关键字:

linux 自动化测试