移动应用测试(Python+Appium+雷电模拟器)

一、所需软件包

一、node.js(v20.1.1)

二、Android SDK(24.4.1版本)

三、Python(3.10)

四、PyCharm(2023.3.2)

五、Appium(1.21.0)

六、雷电模拟器(雷电9)

若不想单独去下载,想直接获取所有安装包,请访问百度网盘链接提取:https://pan.baidu.com/s/1LSzazfQ2PbdiMLfZ4WiWAQ?pwd=n4vi

二、环境配置

2.1环境配置之Node.js

       在官网选择对应版本下载:https://nodejs.org/en/download/,如图所示。.msi 是一种 Windows 安装程序文件,而 .zip 是一个压缩包,解压即可,不需要安装。这里选择.msi格式(64位)。

                 

       完成下载后,双击.msi文件进行安装,安装成功后打开命令提示符窗口(win+R,再输入cmd回车)。输入node -v 获得node.js的版本信息则是安装成功,如图所示。(注意是node(空格)-v)。

                        

2.2环境配置之Android SDK

①下载,解压Android SDK

    进入Android中文网 http://www.androiddevtools.cn/,点击SDK Tools,点击android-sdk_r24.4.1-windows.zip下载压缩包并解压。如图所示。

②下载必要包

    解压SDK到本地后,进入SDK目录,如图所示。双击启动SDK Manager.exe。点击Deselect All,然后勾选如图所示的包选项,点击Install 3packages...下载SDK必要的包。

③配置SDK环境变量

1)成功安装后Android SDK的根目录下应该同时具有了tools和platform-tools两个目录。

2)设置 ANDROID_HOME 系统变量(没有请新建)为Android SDK根目录 路径(类似JAVA_HOME)如图所示。

④把 Android SDK 路径下的tools 和 platform-tools 两个目录路径加入到系统环境变量 Path。如图所示。

                                       

⑤ 验证Android SDK环境

    在终端(cmd)输入命令 adb ,回车,输出如下 adb 版本和帮助信息说明环境配置成功(只截取了一部分,后面还有很长),如图所示。

2.3 环境配置之Python

①下载安装文件: https://www.python.org/downloads/,这里选择Python 3.10.0版本,点击Windows installer(64-bit)下载Python安装程序。安装时选择Add Python 3.10 to PATH 自动配置Python环境变量。然后点击Install Now进行安装。

                

                

                 

②打开命令提示符窗口(win+R,再输入cmd回车),输入python并回车,出现以下类似信息即为安装成功。如图所示。

③下载PyCharm:   

https://www.jetbrains.com/pycharm/download/other.html,这里选择2023.3.2版本(其他版本亦可)。如图所示。

  

2.4环境配置之Appium

①下载安装文件https://github.com/appium/appium-desktop/releases/tag/v1.21.0(开启代理打开网址)MAC请下载dmg(这里下载1.21.0版本)

  

②直接双击appium-installer.exe文件安装就好,桌面会生成一个Appium的图标,此时已经可以通过Appium在桌面快捷方式启动Appium桌面应用程序。

                   

③配置Appium环境变量:

   找到上一步安装Appium指定的安装路径(右击桌面的Appium图标,打开文件所在位置可找到安装路径),如图所示。

            

将该路径下的Appium加入环境变量Path,如图所示。

               

④安装appium-python-client

启动终端(cmd)输入

pip install appium-python-client==2.11.0 -i  https://pypi.tuna.tsinghua.edu.cn/simple

,出现提示Successfully installed即成功。(终端输入

pip list

进行检查,如果出现下图中的WARNING提示,可按照要求更新或者不管),如图所示。 

2.5 环境配置之模拟器

官网安装雷电模拟器:

安装网址:https://www.ldmnq.com/,选择雷电9(雷电5也可以)下载,如图所示。(安装过程中如果提示安装失败,请以管理员身份运行

            

三、测试示例

3.1启动雷电模拟器

以学习通为测试对象,打开雷电模拟器,下载学习通。然后启动学习通,登录进入主页面。

 

                                           

3.2启动Appium

双击打开Appium,点击Start Server v1.21.0,开启Appium。

                               

点击右上角的搜索符号,开启Appium Server。

             

这里需要编辑一个用于连接模拟器并打开学习通的参数配置(Desired Capabilities),具体有四个核心的参数,分别为platformNamedeviceNameappPackageappActivity。 

        

下面介绍如何获取到这些参数

3.3配置Capability

3.3.1platformName

由于雷电模拟器是Android,所以platformName为Android

3.3.2deviceName

按住win+R键打开cmd窗口,输入

adb devices

结果如图所示,所以deviceName即为emulator-5554,也就是雷电模拟器的设备名。

                                    

3.3.2appPackage和appActivity

输入以下命令

adb shell dumpsys activity | findstr "mResume" 

(Android 8.1之下版本使用

adb shell dumpsys activity | findstr "mFocus"

)查看学习通应用的appPackage和appActivity(必须保证雷电模拟器的学习通应用程序处于开启状态)如图所示。appPackage为com.chaoxing.mobile,appActivity为.main.ui.MainTabActivity

所以最终配置如下:

 

这里多设置了一个noReset,这个参数表明不停止应用程序和清除应用程序数据。

点击Start Session,等待一段时间(Appium会驱动雷电模拟器重启学习通,如果学习通处于黑屏状态导致连接失败,退出学习通,重新点击Start Session连接一次应该就可以了)如果出现以下界面,表示连接成功。

  

打开PyCharm,创建名为MobileAppTestProject的项目,新建一个名为XuexitongTest的python文件。如图所示。

          

输入以下测试脚本,点击PyCharm右上角的运行符号,执行测试脚本(确保Appium和雷电模拟器处于开启状态,脚本才能执行成功),脚本会驱动Appium自动打开学习通并依次点击“我”和“待办事项”,完成自动化测试。

from appium import webdriver
import time
from selenium.webdriver.common.by import By

# Appium Desired Capabilities
caps = {
    "platformName": "Android",
    "deviceName": "emulator-5554",
    "appPackage": "com.chaoxing.mobile",
    "appActivity": ".main.ui.MainTabActivity",
    "noReset": True
}
# 与 Appium server 建立连接
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
# 等待页面加载,可以根据实际情况调整等待时间
driver.implicitly_wait(10)
# arrange
expected = "待办事项"
# act
# 1.点击“我”
driver.find_element(By.XPATH, "//*[@text='我']").click()
time.sleep(2)
# 2.进入"待办事项"
driver.find_element(By.ID, "com.chaoxing.mobile:id/tvTitle").click()
time.sleep(2)
# 3.获取测试结果
actual = driver.find_element(By.ID, "com.chaoxing.mobile:id/tvTitle").text
# 断言
assert actual == expected, "实际值与期望值不相等"
print("测试通过")
# 关闭应用程序和驱动
driver.quit()

  

至此,移动应用测试环境配置成功。下面将介绍如何使用Appium。

四、Appium使用

4.1GUI说明

      当Appium连接雷电模拟器成功后,应用程序的屏幕截图(快照视图)将出现在左边。如图所示。  可以在屏幕快照视图中使用鼠标来点击各种UI元素,将会看到它们突出显示。

                                      

   窗口的中间是应用程序的层次结构, 表示为XML。如图所示。可以通过单击它树节点,或者通过点击屏幕快照视图中的元素来导航这棵树 然后它们在视图中会被强调显示。在应用层次结构中会直接将元素的id也就是resource-id值标记在树上,这对于 Appium定位元素很方便,可以快速看到 元素是否有id。

                                 

  当一个元素被突出显示时,它的信息会出现右侧的元素信息视图中。如图所示。这个细节视图包括对元素的潜在操作,以及元素属性的表。这些属性将决定 Appium定位元素的策略。

                                

以下是对于Appium上面操作栏的初步说明。

 

4.2Appium+Python常用API

 4.2.1、驱动初始化及基础操作

webdriver.Remote(command_executor, desired_capabilities): 初始化 Appium 驱动。

driver.quit(): 关闭应用程序和驱动。

4.2.2、元素定位及操作

driver.find_element(by, value): 根据指定的定位方式和值找到单个元素。

driver.find_elements(by, value): 根据指定的定位方式和值找到一组元素。

element.click(): 点击元素。

element.send_keys(text): 向元素发送文本。

4.2.3、元素等待

time.sleep(seconds):强制等待,无论元素是否已准备好,都会等待指定的时间后执行 后续操作。

driver.implicitly_wait(seconds): 隐式等待,设置全局等待时间。在查找元素时等待一定的时间,如果在规定时间内找到了元素,则立即执行后续操作,否则等待超时后抛出异常。

WebDriverWait(driver, timeout).until(expected_conditions.condition):显示等待,在特定条件下等待一定时间,直到条件满足或等待超时。

4.2.4、页面导航

driver.get(url): 打开指定的 URL。      

driver.back(): 返回上一页。        

driver.forward(): 前进到下一页。

4.2.5、屏幕滑动与滚动

driver.swipe(start_x, start_y, end_x, end_y, duration): 在屏幕上执行滑动操作。

driver.scroll(origin_element, destination_element): 在页面上执行滚动操作。

对于滑动部分,若不理解,可以参考我找到的一篇博客(很详细)Appium + Python自动化测试学习之六:swipe滑屏操作实例-CSDN博客

4.3测试的注意事项

      结合我自己使用Python+Appium+雷电模拟器的一些经验,以下是我在进行测试的过程中的一些经验之谈(注意事项

4.3.1、对于元素定位

      一般来说,我自己测试的过程中,大部分的点击代码都是使用页面上的Text文本(实在不行就使用绝对的xpath定位,前提是你能接受很长的一串xpath路径字符串)和少部分的ID进行定位。当然我很少选择xpath是迫不得已(一般来说文本定位都能够点得到)。对比如图所示。

使用文本:

4.3.2、对于Appium的使用

       第一,对于本博客所使用的Appium有个不方便的点,就是雷电模拟器上的应用的页面切换不会在Appium中实现实时的同步更新,需要手动的去点击更新才能更新页面。

       第二,就是每次执行Python脚本运行测试的时候,会自动断开Appium与雷电模拟器的连接(我每次执行完Python脚本,再次在Appium中点击刷新的按钮时,会提示连接错误,需要退出再次重连),所以建议元素定位时,一次性都写完脚本(千万别写一行语句,跑一次脚本,不然重连很费时间

        第三,当运行Python脚本进行测试的时候,建议先在雷电模拟器中退出当前的应用,否则可能测试时出现黑屏一直无法进入应用的情况(我觉得很可能是雷电模拟器的老毛病-->不稳定),感兴趣可以使用其他的模拟器(夜神模拟器)尝试。

        

  • 22
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值