
1、接口测试用例的设计要点有哪些?
对于这个问题我们可以从接口的组成来进行分析,一个接口主要有请求地址、请求方法、请求参数,其中请求地址和方法都是固定的,
所以我们主要应该从请求参数入手,主要可以从以下几个方面考虑:
1、参数字段个数:必填字段和可选填
2、参数合法性:输入输出合法、非法参数
3、边界:请求参数边界值等
4、容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
5、响应数据校验:断言、数据提取传递到下一级接口
6、逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
7、性能:对接口模拟并发测试,逐步加压,分析瓶颈点,即响应时间,吞吐量,并发数,cpu,内存,io的占用情况。
8、安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)
2、post和get有什么区别?
这个问题应该是每一个做接口测试人员都能回答的问题,但是要注意说到重点:
1、get方法的参数是在URL中,post的参数是在body中(本质区别)
2、get方法的安全性没post的高
3、get方法能被缓存而post不可以
4、GET请求在URL中传送的参数是有长度的,而POST没有。
当然还有其他的很多区别,但是回答这几个主要的就差不多了。
3、你会使用哪些抓包工具?
抓包工具有很多种,但是我们技术人员最常用的不外乎就是Fiddler、F12这几种,所以选一个你自己最常用的就可以了。
当然面试官接下来的问题多半会问你为什么会用抓包工具?公司不是有接口文档吗?
4、使用抓包工具做什么?
对于中大型公司里面的开发人员都会编写好有完整的接口文档,那我们做接口测试的时候对照接口文档不就可以了吗?
所以对于还没有真正接口项目经验的小伙伴就不知所措了。那么我们测试人员抓包其实一般都是为了验证我们测试的数据在接口传递过程中是否正常或者为了判断某个问题是前端问题还是后端问题。
5、怎么判断一个bug是前端问题还是后端问题?
我们可以先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对,请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题,这样我们测试人员才能有自己的判断,而不是任由开发相互扯皮。
6、你们公司是用什么做接口测试的?
每个公司做接口测试所使用的工具都是不一样的,有的会使用postman来做一些简单的单接口测试,但是对于一定数量的接口测试postman就很难胜任了,所以这时候不少公司就会选择开源的jmeter来做,因为脚本也相对比较好管理维护也方便。
但是对于不少公司来说jmeter也满足不了自己的要求,这时候就会有测试人员自己编写测试框架(也就是测试开发),然后通过编码自己设计完成自己公司需要的功能。
7、接口测试框架你会吗?
会使用unittest,我们的框架是在unittest框架之上进行二次封装集成了邮件系统和测试报告以及日志、重跑等功能,然后再说这样设计的优势,这样就会让人觉得这人是懂具体的框架实现过程的。
8、你们接口测试用例是在哪里?
这要看你们公司是用的什么工具来做接口测试的了,假如是postman和jmeter那么用例就是直接在它们的请求文件里面,但是假如是有自己的框架那么用例一般都在表格或者表里面的。
9、什么是API?
API是(Application Programming Interface)首字母缩略词,即应用程序编程接口。API是一组用于构建软件应用程序的规程,协议和工具。API充当软件应用程序之间的接口,并允许两个软件应用程序相互通信。API是一组软件功能,可以由其他软件执行。
10、什么是API测试?
API测试是一种软件测试,涉及直接测试API,也是集成测试的一部分,用于检查API是否满足应用程序的功能,可靠性,性能和安全性方面的期望。在API测试中,我们主要关注软件架构的业务逻辑层。可以在包含多个API的任何软件系统上执行API测试。
11、常见的API测试类型有哪些?
API测试通常涉及以下实践:
单元测试
功能测试
负载测试
运行时/错误检测
安全测试
UI测试
互操作性和WS一致性测试
渗透测试
模糊测试
12.你们公司的接口测试流程是怎样的?(有没有感觉熟悉,貌似在哪里听过)
答:接口测试实际跟一般测试不同就是测试用例的设计部分。
①获取接口规范。
②设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑盒用例那一套)。
③各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选,还有考虑参数有互斥或关联的情况)。
④接口返回值各种验证(符合接口文档需求)
⑤了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/…)
⑥接口能并发执行吗、安全吗,性能满足要求吗?
⑦采用工具或者自写代码来验证。
⑧发现问题跟功能测试一样,该报bug报bug,该跟踪状态的跟踪状态。
13、请简述一下cookie、session以及token的区别(万年不变的面试题)
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。而token是接口测试时的鉴权码,一般情况下登陆后才可以获取到token,然后在每次请求接口时需要带上token参数。
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie 欺骗,考虑到安全应当使用session,session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
(3)可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie
14、接口测试如何设计测试用例?(必问,有没有感觉答得整个人都不好了?)
接口测试设计测试用例的思路如下:
1.接口业务逻辑测试?(正例)
接口逻辑测试是指根据业务逻辑、输入参数、输出值的描述,对正常输入情况下所得的输出值是否正确的测试,也就是测试对外提供的接口服务是否正常工作。
2.模块接口测试?(反例)
模块接口测试是为了保证数据的安全及程序在异常情况下的逻辑的正确性而进行的测试。
模块接口测试的主要包括以下几个方面:
1)鉴权码token异常(鉴权码为空〈没有鉴权码〉错误的鉴权码,过期的鉴权码)。
2)其他参数异常。
1、必填项检查
2、参数的长度、类型、格式异常:
常规参数:(数字、字符串、日期)
参数长度:6-18位。或身份证、电话的长度。
参数类型:数字(精度),字母,中文,带空格的参数,特殊字符。
日期格式:日期:年月日,年月日时分秒,日期格式(包括/-,等)。
3)错误码异常覆盖。
4)接口测试其他的关注点
接口有翻页时,页码与页数的异常值测试
数据库的增删改查,比如一个post接口操作完成后,通过列表页接口看下新的数据是否和刚才的post一致
接口返回的图片地址能否打开,图片尺寸是否符合需求
当输出参数有联动性时,需要校验返回两参数的实际结果是否都符合需求。
所有列表页接口必须考虑排序值
所有功能都要考虑兼容旧版
15、接口测试执行中比对数据库吗?
肯定啊,因为接口返回值的数据来源于数据库,接口对数据的操作还要进行深层次的数据库检查!
16、谈谈你对HTTP协议的了解?
超文本传输协议,端口为80,特点(无记忆功能、快速)是由请求和响应两部分组成请求由请求头、请求行、请求正文组成;响应是由响应头、响应行、响应正文组成,之前我们公司的接口是采用https协议的。
https http+ssl协议端口443 面向安全的超文本传输协议17、get和post请求有什么区别?
get和post请求都是客户端向服务器提交的一种请求方式
get是明文传输参数、倾向于请求服务器资源。比如打开网站
post传输数据不可见,安全性高,倾向于向服务器提交数据,比如注册等18、响应状态码有哪些?
1xx:指示信息--表示请求已接受,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
19、接口测试中有哪些要注意的测试点?
1)接口中返回了图片地址,要手工去进行图片的测试(大小、内容)
2)接口完成查询功能的时候,数据返回的排序显示
3)接口测试的时候,关注参数的默认值、必填项
20、接口执行测试后返回结果做对比,一般比对哪部分内容?
之前必须要对比的就是返回状态码,其次再去对比返回其它关键内容21、为什么开展接口测试?
1)接口测试属于集成测试、测试介入越早、就越能在项目早期发现问题,其修复问题的成本越低
2)接口测试非常快速、UI自动化执行一个测试用例10S左右、接口测试用例执行的话,
3)需要的时间是毫秒级的
4)系统数量多、复杂度增高,同时保持各自性。
5)系统间调用存在数据交互,发现页面操作发现不了的Bug。
6)接口之间访问时,对接口数据的准确性要求很高。
7)检查系统的异常处理
8)检查系统的安全性,稳定性
9)前端变了,接口测好了,后端不要变
22、之前在接口测试过程中,使用的工具是什么?
postman或jmeter
23、之前用过抓包工具没有?如何使用的?
之前在项目中用过fiddler抓包工具进行HTTP协议请求的抓取
打开fiddler之后,默认浏览器配置了127.0.0.1 8888端口的代理,在fiddler设置好过滤策略后,打开需要进行抓包的网站进行操作,就可以进行抓包
24、json数据是什么,你平时如何解析json数据?
一种开发常用的数据报文格式,由键值对和数组两种格式构成。可以通过工具bejson网站等
25、postman你在工作中使用流程是什么样的?
1) 编写好用例
2) 在postman先建好url环境变量
3) 根据接口用例所属的模块新建集合管理
4) 在集合中不同模块下录入测试用例
5) 录入测试用例的时候根据预期结果在tests页签中增加断言
6) 导出通过Newman去运行
26、postman中设置环境变量有什么用?
在之前项目中,接口测试测试的环境有开发环境,测试环境等,为了测试的时候方便,就在postman设置环境变量,到时所有接口都引用该环境变量,这样就不用为了切换环境导致每次都去修改被测系统接口的主机地址;点击右上角环境变量管理按钮-新建环境变量,在脚本中使用{{变量名}}去调用
27、在接口测试中关联是什么含义?如何用postman设置关联?
关联就是把上一个接口返回值的部分截取出来,作为下一个接口的参数,能让接口串联运行
在postman中设置关联的步骤如下:
1) 先通过正则表达式提取的方式或json取值的方式把下一个接口需要的信息从上一个接口截取出来
2) 使用设置全局变量的代码把取出来的值保存到全局变量
3) 在下一个接口中,使用{{全局变量}}代替要替换的静态值
28、postman支持什么类型的协议测试?
http和https协议的
29、postman参数化有哪几种方式?
内建变量、pre-scripts编写js脚本、批量运行时导入csv或json格式的文件
30、Newman如何执行postman脚本?
Newman run 脚本名称也可以添加参数生成html报表等
31、jmeter之前用的是什么版本?如何安装的?
jmeter用的是5.0版本,安装如下:
先在电脑上安装jdk1.8或以上的版本,然后从官网下载最新的安装包,解压后,进行环境变量的配置,配置好后即安装完成
32、在项目中如何用jmeter进行接口测试?
1) 把线程组数量设置为1,循环次数设置为1
2) 配置好全局变量URL通过配置元件---用户自定义的变量添加
3) 增加配置元件http请求默认值,放置在用户定义的变量之后
4) 添加事务控制器管理和组织测试用例
5) 在事务控制中添加http请求添加测试用例中的接口请求信息
6) 添加对应的断言元件进行断言
33、jmeter中如何设置断言?
右击请求---断言---响应断言---响应断言界面输入要检查比对的项,设置好断言后,执行接口测试如果是通过的,查看结果树不会有任何提示,如果断言失败,就会有红色报错。如果接口返回的数据是json数据,也可以添加json断言34、jmeter中如何实现关联?
先从上一个接口中通过正则表达式提取器或jsonpath解析器截取下一个接口需要的参数值保存到变量,然后在写一个接口中通过${变量名}去获取35、jmeter添加http请求默认值元件有什么作用?
添加并设置好后,相当于给所有的http请求取样器都设置了默认值,既不用填写取样器中的比如主机地址、端口、代理等,都可以使用http请求默认值设置的
36、jmeter参数化的方式有哪几种可以实现?
1) 配置元件---用户定义的变量元件可以设置全局变量
2) 函数助手对话框中可以选择比如随机字符串、随机日期、随机数字作为参数化
3) 可以使用csv文件作为参数化,通过配置元件中的csv data set config 元件进行设置即可
37、没有接口文档,如何做接口测试
答:1.没有接口文档,那就需要先跟开发沟通,然后整理接口文档
2.没有接口文档,可以抓包看接口请求参数,然后不懂的跟开发沟通38、当一个接口出现异常时候,你是如何分析异常的?
答:抓包,查看后端日志
按你的理解,软件接口是什么?
答:就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。
39.HTTP和HTTPS协议区别?
答:https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用;
http是超文本传输协议,信息是明文传输,Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全;
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
40你会使用fiddler吗?一般用来干什么?
答:会使用,一般用作抓包。
41、HTTPS在哪一层?
答:HTTPS在应用层。
42.常见的POST提交数据方式
答:主要有四种方式:application/x-www-form-urlencoded、
multipart/form-data、application/json、text/xml等。
43.什么是Http协议无状态协议?怎么解决HTTP协议无状态协议
答:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。HTTP 是一个无状态协议,这意味着每个请求都是的,Keep-Alive 没能改变这个结果。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。
44、什么是DNS?
答:DNS 是域名系统 (Domain Name System),DNS是用来做域名解析的,它会在你上网输入网址后,把它转换成IP,然后去访问对方服务器;没有它,你想上百度就要记住百度的IP,但有了DNS的处理,你只需要记住对应网站的域名,即网址就可以了。
45、接口性能测试怎么做的
响应时间
吞吐量
并发数
服务器资源使用率(CPU,内存,io, network)
46、如何模拟弱网测试?
两台机器链接同一WiFi,使用电脑对其限流
47、如何分析一个bug是前端的还是后端的?
通过抓包查看报文,请求报文有误即为前端的bug,返回报文有误即为二、Web测试问题
1.get请求和post的区别?
(1)get是从服务器上获取的数据,post则是向服务器传送数据
(2)get的参数在URL中可以看到,post的参数用户看不到
(3)get传送的数据量较小,不能大于2KB,post传送的数据量较大,一般被默认为不受
(4)get安全性比较低,post安全性较高
2./s和c/s架构有什么区别和联系?
(1)B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易(2)C/S可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现。
(3)C/S结构的软件需要针对不同的操作系统开发不同版本的软件,加之产品的更新换代十分快,更新的代价高,效率低。
(4)C/S和B/S并没有本质的区别:B/S是基于特定通信协议(HTTP)的C/S架构,也就是说B/S包含在C/S中,是特殊的C/S架构
3.session和cookie的区别有哪些?
(1)session存放在服务器端,cookie存放在客户端
(2)cookie不是很安全,别人可以分析存放在本地的cookie,session会在一定时间内保存在服务器上,当访问增多,会比较占服务器性能(3)单个cookie在客户端的是3k
4.web功能测试的关注点有哪些?
(1)链接测试
(2)表单测试
(3)Cookie&Session测试
(4)文件上传测试
(5)数据库测试
5.https和http的区别
1.HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好。
2.使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构)申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
3.HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
4.http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
5.HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
6.web测试中,如何判断是前端的bug还是后端的bug呢?
1.请求接口url是否正确,如果请求的接口url错误,为前端的bug
2.传参是否正确,如果传参不正确,为前端的bug
3.请求接口url和传参都正确,查看响应是否正确,如果响应内容不正确,为后端bug
4.也可以在浏览器控制台输入js代码调试进行分析.
7.界面是怎么测试的?
我们主要测试的是UI,功能,网络,兼容性,易用性,安全性测试
UI测试:一般检查界面的布局展示是不是和需求说明一致。还有测试不同的屏幕大小,不同的分辨率对界面展示的影响。
功能测试:和web的功能测试差不多,主要是考虑操作的权限,模块功能,用户场景等方面
兼容性测试:主要考虑的是浏览器不同版本的兼容,屏幕大小跟分辨率
网络测试:一般是考虑在不同网络情况下,h5界面能否正常运行,比如说网络之间的切换,和网络之间组合,外景和弱网环境下的使用情况8.osi的七层模型?
应用层,表示层,会话层,传输层,网络层,链路层,物理层
9.http协议的响应码是如何定义的?
(1)1xx属于参考信息
(2)2xx 指明状态成功
(3)3xx用于重定向
(4)4xx指客户端错误
(5)5xx则是服务器端错误
10.TCP和UDP的区别
相同点:都是传输层协议,负责承担数据传输的的任务。
不同点:
TCP :传输控制协议,可靠的面向连接,面向字节流服务。安全性高,但是效率低。
UDP:用户数据报协议,不可靠、无连接的面向报文的传输服务,安全性低,效率高。
11.应用层协议有哪些?
域名系统(DNS):实现网络设备名字到IP地址映射的网络服务。
文件传输协议(FTP):实现交互式文件传输功能。
简单邮件传送协议(SMTP):实现电子邮箱传送功能。
超文本传输协议(HTTP):实现WWW服务。
简单网络管理协议(SNMP):管理与监视网络设备。
远程登录协议(Telnet):实现远程登录功能。
12.TCP/IP协议是什么?有什么特点?
TCP/IP协议是Internet上使用最为广泛的通信协议。所谓TCP/IP 协议,实际上是一个协议簇(组),是一组协议,其中TCP协议和IP协议是其中两个最重要的协议。IP协议称为网际协议,用来给各种不同的局域网和通信子网提供一个统一的互联平台。TCP协议称为传输控制协议,用来为应用程序提供端到端的通信和控制功能
⑴开放的协议标准:可以免费使用,并且于特定的计算机硬件与操作系统。
⑵于特定的网络硬件:可以运行在局域网、广域网,更适用于互联网中。
⑶统一的网络地址分配方案:使得整个TCP/IP设备在网中都具有唯一的IP地址。
⑷标准化的高层协议:可以提供多种可靠的用户服务。
13.Http协议报文结构包含什么内容?请求方式有哪些?
一个HTTP请求报文由请求行( request line )、请求头部(header )、空行和请求数据4个部分组成。
HTTP响应报文和请求报文的结构差不多,也是由四个部分组成(状态行+响应头部+空行+响应体)
14.Cookie和Session的关系区别?
Cookie是服务器暂存放在用户计算机上的一些资料,好让服务器用来辨认用户的计算机。Session:会话,客户端和服务器之间的会话,通过在服务器端记录信息确定用户身份。cookie是一门客户端缓存技术,cookie数据由服务器生成,发送给浏览器保存在客户端
cookie数据的格式:键值对
cookie数据过期机制:设置expire值
Cookie保存在浏览器、易伪造、不安全
session是一门服务端会话缓存技术,session由服务器端的web容器创建,保存在服务器端
session保存数据:键值对形式
session过期:一般默认30分钟
Session在服务器端,相对安全,过度使用会消耗服务器资源
15.Web系统和App的测试有哪些不同?
Web测试和App测试区别为:监测不同、更新不同、回归测试不同。
一、监测不同1、Web测试:Web测试需监测响应时间、CPU、Memory。2、App测试:App测试除了需监测响应时间、CPU、Memory外,还需监测流量、电量等。
二、更新不同1、Web测试:Web测试只要更新了服务器端,客户端就会同步会更新。2、App测试:App测试更新需要手动更新客户端。
三、回归测试不同1、Web测试:Web测试不需要进行回归测试。2、App测试:App测试所有核心版本都需要进行回归测试。
16.WebDriver原理
webDriver是按照client/server模式设计,client 就是我们的测试代码,发送请求,server就是打开的浏览器来打开client发出的请求并做出响应。
具体的工作流程:
·webdriver打开浏览器并绑定到指定端口。启动的浏览器作为 remote server.
·client 通过 commandExecuter 发送 httpRequest 给 remote server 的的侦听端口(the webdriver wire control 通信协议)·Remote server 根据原生的浏览器组件来转化为浏览器的 native 调用。
备注:启动浏览器的时候,使用的是 http: hyper test transfer protocol
三、App测试问题
1.什么是activity
Activity是Android的四大组件之一,也是平时我们用到最多的一个组件,可以用来显示View。
官方的说法是Activity一个应用程序的组件,它提供一个屏幕来与用户交互,以便做一些诸如打电话、发邮件和看地图之类的事情。
Activity是一个Android的应用组件,它提供屏幕进行交互。每个Activity 都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。
一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity。将Activity设为主活动的方法
当然Activity之间可以进行互相跳转,以便执行不同的操作。每当新Activity启动时,旧的Activity便会停止,但是系统会在堆栈也就是返回栈中保留该Activity。
当新Activity启动时,系统也会将其推送到返回栈上,并取得用户的操作焦点。当用户完成当前Activity并按返回按钮是,系统就会从堆栈将其弹出销毁,然后回复前一Activity
当一个Activity因某个新Activity启动而停止时,系统会通过该Activity的生命周期回调方法通知其这一状态的变化。
Activity因状态变化每个变化可能有若干种,每一种回调都会提供执行与该状态相应的特定操作的机会2.Activity生命周期?
周期即活动从开始到结束所经历的各种状态。生命周期即活动从开始到结束所经历的各个状态。从一个状态到另一个状态的转变,从无到有再到无,这样一个过程中所经历的状态就叫做生命周期。
Activity本质上有四种状态:
1.运行(Active/Running):Activity处于活动状态,此时Activity处于栈顶,是可见状态,可以与用户进行交互
2.暂停(Paused):当Activity失去焦点时,或被一个新的非全面屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused 状态。此刻并不会被销毁,只是失去了与用户交互的能力,其所有的状态信息及其成员变量都还在,只有在系统内存紧张的情况下,才有可能被系统回收掉
3.停止(Stopped):当Activity被系统完全覆盖时,被覆盖的Activity 就会进入Stopped状态,此时已不在可见,但是资源还是没有被收回
4.系统回收(Killed):当Activity被系统回收掉,Activity就处于Killed 状态
如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。
在上面的四中常有的状态之间,还有着其他的生命周期来作为不同状态之间的过度,用于在不同的状态之间进行转换,生命周期的具体说明见下。
3.Android四大组件
Android四大基本组件:Activity、BroadcastReceiver广播接收器、ContentProvider内容提供者、Service服务。
Activity:
应用程序中,一个Activity就相当于手机屏幕,它是一种可以包含用户界
面的组件,主要用于和用户进行交互。一个应用程序可以包含许多活动,比如事件的点击,一般都会触发一个新的Activity。
BroadcastReceiver广播接收器:
应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
ContentProvider内容提供者:
内容提供者主要用于在不同应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。只有需要在多个应用程序间共享数据时才需要内容提供者。例如:通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。
Service服务:
是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要长期运行的任务(一边打电话,后台挂着QQ)。服务的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另一个应用程序,服务扔然能够保持正常运行,不过服务并不是运行在一个的进程当中,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉后,所有依赖于该进程的服务也会停止运行(正在听音乐,然后把音乐程序退出)。4.app测试和web测试有什么区别?
WEB测试和App测试从流程上来说,没有区别。
都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动。
从技术上来说,WEB测试和APP测试其测试类型也基本相似,都需要进行功能测试、性能测试、安全性测试、GUI测试等测试类型。
他们的主要区别在于具体测试的细节和方法有区别,比如:性能测试,在WEB测试只需要测试响应时间这个要素,在App测试中还需要考虑流量测试和耗电量测试。
兼容性测试:在WEB端是兼容浏览器,在App端兼容的是手机设备。而且相对应的兼容性测试工具也不相同,WEB因为是测试兼容浏览器,所以需要使用不同的浏览器进行兼容性测试(常见的是兼容IE6,IE8,chrome,firefox)如果是手机端,那么就需要兼容不同品牌,不同分辨率,不同android版本甚至不同操作系统的兼容。(常见的兼容方式是兼容市场占用率前N位的手机即可),有时候也可以使用到兼容性测试工具,但WEB兼容性工具多用IETester等工具,而App兼容性测试会使用Testin这样的商业工具也可以做测试。
安装测试:WEB测试基本上没有客户端层面的安装测试,但是App测试是存在客户端层面的安装测试,那么就具备相关的测试点。
还有,App测试基于手机设备,还有一些手机设备的专项测试。如交叉事件测试,操作类型测试,网络测试(弱网测试,网络切换)
交叉事件测试:就是在操作某个软件的时候,来电话、来短信,电量不足提示等外部事件。
操作类型测试:如横屏测试,手势测试
网络测试:包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。弱网络的模拟,据说可以用360wifi 实现设置。
从系统架构的层面,WEB测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是APP端是不能够保证完全一致的,除非用户更新客户端。如果是APP下修改了服务器端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。
还有升级测试:升级测试的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。
5.android和ios测试区别?
App测试中ios和Android有哪些区别呢?
1.Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;
2.多分辨率测试,Android端20多种,ios较少;3.手机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低版本中的ios系统中的应用,低版本ios 系统中的应用调用了新的资源库,会直接导致闪退(Crash);
4.操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等;
5.push测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示);
6.安装卸载测试:Android的下载和安装的平台和工具和渠道比较多,ios 主要有app store,iTunes和testflight下载;
7.升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号),
对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
另外:对于测试还需要注意一下几点:
1.并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音、录音等的播放时强制其他正在播放的要暂停;
2.数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等;
3.push(推送)测试:在开关机、待机状态下执行推送,消息先死及其推送跳转的正确性;
应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转否正确;
推送消息阅读前后数字的变化是否正确;
多条推送的合集的显示和跳转是否正确;
4.分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确;
5.触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会crash等6.app出现ANR,是什么原因导致的?
那么导致ANR的根本原因是什么呢?简单的总结有以下两点:
1.主线程执行了耗时操作,比如数据库操作或网络编程
2.其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。
细分的话,导致ANR的原因有如下几点:
1.耗时的网络访问
2.大量的数据读写
3.数据库操作
4.硬件操作(比如camera)
5.调用thread的join()方法、sleep()方法、wait()方法或者等待线程锁的时候
6.service binder的数量达到上限
7.system server中发生WatchDog ANR
8.service忙导致超时无响应
9.其他线程持有锁,导致主线程等待超时
10.其它线程终止或崩溃导致主线程一直等待。
7.app出现crash原因有哪些?
为什么App会出现崩溃呢?百度了一下,查到和App崩溃相关的几个因素:内存管理错误,程序逻辑错误,设备兼容,网络因素等,如下:
1.内存管理错误:可能是可用内存过低,app所需的内存超过设备的,app跑不起来导致App crash。
或是内存泄露,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。
亦或非授权的内存位置的使用也可能会导致App crash。
2.程序逻辑错误:数组越界、堆栈溢出、并发操作、逻辑错误。
e.g. app新添加一个未经测试的新功能,调用了一个已释放的指针,运行的时候就会crash。
3.设备兼容:由于设备多样性,app在不同的设备上可能会有不同的表现。
4.网络因素:可能是网速欠佳,无法达到app所需的快速响应时间,导致app crash。或者是不同网络的切换也可能会影响app的稳定性。
8.app对于不稳定偶然出现anr和crash时候你是怎么处理的?
app偶然出现anr和crash是比较头疼的问题,由于偶然出现无法复现步骤,这也是一个测试人员必备的技能,需要抓日志。查看日志主要有3个方法:方法一:app开发保存错误日志到本地
一般app开发在debug版本,出现anr和crash的时候会自动把日志保存到本地实际的sd卡上,去对应的app目录取出来就可以了
方法二:实时抓取
当出现偶然的crash时候,这时候可以把手机拉到你们app开发那,手机连上他的开发代码的环境,有ddms会抓日志,这时候出现crash就会记录下来日志。
尽量重复操作让bug复现就可以了
也可以自己开着logcat,保存日志到电脑本地,参考这篇:
adb logcat | find "com.sankuai.meituan" >d:\\hello.txt
方法三:第三方sdk统计工具
一般接入了第三方统计sdk,比如友盟统计,在友盟的后台会抓到报错的日志
9.app的日志如何抓取?
app本身的日志,可以用logcat抓取,参考这篇:
https://www.cnblogs.com/yoyoketang/p/9101365.html
adb logcat | find "com.sankuai.meituan" >d:\\hello.txt
也可以用ddms抓取,手机连上电脑,打开ddms工具,或者在Android Studio 开发工具中,打开DDMS关于ddms更多的功能,参考这篇:
https://www.cnblogs.com/gaobig/p/5029381.html
10.你平常会看日志吗,一般会出现哪些异常(Exception)?
这个主要是面试官考察你会不会看日志,是不是看得懂java里面抛出的异常,Exception
一般面试中java Exception(runtimeException )是必会被问到的问题app崩溃的常见原因应该也是这些了。常见的异常列出四五种,是基本要求。
常见的几种如下:
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常
11.请用自己最擅长的编程语言,将一个字符串反转并输出?
s = 'python'
print s[::-1]
12.给你一个模块,比如注册模块,你会怎么样设计与执行测试?
参:数据——》从哪里来(入口)——》到哪里去(出口)——》数据库(检验数据的正确性)
13.请说一下你以前公司功能测试通过的标准?(自由发挥)
你认为app测试过程中,相对于web,要更多注意哪些测试点?或者说app测试和web测试有哪些不同之处?
参:
1、他们的主要区别在于具体测试的细节和方法有区别,比如:性能测试,在WEB测试只需要测试响应时间这个要素,在App测试中还需要考虑流量测试和耗电量测试。
2、安装测试:WEB测试基本上没有客户端层面的安装测试,但是App测试是存在客户端层面的安装测试,那么就具备相关的测试点。
3、交叉事件测试:就是在操作某个软件的时候,来电话、来短信,电量不足提示等外部事件。
4、操作类型测试:如横屏测试,手势测试
5、网络测试:包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。弱网络的模拟,据说可以用
360wifi实现设置。主要是针对2G、3G、4G、wifi三种网络环境进行测试;
6、兼容性测试:在WEB端是兼容浏览器,在App端兼容的是手机设备。而且相对应的兼容性测试工具也不相同,WEB因为是测试兼容浏览器,所以需要使用不同的浏览器进行兼容性测试(常见的是兼容IE6,IE8,chrome,firefox)如果是手机端,那么就需要兼容不同品牌,不同分辨率,不同android版本甚至不同操作系统的兼容。(常见的兼容方式是兼容市场占用率前N位的手机即可),有时候也可以使用到兼容性测试工具,但WEB兼容性工具多用IETester等工具,而App兼容性测试会使用Testin这样的商业工具也可以做测试。
14.说说会用哪些抓包工具?怎么用的?
参:比如fiddler,主要用来做app抓包使用,先在fiddler客户端做好各项配置,端口设置为8888,然后在手机上设置代理,就可以抓包了,主要看的是服务器返回的值、还能够修改传入参数、传出的参数、模拟网络延时,去构造不同场景。
15.你觉得app的性能测试,即专项测试,需要重点关注那些方面?
参:内存、cpu占用、耗电量、流量、流畅度等
