目录
1. 测试点
2. 缓存
2.1 什么是缓存
2.2 缓存管理的适用环境
3. 适配测试
3.1 为什么需要做适配测试
3.2 适配测试的基础测试点
3.3 适配测试的方法
4. 云测试
4.1 为什么需要云测试
4.2 云测试的基本流程
4.3 云测试主要主要解决的问题:兼容测试、单机调试
5. 性能测试
5.1 移动端
5.2 移动端和服务器端的性能指标
5.3 辅助工具详解
5.4 perfdog
5.5 耗电量测试
5.6 相关命令
6. App抓包
6.1 Fiddler 的使用
6.2 移动端抓包\微信小程序\微信公众号
7. SDK 工具介绍
7.1 SDK目录介绍
8. 调试命令
8.1 am
8.2 pm
8.3 Dumpsys
9. 安全工具介绍
9.1 安全工具
10. monkeyrunner
10.1 什么是monkeyrunner
10.2 monkeyrunner的作用
11. monkey
11.1 什么是monkey
12.Uiautomator
12.1 什么是Uiautomator
13. 自动化测试
13.1 相关文章(概念,框架演示模式,效率提升方案)
13.2 概念
13.3 本质
13.4 过程
13.5 UI自动化测试的前提条件
13.6 不适合做UI自动化测试的软件产品
13.7 最佳实践场景
14. Appium
14.1 Appium概念
14.2 特性
14.3 Appium是由nodejs的express框架写的 Http Server
14.4 Appium 环境搭建
14.5 查找页面元素,与selenium一致
14.6 超控页面元素
14.7 xpath
14.8 Appium实战
14.9 简单的架构
14.10 自动化用例设计
15. 测试全栈工具
15.1 UI自动化工具和接口自动化测试工具
15.2 单元测试工具
15.3 性能测试工具
15.4 安全测试工具
功能(正向)
异常(例外)
性能
安全
用户体验
用例的写法
简洁,测试点覆盖全面
缓存
蓝牙(可穿戴设备,特别关注,注意硬件测试有可能是单个硬件的故障导致测试不通过)
缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据。如果找到了则直接执行,找不到的话则从内存中找。
由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。
Android缓存主要从手机与服务器网络交互角度考虑,采用缓存可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览。
(1)提供网络服务的应用
(2)数据更新不需要实时更新,但是哪怕是3-5分钟的延迟也是可以采用缓存机制。
(3)缓存的过期时间是可以接受的(不会因为缓存带来的好处,导致某些数据因为更新不及时而影响产品的形象等)
(4)一定程度上可以支持离线浏览(或者说为离线浏览提供了技术支持)
分辨率UI问题;
前置摄像头位置对ui的影响;
不同的厂商会选择不同的硬件,硬件驱动也可能会出现问题;
Android API 的问题,比如高版本API废弃了低版本的API,如果还是用低版本的API开发,在低版本下运行,就会造成程序的崩溃;
厂商定制的系统,会围绕硬件的特性对系统API进行改动,造成使用标准API接口的应用程序在深度定制的系统上无法兼容。
安装\卸载、UI、蓝牙、连网等等与硬件相关的功能点。
(1)明确确应用运营方案,明确用户群体,随着应用的用户数不断增加,逐步拓展需要适配的机型。无需在app首次发布前就适配大量机型(app首次发布往往是在验证产品的需求是否合理,验证产品是否是用户真正需要的东西,可以说发布的app就是为了改良的),这样做既影响产品发布速度,又浪费金钱。
第一期、计划适配哪些机型
第二期、计划适配哪些机型
….
第N期、计划适配哪些机型
备注:
在前二期可以借助云测试,适配部分主流机型
注意:不同用户群体所倾爱的手机不同(例如:年轻mm偏爱oppo,IT人士小米较多)
(2 )确认适配机型的型号,系统类型以及分辨率
根据适配统计中的信息(国内应用建议参考友盟),确认要覆盖测试的手机厂商、系统、分辨率、屏幕大小等信息确认需求,通过排列组合即可确认适配顺序和目标。
具体实施方法:
采购 (根据淘宝,京东等电商统计的手机销量排名购买)
内部协调 (可以采用租赁内部员工手机的方式)
租用 (专业手机租赁机构)
云测试(推荐,相对成本较低)
购买二手手机
外包
备注:外包app的测试有两种类型
甲方提供适配机列表和适配手机(***公司为中国移动开发的某款app);
甲方通过给乙方酬劳的方式进行适配工作。例如:合同中指定App需在10款手机中完成适配。在此之外每多出一部手机适配,甲方就需额外支付一定的费用。
移动开发者面临着多终端时代的碎片化挑战,相对苹果单一的终端,Android设备碎片化更加严重,多种型号款式、多样的分辨率、加之设备自动化测试稳定性差,都让开发者头疼不已,在此背景下产生了移动云平台。
简单的说,云平台就是为应用提供商提供真机来对应用进行测试,基本流程如下:
应用提供商把apk通过网络上传至云平台
>云平台将apk安装在自己平台提供的真机上
>通过技术手段对apk进行测试并生成测试报告
>云平台将测试报告反馈给应用提供商
Testin
开始测试 https://www.testin.cn/
百度云 http://mtc.baidu.com/
腾讯云 http://wetest.qq.com
https://data.qq.com/product/mta数据统计中心
Apk(重点)、浏览器、微信公众号,微信小程序
https://blog.csdn.net/liwenxiang629/article/details/109527637
https://blog.csdn.net/liwenxiang629/article/details/119421594
https://blog.csdn.net/liwenxiang629/article/details/119211587
https://blog.csdn.net/liwenxiang629/article/details/118932940
adb shell am start -S -W [packageName]/[activiytName]
LaunchState:启动模式,上诉启动模式为冷启动
WaitTime:系统启动应用耗时= TotalTime +系统资源启动时间(单位 ms )
TotalTime:应用自身启动耗时=该 Activity 启动时间+应用 application 等资源启动时间(单位 ms )
Google chrome 调试webview
chrome://inspect/#devices
adb shell am start -S -W
com.smzdm.client.android/com.smzdm.client.android.app.WelComeActivity
Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 web调试的利器。
官网下载地址:http://www.telerik.com/download/fiddler
https://blog.csdn.net/liwenxiang629/article/details/114366106
(1)常用命令:
adb: adb shell命令 /system/bin
(-s\install\uninstall\start-server\kill-server)
常用命令ls |more
按Enter键:翻屏
Logcat adb logcat> file adb shell logcat|grep ***
(2)adb通过wifi连接手机
1. 使用USB数据线连接设备
2. 命令输入adb tcpip 5555 ( 5555为端口号,可以自由指定)。
3. 断开 USB数据
4. 再命令输入 adb connect <设备的IP地址>:5555
5. adb shell
Thread
File Explorer)
(3)tools\mksdcard.exe 创建模拟器中sdcard的镜像文件
\lint.bat 检查源码,发现潜在的问题
\proguard 代码混淆
http://blog.csdn.net/catoop/article/details/47208833
build-tools\build number\aapt.exe 即Android Asset Packaging Tool,该工具可以查看,创建, 更新ZIP格式的文档附件(zip, jar, apk)
aapt dump badging < file.apk>
http://blog.csdn.net/hytfly/article/details/49364241
zipalign.exe 对apk文件进行存档对齐的
优化工具,目的是使所有的未压缩数据都从文件的开始位置以指定的
对齐方式排列
(4)GPU呈现模式分析(重要)
主要反映应用的卡顿现象
性能分析工具,启动 tools\monitor.bat
Heap 关注:虚拟机的堆 ,hprof文件用mat分析
Allocation tracker关注:对象分配的内存
TraceView 关注:方法的运行时间
需要开发加debug代码,android.os.Debug.startMethodTracing();和android.os.Debug.stopMethodTracing();
在/sdcard目录中生成trace文件
http://blog.csdn.net/guchuanhang/article/details/51181716
Systrace 关注:方法以及系统方法占用的cpu时间
http://blog.csdn.net/hfreeman2008/article/details/53538155
两个概念
surfaceflinger http://blog.csdn.net/xuesen_lin/article/details/8954508
http://blog.csdn.net/w401229755/article/details/38420191
binder
http://blog.csdn.net/cauchyweierstrass/article/details/50701102
卡顿的主要原因
1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿;
2.布局Layout过于复杂,无法在16ms内完成渲染;
3.同一时间动画执行的次数过多,导致CPU或GPU负载过重;
4.View过度绘制,导致某些像素在同一帧时间内被绘制多次,从而使CPU或GPU负载过重;
5.View频繁的触发measure、layout,导致measure、layout累计耗时过多及整个View频繁的重新渲染;
6.内存频繁触发GC过多(同一帧中频繁创建内存),导致暂时阻塞渲染操作;
7.冗余资源及逻辑等导致加载和执行缓慢;
8.臭名昭著的ANR
am全称activity manager,使用am可以模拟各种系统的行为,例如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等等。
例子 应用启动时间
adb shell am start -S -W [packageName]/[activiytName]
com.android.calculator2/.Calculator
pm全称package manager,你能使用pm命令去模拟android行为或者查询设备上的应用等。
pm list packages
dumpsys | grep "DUMP OF SERVICE" //获得可查询的信息
dumpsys cpuinfo | grep your app package
Drozer
https://labs.mwrinfosecurity.com/tools/drozer/
代码混淆 http://www.cnblogs.com/classic/archive/2011/04/27/2030234.html
腾讯金刚 ,扫描常见android 漏洞
https://service.security.tencent.com/kingkong
是SDK自带的自动化测试工具
核心:点击像素坐标的方式进行模拟用户操作
脚本语言:jython
Monkeyruner脚本可以支持安装卸载应用、进入任一模块、点坐标事件、按键事件、编辑文本、循环测试、截图对比(缺陷)等操作
通过HierarchyViewer识别页面元素Id,但是速度太慢
Money就是一组随机事件流
adb shell monkey -v -p your.package.name 500
com.android.calculator2
http://blog.csdn.net/gzh0222/article/details/7222612
(1)Android 4.1 SDK中可以使用uiautomator 用来做UI测试。
路径 sdk\platforms\android-24
(2)SDK目录\tools\uiautomatorviewer.bat,一个图形界面工具来扫描和分析应用的UI控件,使用其抓取页面元素
SDK目录\ platforms\android-17\ uiautomator.jar,一个测试的Java库,包含了创建UI测试的各种API和执行自动化测试的引擎。
(3)在Android API Level18及其以上的版本增加了一个Android控件的属性ResourceId
(4)推荐文章
http://blog.csdn.net/u010961631/article/details/9616581
http://developer.android.com/intl/zh-cn/tools/testing-support-library/index.html#UIAutomator
概念
https://blog.csdn.net/liwenxiang629/article/details/109385552
框架演示模型
https://blog.csdn.net/liwenxiang629/article/details/109462056
效率提升方案
https://blog.csdn.net/liwenxiang629/article/details/109527716
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。
编程测试,即 编写一个程序测试另一个程序
录制脚本>修改录制脚本>回放脚本>查看报告。
(1)软件需求变动不频繁;
(2)项目周期足够长;(一般回归6次,自动化测试与手工测试成本相当)
(3)UI变动小
游戏类
软件的UI动态生成的内容较多;
软件用户交互性功能多;
注重UI体验的校验。
回归测试
多场景(测试点)的随机组合测试 A B C D
Appium 是一个开源、跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持 iOS, Android 和 FirefoxOS 平台。Appium 驱动苹果的 UIAutomation 库和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 协议。
官网:http://appium.io/
Github https://github.com/appium/appium
(1)跨平台, native/ hybrid/ webview(H5)
(2)跨设备, android/iOS
(3)跨app,可以在多个app之间交互
(4)不依赖APP开源代码
(5)支持Selenium WebDriver / Selenium Grid
(6)跨语言, java/python/ruby
(7)Open Source
Appium不是它⾃⼰创建⼀套新的测试框架,是将现有的优秀的框架进行了集成,以Selenium WebDriver的协议(JsonWireProtocol/Restful web service)统⼀起来. 使得这个框架满⾜多⽅⾯的需求。
Appium启动自动化测试后,在被测设备上启动⼀个server,监听来⾃ Appium server的指令。不同的平台(如IOS,Android)采⽤不同的运⾏和交换⽅式。Appium将某个桩程序“侵入”平台,用于接受指令,来完成测试脚本的运行。
在Android端,appium基于WebDriver,并利用Bootstrap.js,最后通过调⽤用UiAutomator(\Sdk\platforms\android-30)的命令,实现App的自动化测试。另外由于UiAutomator对H5的支持有限,appium引入了chromedriver来实现基于H5的自动化。
https://blog.csdn.net/liwenxiang629/article/details/117015669
findElementByClassName(String using)
findElementByCssSelector(String using)
findElementById(String id)
findElementByLinkText(String using)
findElementByName(String using)
findElementByPartialLinkText(String using)
findElementByTagName(String using)
findElementByXPath(String using)
findElementsByAccessibilityId(String using)
https://blog.csdn.net/liwenxiang629/article/details/116454410 xpath定位详解
driver.findElementById("com.worktile:id/btn_login").click(); //通过控件id点击元素
driver.findElementById("com.worktile:id/et_username").sendKeys("kevin @test.com"); //在控件中输入字符串
driver.execute(“mobile:
”, ) //按键命令,mobile: scroll", ImmutableMap.of("direction", "down") driver.setLocation(location);//设置位置信息
driver.getBatteryInfo() //获取电池信息
http://appium.io/docs/en/about-appium/api/
http://appium.io/docs/en/writing-running-appium/caps/
(1)Web 元素识别,利用浏览器developer tool
xpath详解 starts-with 和contains方法
http://www.w3school.com.cn/xpath/index.asp 重点函数章节
基础知识点如下
(2)xpath=.//*[contains(text(),'请输入用户名')] 获取页面中的文字
什么值得买
1.首页的Tab页面切换
2.个人页面设置性别
查看apk的 AndroidManifest.xml
java -jar apktool.jar d yourapk
apktool.jar 是apk的反编译软件,下载地址
https://bitbucket.org/iBotPeaches/apktool/downloads/
启动activity
包信息 package=
(1)PO设计模式:Page Object直译就是页面对象,也就是把界面定位和业务操作分开。
(2)ObjectStore:用来存放自动化测试中所需要操控的UI对象(变量类型为:public static final String )例如定义public static final Login_Button=””;表示登陆按钮的UI string路径。项目需要统一变量的命名规范,确保项目成员看到定义的变量名称就能够了解其对应的页面UI元素是什么。
parseObject的应用,考虑如何设计
(3)businesslib:把常用的场景写成方法,便于用例设计人员复用。
(4)利用junit框架中执行完成后导出的xml日志,点击下图中的Export
(1)场景设计,一个testcase中包括一个完整的流程,流程中包括若干个点(各个点之间有前后关联),每个点都用断言校验。
(2)测试点的设计,各个测试点之间没有任何联系,一个testcase中只有一个测试点。
(3)注意单元测试中的setup和teardown
(4)Junit中顺序执行用例,用例顺序排序 case1_ case2_
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;
(5)使用suite管理用例集合
@RunWith(Suite.class)
@SuiteClasses(case1.class,case2.class)
public class AllTests {
}
补:
Junit3
Junit4
TestNg
Junit5
【知识点补充1】
(1)功能测试(基于场景的测试:正常+异常场景)、性能测试、安全测试的思路、适配测试、易用性测试
(2)移动端测试
终端(各种设备+手表)+手机(ios +android),ios的测试,直接使用mac本(既可以做android开发又可以做ios开发),不要在windows上搭建mac的虚拟机
android (apk+微信类(小程序+公众号)+android浏览器)
apk 类测试(重点)
android浏览器的测试等价于web浏览器,主要差别是UI(屏幕大小)
我们的测试是基于android 应用的测试,如果有机会进入小米、oppo,vivo,华为 (自身的系统+自带应用)
移动设备的核心是,根据用户设备屏幕的大小来设计自身的ui
(3)做app 功能的时候,大家可以参考竞品(我们的功能跟竞品的功能一定是大于等于的关系,要特别关注易用性测试)
这两次课程开发内容少一些,我会根据进度引入一些android 自动化测试的东西
(4)docker stats container id 监控单个容器的性能
物理机 ,里面有十个docker ,通常的监控方式,都是对整个物理机的监控
1.docker stats id > 输出到某个文件(产生数据),文件的产生格式,与stats 的参数有关系
2.我们通过代码(python 也可以是java,找到对应的模块即可),对数据进行解析,并生成图片并保存
3.在需要使用图形界面的地方调用步骤2中生成的图片即可
(5)做android 测试最重要的两个技术点:1.adb 2.logcat 看日志
(6)android studio 是android 应用的开发ide,他是idea(android开发插件)+android sdk(android 开发的jar包,以及一系列工具)
把下面两个路径加到环境变量中
C:\Users\kevin\AppData\Local\Android\Sdk\platform-tools
C:\Users\kevin\AppData\Local\Android\Sdk\tools
(7)android 系统以及开发的基础知识
(8)java 代码被编译成dex 字节码,在虚拟机中运行,原因是性能考虑,dex字节码性能更高
(9)android各个版本的新功能以及api的变化可以查看
https://developer.android.google.cn/about/versions/
adroid 逐渐变得稳定完善是从4.4开始的
(10)每一个应用的启动本质上是启动了一个进程,有好多应用会有多个进程
我们的一个ui页面就是一个activity,activity 本质就是类
各种状态,就是对应了某个方法,然后我们呢需要重写某个方法
当activiy被打扰的时候,无论进入onpause 或者onstop的状态,都会进入到方法onpause 或者onstop ,在方法里会对当前的数据和context进行保存
结束被打扰,进入到onreusume状态,即进入到onreusume方法,在方法里对你保存的数据和context 进行恢复,确保在running状态时继续正确运行
每一个activity 都会对应一个同名的xml 资源配置文件 res\layout
webview 是activity的一个资源组件,在里面可以显示web相关内容
在配置文件中
activity 中这个标签代表着启动类
在android开发中没有 main方法,先运行哪个activity就是通过android.intent.category.LAUNCHER
contentprovider 提供接口,让其他应用访问内容(访问是有权限控制的)
(12)看xml
看资源和AndroidManifest.xml
java -jar apktool.jar d wt-android-3.18.0.apk
(13)android app >接口调用 >webview(展示网页)>调用到后端的服务
(14)通过PC 端chrome可以调试你的webview中的元素,但是前提是代码中把调试开关打开!!!!
(15)浏览器是一个应用程序,而浏览器引擎是浏览器的核心,他负责处理js,做页面对象的展示
(16)web 功能点设计,就是一句话。安卓app的测试用例,更重要的作用是列出要测试的点,怕遗漏了。而不侧重每个用例的详细步骤的描述。
比如:
用例:微信发送文字消息
具体操作:
正常长度文字
常超文字
文字带表情
文字中有特殊符合
文字有代码(安全性)
(17)app 核心功能点的使用,从主页面点击不超过三下,就能够使用
(18)处理数据
cpu>内存>磁盘
第一次,磁盘读取,到内存,cpu从内存读取数据
第二次,先判断要读取的数据是否在内存中,如果在则直接从内存读取,如果不在重复第一步
作为一个扩展!
处理数据
cpu>内存>磁盘 等价于
请求数据>缓存服务器(redis)>数据库
手机>手机数据>服务器数据
比如:
双十一来了
周期变长,1-11(周期变长:减少同一时间,并发量过大)
提前加入购物车(把商品加入到缓存服务器了),即使缓存服务器数据丢失,也无所谓,如果丢失在查库!!!!!
请求于请求之间,间隔10ms,压力都会有显著改善
(19)手机>手机数据>服务器数据
从手机中读取数据,
第一可以减少服务器的压
第二没有网络的时候,应用也有数据展示
第三 要确认数据在手机中的缓存时间
注意:缓存虽好,但不是万能的方法,例如实时性强的软件就没有缓存机制,航班、铁路、股票
打车软件,个人觉得没有必要试时,三十秒左右的缓存都可以
缓存是android 应用中特别特别重要的技术
(20)适配测试
简言之,就是应用在不同设备中的表现
华为 小米 oppo vivo
11 10 12 9
分辨率1 分辨率2 分辨率3 分辨率4
屏幕1 屏幕2 屏幕3 屏幕4
通常,各个品牌主流手机 都至少有一部(真机)
各个大厂都有云测平台,原因是什么?
各个大厂功能相差不多,比较价格!!!!!
个人非常推荐云真机的租赁,可以验证个别机型上是否纯在某些问题
(21)android 应用的性能测试,是不关注并发的,所谓的并发 是对服务器的压力!!!!!!!
对于android 应用来讲,性能主要的关注点:
应用对手机的cpu、应用的内存占用、耗电量、流畅度(卡顿)、移动网络时流量的消耗
apk
浏览器
微信小程序 >发送请求到服务器(而对于服务器来讲,我不关注你是什么设备发来的,服务器都是处理连接)
公众号
终端
(22)服务器的入口程序,会把不同的终端请求进行解析,然后返回不同的资源文件
(23)adb 是连接我们手机和电脑的一个窗口
adb shell 可以进入手机的内核
通过 top命令持续监控 应用 top |grep 你的应用名称
adb shell am start -S -W [packageName]/[activiytName]
LaunchState:启动模式,上诉启动模式为冷启动
WaitTime:系统启动应用耗时= TotalTime +系统资源启动时间(单位 ms )
TotalTime:应用自身启动耗时=该 Activity 启动时间+应用 application 等资源启动时间(单位 ms )
过渡绘制
GPU分析
都是在手机的开发者选项里有
启动时间
看cpu 内存 网络 top(perfdog更加直接,但是现在收费)
耗电量,直接用系统自带的apk 查看耗电量即可
【知识点补充2】
(1)在测试的时候,一定要考虑角色权限,不同的角色,只拥有该角色的权限!!!!!!
比如说,一个普通用户,不能使用管理员的功能权限;
一个管理员不可以随意的看普通用户的消息(查看规则是?)
(2)场景 大家可以理解为,一系列功能点的集合(组合)
(3)谈测试:功能\性能\安全\易用性\适配 最后可以谈谈核心场景的测试
(4)sdk 中最重要的工具就是
adb
adb shell 进入手机
logcat
dumpsys
(5)代码混淆,使得类名 方法名 变量名无法猜测,但是仍然能看到源码,如果源码也不想暴露,那么就需要用到加壳方案了(收费方案)
(6)如果公司不接受,把apk 上传到第三方平台进行扫描(腾讯金刚),那么就需要掌握drozer等工具的使用。
(7)启动 android studio >Tool> AVD Manager(创建虚拟机) 和SDK Manager(管理sdk)
(8)monkeyrunner 最早进行android 自动化测试的工具
Monkeyruner脚本可以支持安装卸载应用、进入任一模块、点坐标事件、按键事件、编辑文本、循环测试、截图对比(缺陷)等操作
该工具是,云测中,最基础的自动化测试核心工具,他只能针对页面的坐标进行模拟!!!!!
(9)monkey 发送随机事件流,对于普通应用来讲,意义不是很大,个人觉得最有用的场景就是 对于游戏的随机点击测试!
(10)Sdk\platforms\android-30
android.jar 就是开发android 应用的api
uiautomator.jar 就是做ui自动化测试的api
(11)monkeyrunner>robotium 最早>appium(android自动化测试中,就是调用了uiautomator中的api来操控页面中的ui元素)
(12)以web自动化测试的实例,来了解android自动化
web 的主流工具是selenium 3,规范了一套webdriver协议,这个协议是http
ui 自动化主要的技术是识别到页面的元素,识别到元素后,对元素进行一系列的处理,包括点击、写入、选择、(移动app中的ui元素 还会加入一系列的手势操作)
一搬来讲,ui自动化测试都会有一款工具,能够录制我们对于ui元素的操作!
(13)katalon recorder 是一款web录制工具,他支持firefox和chrome,是二者浏览器的一个插件
以web 为例,我们在使用录制工具的时候,操控页面中的元素,录制工具会对其进行识别(id,class,xpath,css)
任何一个web 元素都有一个唯一的xpath 或者css用来进行识别
id =su
//*[@id="su"]
#su
如果一个web 页面中的元素,没有id class 这些属性,那么要想对其进行识别,只能使用xpath (移动端自动化测试,很多都是用xpath进行定位的)或者css
页面中的元素,并不是只有一种识别方式,只要识别方式具有唯一性就可以!!!!!!!!
自动化测试录制工具,第一步,就是对页面中的元素进行查找(唯一性的)
(14)通常录制的代码时不稳定的,要想使得录制的代码稳定就需要对其进行脚本化处理,生成对应的脚本
把脚本引入到ide中,引入脚本所需要的jar包,进行自动化代码的开发
(15)自动化测试前提条件是设计好用例
第一步,识别页面中的元素(有的工具可以通过录制的形式,识别到页面中的元素;如果工具不提供那么需要自己手动实现)
使用appium也就是uiautomator 时候,我们可以通过\Sdk\tools\bin\下的uiautomatorviewer.bat 对页面中的元素进行识别
(16)步骤自动化+结果校验的自动化=自动化测试
(17)新功能的测试,不适合做自动化测试;自动化测试特别适合回归测试
自动化测试依赖于页面ui元素的属性,所以如果ui不稳定,那么自动化测试是不适合的
自动化测试是脚本,脚本就会有bug,我们自动化测试的目的是发现产品的bug,但是很多情况下是因为自动化测试脚本执行的失败而影响了测试结果!!!!
自动化测试若想有效开展,本质还是测试人员编写的测试代码要健壮!!!!
测试代码不健壮的原因:
1测试人员代码能力不足
2没有人对测试人员编写的代码进行测试
互联网产品不太适合做自动化测试,因为ui变化快,功能更新快;企业级软件适合做自动化测试jira、禅道、ehr就非常的适合做自动化测试了
移动互联网产品适合做自动化测试的少,但是也建议大家去写自动化测试脚本,原因是能够提升代码水平
(18)脚本用例的并行
一个用例 有 12345,我们可以顺序跑12345,也可以多线程分别跑 12345
(19)appium
自动化测试的核心是操控页面中的元素,而appium并未编写关于超控页面ui元素的api
(20)applium/selenium
!!!ide (代码java、python、ruby)>代码会被转化成webdriver协议>服务端来解析这个协议(appiumserver\各个浏览器的driver)
(21)driver.findElement(By.id("kw")).click();
driver.find_element_by_id("kw").click() 都会转化成协议POST /session/{session id}/element/{element id}/click https://www.w3.org/TR/webdriver/#element-click
@driver.find_element(:id, "kw").click
appium server 0.0.0.0代表本机,可以指定appiumserver的ip,如果代码跟appium server 不在一台机器上,那么在代码中设置如下:
driver = new AndroidDriver(new URL("http://remoteip:port/wd/hub"), capabilities);
By.xpath("//*[@text='主页']") 表示在当前页面中找"主页"元素
在android 里常用的api 也就是 click sendkeys
(22)在做appium测试时,我们要从androidmanifest 中获得两个信息, 第一个就是package名,第二个就是启动的activity信息
(23)po模式 把页面中的ui元素,赋值给变量,然后再脚本中调用这些变量即可,好处有两点
1.一旦页面中元素的属性发生了变化,我们只需要修改变量的赋值,而无需更改变量了!!!
2.我们可以通过变量的命名规则来很清晰的定义我们再页面中超控的元素是什么
(24)总结:
android 测试方法 功能 性能 安全 适配 易用性
工具 sdk adb logcat dumpsys
GPU呈现模式分析(重要)
过渡绘制
fiddler 接口的抓包
appium(monkey、monkeyrunner)
自动化测试的原理,适合自动化测试的项目和不适合自动化测试的项目