测试开发进阶——app自动化相关——面试整理

1. appium的工作原理


这个题目考察的就是appium工作原理


appium工作原理需要分很多方面进行阐述

安卓:


1.1 appuim基于uiautomator2的原理


Appium服务启动后默认在4723端口上创建一个http服务,脚本通过服务地址http://xxxx:4723/wd/hub和appium进行通信;


在初始化脚本和appium连接的过程中appium会向手机就安装辅助app uiautomator2.server.apk和uiautomator2.server.test.apk,并且做端口转发adb forward tcp 8200 tcp 6790,


安装以后会在手机上启动uiautomator2的server,这个server启动后会在手机上创建一个netty server,端口是6790,


appium和手机上的uiautomator2 server的6790端口进行通信,把从4723端口收到的脚本指令通过8200端口转发到手机的6790端口上。


1.2 Appium基于uiautomator1的原理


Appium服务启动后默认在4723端口上创建一个http服务,脚本通过服务地址http://xxxx:4723/wd/hub和appium进行通信在初始化脚本和appium连接的过程中appium会向手机,


发送AppiumBootstrap.jar,并且做端口转发adb forward tcp 4724 tcp 4724,安装以后会在手机上启动AppiumBootstrap.jar,


启动后会在手机上创建一个socket服务,端口是4724,appium和手机上的socket服务的4724端口进行通信,


把从4723端口收到的脚本指令通过4724端口转发到手机的4724端口上。


1.3 Appium基于chromedriver的原理,测试H5时使用


Appium服务启动后默认在4723端口上创建一个http服务,脚本通过服务地址http://xxxx:4723/wd/hub和appium进行通信;


在初始化脚本和appium连接的过程中会启动chromedriver创建一个http服务,端口是8000,


appium和chromedriver的服务通过8000端口进行通信,chromedriver服务接收到appium指令后去操作手机,操作完成再返回给appium,appium再返回给脚本


1.4 IOS手机:


Appium服务启动后默认在4723端口上创建一个http服务,脚本通过服务地址http://xxxx:4723/wd/hub和appium进行通信,


在初始化脚本和appium连接的过程中会向手机编译安装webdriveragent app,并且启动wda在手机上创建一个基于8100的http服务,appuim通过4723的端口接收到脚本传递的指令,


appium再通过本地的8100端口将收到的指令转发给手机上8100 wda服务,wda服务接收到指令再去操作待测app,操作完成后返回给appium操作结果,appium再将结果返回给脚本。

2. 接口响应格式是json的,用代码如何解析他?如果不使用第三方库怎么解析?

在java自动化测试中解析json的第三方包有很多,比如fastjson、gson等等,如果不使用第三方的话则需要采用java原生的字符串处理方法,


比如一个json字符串是{"name":"shamo","age":18,"job":"tester"},可以采用字符串分割、替换等方式拆解,得到其中某个字段对应的值。

3.Testng的监听器是怎么使用的?TestNg的数据驱动返回的是什么?


Testng的监听器在自动化中的使用主要集中在失败截图和失败重试;


失败重试的需要实现两个接口IRetryAnalyzer、IAnnotationTransformer;


失败截图的需要实现ITestListener;


实现后需要在testng的配置文件中增加监听标签Testng的数据驱动返回结果是一个二维数组,因此在做数据驱动时,


不管我们的数据是存在excel、xml或者数据库等存储介质中,最终我们都需要将他们转换成二维数组;

4.简单介绍一下自动化项目整体框架的结构


自动化测试框架涵盖基础方法封装、自定义异常封装、工具类封装、元素管理封装、Page Object模式封装、日志封装、数据管理封装、失败重试封装、


浏览器/手机适配封装、数据库操作封装、测试用例管理封装、测试报告等等。

5.自动化中显式等待和隐式等待的异同?


1. 相同点都是智能等待,在一定时间范围内不断查找元素,一旦找到立刻结束查找继续执行代码,没找到才会一直找到超时为止。

2. 不同点是隐式等待是全局性设置,并且可以随时更改,在更改后对之后的findxxx方法生效,对点击、输入、滑动之类的操作不起作用;


显式等待仅仅针对单一元素或一组生效,并且不仅仅是针对查找,还可以针对弹框或者frame等特殊情况起作用,也可以针对元素的某些属性进行自定义判断。


6. Testng中都有哪些注解


Testng单元测试框架中有基本的9大注解,BeforeSuit/AfterSuit、BeforeTest/AfterTest、BeforeClass/AfterClass、BeforeMethod/AfterMethod、Test,


其中比较特殊的注解是BeforeMethod/AfterMethod,他的含义是在每一个@Test注解执行前后都会被执行;


7. Jmeter工具如何做接口之间的关联,简述?


接口关联指的就是一个接口要使用另一个接口的返回值作为参数,这种我们在jmeter中叫做关联。


关联的实现方式有多种:


使用正则表达式提取器获取上一个请求的响应结果中的某个值,储存在某个变量中,然后下一个接口使用变量进行引用;


使用json提取器获取上一个请求的响应结果中的某个值,储存在某个变量中,然后下一个接口使用变量进行引用;


使用beanshell后置处理器,解析响应结果存储在变量中,然后下一个接口使用变量进行引用,跨线程组关联则需要将关联字段设置为全局属性;


8.你们公司业务中,自动化和手工分别占比多少?分别用来做什么业务?


首先各公司自动化和手工的占比取决于对自动化测试的投入,这个问题的回答建议做好数据,


比如我们的功能测试用例总计1000,从其中分析出要实现的自动化用例300条,那么自动化的占比就出来了。


那么哪些测试用例会被用来做自动化,稳定模块的用例、功能优先级高的用例。


手工测试一般用来做新功能测试业务,自动化一般用来做旧的功能用来回归业务

9.如何保证自动化测试的稳定性


自动化测试稳定性主要表现在两个方面:一个是元素定位的问题,一个是用例之间的依赖问题。


元素定位问题可以采用智能等待的方式尽可能的避免;


用例依赖可以解耦用例之间的关系,让每条用例都从一个共同的页面开始执行,比如首页,这就需要在测试框架中采用后置处理的方式使每条用例执行完成后都回到首页。


10.cookie 和 session 的区别?


会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话,


Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份,


区别:

1、数据存放位置不同:cookie数据存放在客户的浏览器上,session数据放在服务器上。


2、安全程度不同:cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。


3、性能使用程度不同:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。


4、数据存储大小不同:单个cookie保存的数据不能超过K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。


11.自动化测试中用例依赖的数据如何构造


不管是接口自动化还是ui自动化都会存在自动化case依赖数据如何构造的问题,可以从三个方面去考虑,

第一个是在测试前采用接口去构造需要的数据;


第二个是使用初始化sql去初始化数据,但是如果说表结构复杂的话,sql编写也是比较大的工作量;

第三个方式是提前准备好一套数据,并且将该数据对应的数据库进行备份,在之后每次执行测试前先备份当前数据库数据,

再导入之前的测试数据,再执行测试,测试执行完后再恢复原有的数据


12.如何实现多浏览器或者多手机的测试

web端自动化通常采用selenium的grid方式可以实现多浏览器的测试,也可以采用Testng的多线程配置方式实现不同浏览器的本地测试;

appium本身也支持移动端多设备的测试,需要注意的是一台设备必须对应一个appium服务,同样可以采用grid方式或者本地多设备测试;或者通通采用jenkins的多节点方式实现

13.接口测试时碰到接口重定向如何去测试?


首先接口测试方式不同则处理方式不同,


如果用的jmeter则无需特殊处理,jmeter默认会自动处理重定向接口自动发起对重定向的接口地址的访问并返回结果;

如果是采用代码框架的方式则需要特殊处理,拿到第一个接口响应,header中的location字段对应的接口地址,发起对该地址的请求.


14.接口依赖第三方接口,但是第三方接口却有问题怎么办?


这种情况下我们会采用mock的方式来模拟第三方接口的返回,但是注意这种mock一般都需要开发配合,将自己公司的接口调用指向mock出来的接口服务


15.restful标准接口中,有哪几种请求方式,他们分别代表什么含义


restful规范的接口中,通常是一个url就代表一种资源,对于资源的操作是通过http请求方法实现的,


其中有get、post、put、delete四种方式,get表示获取数据、post表示新增数据、put表示修改数据、delete表示删除数据

16. web自动化中有哪些场景需要特殊处理


1. iframe元素,当要操作的元素在iframe中是需要先将driver切换至该iframe才能操作,

切换方式有四种,通过id、name、索引、iframe元素对象,并且在多iframe切换时还需要进行各种转换。


2. 新窗口打开,当要操作的元素在一个新窗口打开的页面上时,就需要先将driver切换至新窗口上才能进行操作


3. 时间控件,通常时间控件只能选择无法输入,那么可以采用js的方式修改时间控件的只读属性然后再进行输入,或者用js直接修改时间控件的value值

4. 元素不在当前视野需要滚动才会出现,可以采用js的方式滚动,但是有时候界面中有多个滚动条js就会无效,则需要先将光标置入到滚动条区域然后模拟键盘的上下左右键来操作。


17.app里的手势解锁的图标定位不到如何处理

一般情况下手机解锁的大元素可以定位到,那么可以先定位大元素,然后获取该元素的起始点坐标及长和宽,


通过坐标计算出手势解锁需要的9个点的坐标,然后调用TouchAction里的press.moveTo.moveTo方法实现手势解锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值