linux下Appium+Python移动应用自动化测试实战---3.手把手教你定位元素编写测试用例

linux下Appium+Python移动应用自动化测试实战—3.手把手教你定位元素编写测试用例



前言

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


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

1. 操作前的准备

1.1 启动appium server

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

appium

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

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

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

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

1.3 启动Android模拟器

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

1.4 运行被测试APP

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

1.4 获取App的包信息

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

adb shell dumpsys package com.android.calculator2

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

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

2.1 获取界面元素

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

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_开头。

2.3 执行测试用例

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

pytest calculator.py 

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

猜你喜欢

转载自blog.csdn.net/lipeixinglive/article/details/113783193