一、app测试与web测试的区别:
兼容性:对不同的设备进行测试
安装,卸载:
横屏,竖屏:
干扰测试:来电干扰,临时切换到后台,网络环境的切换(wifi-流量环境)
埋点:主流的电商类,社交类app(只要有流量)都有埋点,埋点用于记录用户对app的操作日志。
测试时要根据埋点的技术实现来指定测试方法。
弱网:模拟2,3,4,5G等不同的网络带宽下app是否可以正常的使用
二、app与web应用的区别:
web应用:浏览器(客户端)+web应用服务器+数据库服务器 B/S架构
app应用:android|ios(客户端)+web应用服务器+数据库服务器 C/S架构
web应用客户端,是通过浏览器发送http请求,得到响应,响应的内容为html文本,通过浏览器解析html得到页面。
app应用,所有的页面(界面元素,布局)保存手机上,但具体的数据保存在服务端,通过客户端向服务端发起http请求,服务端响应json数据,客户端解析json并填充到页面中
技术区别:web的客户端解析html,app,package+activity
activity:对应app中的一个页面,主要包括页面的生命周期管理+页面元素布局
三、adb(安卓调试桥)
用于在pc(开发|调试机)与设备之间建立通讯。
常用命令包括安装,卸载,查看包,查看activity,查看设备android版本号
以及发送shell
四、monkey
1.用于做稳定性测试,向手机发送伪随机事件。
monkey是一个命令工具,在每个Android设备上自带的。
monkey主要包含11类事件,常用事件:
触摸事件Touch,手势事件 motion,旋转rotat,启动activity
adb shell monkey [-option] counter
adb shell monkey 100
-v monkey日志级别 1-3级,日志,重点关注是否异常
-s 伪随机种子值,用于根据该值重复执行相同的事件,常用于错误重现。
-- throttle 毫秒数,多个事件之间的时间间隔
--pct-touch 百分比,事件占比
--ignore-crashes忽略宕机异常,继续发送随机事件
五、稳定性测试
1.需求分析,了解app的主要功能,以及主要的操作
2.明确apk的包名,启动页面
3.设计具体事件生成
adb shell monkey -p 包名 --pct-touch 50 --pct motion 20 --pct-rotation 10
--ignore-timeouts -v -v 1000 1>xxx.log 2>error.log
monkey脚本,用于在指定的设备,指定的app,指定的页面(activity),指定的位置坐标(x,y),执行指定的动作(点击,发送字符串),本质上是monkey提供的一组API,通过编写脚本调用函数实现更加精准的事件。
改脚本的格式为:
头部代码
type = raw events
count = 1
speed = 1.0
主体代码
start data >>
打开某个页面
LaunchActivity(包名,activity名)
在某个坐标上执行某个动作
Tap(x,y)
UserWait(2000)
DispatchString(xxx)
脚本写好后,必须放到设备上才能执行,执行脚本的命令,就是monkey命令
adb shell monkey -f 脚本名 -v -v [使用脚本的方式 -s --pct-xxx]
--ignore-xxx count 1>xxx.log 2>error.log
六、app自动化测试
Appium
Appium-Client(pip install appium-python-client)发消息给Appium-Server(Appium-desktop)
Appium-Server转发给设备上的bootstrap.jar,由bootstrap.jar调用手机uiautomatic工具执行具体的app的操作
完成以上流程,需要创建一个server到设备上的session,为了建立该连接,需要制定一个caps参数,该参数是一个json格式的,必须的参数{platform:android | ios, version:7.1.2, device:127.0.0.1:62001}
七、appium自动化测试原理
客户端:pip appium-python-client (安装在pc上的)
服务端:下载的appium desktop(安装在pc上的)
1.从客户端连接到服务端
2.从服务端连接到设备(需要提供,平台类型,平台的版本号,设备的地址,app包名,app activity名)
caps就是从服务连接到设备的json格式的需要提供的参数
webdriver.Remote("http://localhost:4723/wd/hub"<服务器地址>,caps)
localhost == 127.0.0.1 == 本机
八、常用的api命令
1.文件读取写入
adb push <local><remote>
eg:
adb push c:\Users\Desktop\kyb.txt /sdcard
2.将文件从设备读取到pc
adb pull <remote><local>
eg:
adb pull /sdcard/server.log c:\Users\Desktop
注意:由于权限问题,不能直接pull到电脑磁盘根目录,否则会报错
3.屏幕截图
adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png c:\Users\Desktop
4.adb服务启动和关闭
adb kill-server
adb start-server
5.元素定位
八种定位方式:id,name,class name,tag name,link text,partial link text,xpath,css selector。其中id,name,class name,tag name是根据元素的标签或元素的属性来进行定位;link text,partial link text是根据超链接的文本来进行定位;xpath为元素路径定位;css为选择器定位(样式定位)。
6.TouchAction(按压,长按,点击,移动,暂停)
对应操作的方法:
短按:press() 按压一个元素或坐标
TouchAction(driver). press(x,y)
长按:longpress() 比按压多个一个duration(按压时间)时间参数,以毫秒为单位
TouchAction(driver).longpress(x,y,1000)
点击:tap()
移动:move_to()
暂停:wait() 等待时间,单位毫秒
释放:release() 结束屏幕上的一系列动作的命令操作
执行:perform() 讲执行的操作发送到服务器的命令操作
组合示例:
TouchAction(driver). press(x,y) .wait(1000).move_to(x2,y2).release() #点击->等待1000毫秒->移动->释放
7.MultiAction多点触控
在网页中我们经常使用缩放操作来便利的查看具体的信息,在appium中使用MultiAction多点触控的类来实现
MultiAction是多点触控的类,可以模拟用户多点操作。主要包含加载add()和执行perform()两个方法. MultiAction一般和TouchAction结合使用,故需要导入以下模块:
from appium.webdriver.conmmon. touch_action import TouchAction
from appium.webdriver.conmmon. multi_action import MultiAction
使用方法如下:
加载:add()
add(action1,action2,…)将touchaction的对象添加到MultiAction中
action1,action2描述一个手指要执行的动作
例如:
action1=TouchAction(driver)
Action1.press(x,y)wait(1000).move_to(x1,y1).release()
MultiAction(driver).add(action1)
执行:perform()
perform()执行存储在对象中的操作,结合add()使用,
例如:
action1=TouchAction(driver)
Action1.press(x,y)wait(1000).move_to(x1,y1).release()
MultiAction(driver).add(action1)
MultiAction(driver).perform()