1. appium工作原理,生命周期,怎么执行的
总体来说都是以appium服务端作为中转站,把测试脚本的指定传递给appium服务端,然后appium服务端再和底层工具进行通信
底层工具和手机进行通信操作,操作完成后将结果反馈给appium服务端,服务端再将结果反馈给我们测试脚本
安卓下:
1. 4.2以上的机型用底层调用的uiautomator(AppiumBootStrap.jar)这个测试工具
在测试脚本与appium服务端创建连接的过程中,会将AppiumBootStrap.jar这个包发送到测试设备上,并且启动AppiumBootStrap.jar
创建一个socket服务,一直等待服务端传递命令,整个执行测试的过程就是和AppiumBootStrap.jar进行通信完成操作
在执行完测试后测试脚本调用driver.quit()这个方法,来结束测试,并且结束设备上AppiumBootStrap.jar
2. 4.2以下的机型底层用的seledroid这个测试工具
在测试脚本与appium服务端创建连接过程中,会对原测试应用进行重签名操作,生成一个seledroid_xxx.apk,并将这个apk安装到测
试设备上,以这个apk来操作测试的apk,那么服务端和seledroid通信是基于一个http的接口服务的,这个端口是8080
3. 混合应用webview部分用的是chromedriver
前提是我们的测试应用源码包中开启了webview debug模式
混合应用在切换webview的时候会去启动一个chromedriver的http服务,这个服务端口是9515,appium服务端和chromedriver的服务进
行通信,chromedriver与我们的apk中webview进行通信
4. 手机web应用用的chromedriver
前提是基于chrome内核的浏览器
测试脚本与appium服务端创建连接的过程中直接创建一个chromedriver的服务,这个服务端口是9515,appium服务端和chromedriver的服务进
行通信,chromedriver与我们的手机web进行通信
ios下(xode8以下):
1. 原生app的测试
基于instruments的uiautomation来做的,测试脚本与服务端进行通信,服务端将测试指令翻译成uiautomation脚本传递给instruments,由
instruments和手机测试应用进行通信,完成操作
2. 混合app的测试
前提是启动ios_webkit_debug_proxy -c 0e4b2f612b65e98c1d07d22ee08678130d345429:27753 -d 服务
测试脚本在切换driver的时候,启动一个chromedriver服务,和应用的webivew进行通信
3. 手机web的测试
借助SafariLauncher这个app来完成safari浏览器的操作
2. 显式等待和隐式等待的异同
1. 相同点都是智能等待,在一定时间范围内不断查找元素,一旦找到立刻结束查找继续执行代码,没找到才会一直找到超时为止
2. 不同点是隐式等待是全局性设备,并且可以随时更改,在更改后对之后的findxxx方法生效,对点击、输入、滑动之类的操作不起作用;
显式等待仅仅针对单一元素生效,并且不仅仅是针对查找,也可以针对元素的某些属性进行自定义判断
3. 多设备执行
1. 安卓下多设备执行意味着每一个设备需要对应一个appium服务端,并且脚本部分需要实现多线程访问,appium服务端启动命令如下:
appium -p 4490 -bp 3456 -U xxxx
-p 表示服务端和脚本通信的端口
-bp 表示服务端和设备的AppiumBootStrap.jar进行通信的端口
-U 表示当前服务是针对哪一台设备的
2. ios在xcode8以下不支持多设备执行原因是instruments不支持多实例
4. testng框架
1. 各个注解的作用以及执行顺序和次数
注意注解指定的是配置文件中的标签,比如beforeTest指的是配置文件中的test标签执行前要做的初始化操作,其他类似
beforeMethod和AfterMethod表示在每一个Test注解的测试方法执行前后都会被执行的
2. 测试报告,测试日志及失败截图
使用jenkins的testng插件,解析testng自己生成的报告,将失败截图放在jenkins所在的tomcat目录下,可以达到在html报告上看到截图的效果
reportng报告
testng-xlst的报告
5. 如果要实现安卓和ios同时测试,需要一个mac电脑做服务端
6. 自动化测试的环境
1. 需要一台专职自动化的电脑
2. 如果你的设备较多,需要集线器,电脑配置要高
3. usb连接线质量要好