一、移动端测试知识概览
1、移动端测试是什么?
移动端测试是指对移动应用进行的测试,即实体的特性满足需求的程度。
2、移动端测试分类
A、app功能测试
1)业务逻辑正确性测试
产品文档
2)兼容性测试
a.系统版本
b.分辨率
c.网络情况
3)异常测试
a.热启动应用
b.网络切换&中断恢复
c.电话&信息中断恢复
4)升级&安装卸载测试
5)健壮性测试
a.手机资源消耗
b.流量消耗
c.崩溃恢复等测试
B、app自动化测试
通过场景和数据的预设,把以人为驱动的测试行为转化为机器执行的一种过程.
⚠️ 并不是所有功能都能进行自动化
C、app安全测试
通过安全测试技术,保证app尽可能的不存在安全漏洞.
二、node的安装
1、找到node路径:
2、点击node安装包进入
3、进行下一步
4、选择路径
5、进行下一步,进入
6、等待
7、完成
8、运行cmd,查看是否安装成功(环境自动配置)
三、Appium的初步使用
1、找到Appium压缩包,解压到不是汉字的目录下
2、安装包里找到Appium.exe快捷键到桌面
3、点击Appium,进入
4、查看配置信息
5、点击启动服务进入
6、点击启动检查会话
7、对数据进行填写
desired_caps常用参数:
platformName 平台的名称:iOS, Android, or FirefoxOS
platformVersion 设备系统版本号 adb shell getprop ro.build.version.release(获取版本号)
deviceName 设备号 IOS:instruments -s devices,Android: adb devices -l
appActivity 启动的Activity
appPackage 启动的包
adb shell dumpsys window | findstr mCurrentFocus(查询当前应用程序的包名和启动项)
8、点击启动回话,进入
9、进行录制
10、完成录制
11、复制录制生成的代码
代码:
# This sample code uses the Appium python client
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "HUAWEI_MLA_AL10"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
el1 = driver.find_element_by_accessibility_id("搜索")
el1.click()
driver.quit()
如果报错,安装pip install Appium-Python-Client
12、运行查看代码,核对是否正确。
四、APP元素定位操作
1、
2、通过id定位
方法:find_element_by_id(id_value) # id_value:为元素的id属性值
业务场景:
a.进入设置页面
b.通过ID定位方式点击搜索按钮
代码:
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "HUAWEI_MLA_AL10"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
# id
aa=driver.find_element_by_id("com.android.settings:id/search")
aa.click()
结果:
2、通过class定位
方法:find_element_by_class_name(class_value) # class_value:为元素的class属性值
业务场景:
a.进入设置页面
b.点击搜索按钮
c.通过class定位方式点击输入框的返回按钮
代码1:
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "HUAWEI_MLA_AL10"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
# class
# 获取元素文本内容
aa=driver.find_elements_by_class_name("android.widget.TextView")
for i in aa:
print(i.text)
结果:
代码2:指定点击其中一个
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "HUAWEI_MLA_AL10"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
aa=driver.find_elements_by_class_name("android.widget.TextView")
aa[1].click()
结果:
3、通过xpath定位
方法:find_element_by_xpath(xpath_value) # xpath_value:为可以定位到元素的xpath语句
*** android端xptah常用属性定位:
1. id ://*[contains(@resource-id,'com.android.settings:id/search')]
2. class ://*[contains(@class,'android.widget.ImageButton')]
3. text ://*[contains(@text,'WLA')]
*** 模糊定位 contains(@key,value): value可以是部分值
业务场景:
a.进入设置页面
b.点击WLAN菜单栏
代码:
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "HUAWEI_MLA_AL10"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
# xpath
aa=driver.find_element_by_xpath("//android.widget.TextView[@content-desc='搜索']")
aa.click()
结果:
4、WebDriverWait 显示等待操作
在一个超时时间范围内,每隔一段时间去搜索一次元素是否存在,
如果存在返回定位对象,如果不存在直到超时时间到达,报超时异常错误。
方法:WebDriverWait(driver, timeout, poll_frequency).until(method)
参数:
a.driver:手机驱动对象
b.timeout:搜索超时时间
c.poll_frequency:每次搜索间隔时间,默认时间为0.5s
d.method:定位方法(匿名函数)
业务场景:
a.进入设置页面
b.通过ID定位方式点击搜索按钮
代码:
from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait # 导入WebDriverWait类
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "HUAWEI_MLA_AL10"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
# 超时时间为30s,每隔1秒搜索一次元素是否存在,如果元素存在返回定位对象并退出
search_button = WebDriverWait(driver, 30, 1).until(
lambda driver: driver.find_element_by_id("com.android.settings:id/search"))
search_button.click()
driver.quit()
结果:
5、APP元素信息操作
发送数据到输入框:方法:send_keys(vaue) # value:需要发送到输入框内的文本
业务场景:
a.打开设置
b.点击搜索按钮
c.输入内容123
代码:
from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait # 导入WebDriverWait类
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "HUAWEI_MLA_AL10"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
# 点击搜索按钮
driver.find_element_by_id("com.android.settings:id/search").click()
# 定位到输入框并输入123
driver.find_element_by_id("android:id/search_src_text").send_keys("123")
结果: