前言:
这篇文章是凡叔集结最近凡叔在面试题的朋友们的面试题,基本上多的不敢说这里的题目你背完起码能压中百分之80,其中也有很多相对比较刁钻的问题,经过我们一整个群兄弟的整合以及收集最终出现了这么一篇文章,因为是面试题可能相对比较枯燥静下心来慢慢的去背,相信我你会感谢现在在背面试题的自己。
【文章的末尾给大家准备了大量的福利】
1.自我介绍?
我是谁、工作几年、你上家公司做什么、负责什么、你的优势、为什么适合这个职位、我想做什么、在这个职位上想得到什么
有自信、不能吞吞吐吐
时间长度2-3分钟
2编写测试用例有哪几种方法?
等价类、边界值、因果图、流程分析、错误分析、正交法、场景法、大纲法
3.测试的六条基本法则是什么?
一功二可三易四效五维六移,即一功能,二可维护性,三易用性,四效率,五可维护性,六可移植性
4.软件测试分类有哪些?(从是否关心软件内部结构的角度划分)
黑盒、白盒、灰盒
5.软件测试的测试流程是什么?
首先拿到需求文档》需求评审》编写测试计划》测试计划评审》编写测试用例》测试用例评审》开始测试》第一轮测试》第二轮测试》迭代》直至项目上线,提交测试报告。冒烟测试不属于测试流程,一般冒烟测试最多半天时间
6.编写测试用例的原则是什么?
百分之百的覆盖需求
7.接口测试的功能?
1) 请求参数、返回值
2) 不仅可以测试返回值还可以测试等价类、边界值、必填项,包括逻辑、功能、场景,还可以测试逆向思维的流程,还可以测试错误的流程,也可以测试正确的流程
3) 接口测试可以提高效率,缩短测试周期,在页面未出来之前也可以测试
4) 接口测试可以测大部分功能,但是测不了ui、兼容性
5) 接口只能测后端,用java写的
8.自动化工具都有哪些?
QTP既可以测B/S,也可以测C/S, 支持的脚本语言是vbscript, Selenium属于B/S工具,支持java,python语言,app自动化工具属于c/s架构
9..软件测试过程中必须经历那些阶段?
单元测试》集成测试》系统测试》验收测试
10. 黑盒测试包含那些测试内容?
逆向思维测试、冒烟测试、易用性测试、接口测试、兼容性测试
11. 如何确定一个问题是不是bug呢?
根据需求,与需求不一致,就是bug
12. 缺陷严重程度分别是什么?并将每个严重程度进行简单的描述?
致命、严重、一般、轻微、建议,致命级别指使系统崩溃、宕机,报404、500错误的,导致软件没有办法再使用下去,严重指该功能阻碍测试,影响测试,一般指等价类、边界值、ui、兼容性,不影响测试,轻微指一个字、一句话、不伤大雅的错误,建议其实不是bug,只是个人觉得不太合理,需求文档里面就没有。
13.缺陷优先级有哪些?从高到低排列?
P1、p2、p3、p4、p5,p1优先级最高,p5优先级最低
14.如何有效的记录缺陷?
保证该缺陷能复现出来,能记录该缺陷的每一个步骤是如何操作的
15.缺陷报告的准则规范是什么?
简洁、清晰、准确、完整、一致
16.基于过去行为的问题
比如你之前弄过的项目,出现的质量问题,你是怎么解决的
17..基于未来可能发生的行为问题
比如别的部门转过来一个岁数比较大的人,也不思进取,你怎么办
18..post和get有什么区别?
A.post是给服务器发送请求,get是从服务器获取请求
B、get提交的数据会放在url之后,以?分割url和传输数据,参数之间以&相连,如:EditPosts.aspx?name=test1&id=123456,POST方法是把提交的数据放在http包的body中
C、get提交的数据大小有限制,因为浏览器对url的长度有限制,而post方法提交的数据没有限制
D、get方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值
E、get方式提交数据,会带来安全问题,如登录,用户名和密码将出现在url上,如果页面可以被缓存或其他人访问,可以从历史记录获得该用户的账号和密码
19.那个阶段做接口测试?
集成测试的时候做接口测试
20.集成测试的策略有哪些?
自顶向下 自底向上 广度优先 深度优先
21.接口测试能做哪些事或者接口是啥?
软件里面的任何请求,任何方法,从服务器上传、下载数据都是通过接口完成的
接口测试工具jmeter、soapui、postman,接口压测更适合用jmeter,适合单接口测试,而loadrunner更适合测试场景、流程
22..想要测试一个网站最多能容纳多少人?
用负载测试,看网站进到多少人的时候开始出错,开始卡了
23.想要测试网站上的一个商品在整点秒杀的时候,最多能承受多少人点击这个按钮?
测试并发,必须能承受大批量的并发
24.有一个网站在高强度的用户活跃量情况下能不能正常运行?
测试稳定性,稳定性指找到网站最多能承受的最大用户量,然后用最大用户量在系统上长时间运行,以测试稳定性
25.你觉得你有哪方面优点,可以胜任这份工作?
本人比较细心认真,具有一定的计算机理论基础,良好的沟通能力,遇到问题及时沟通解决的能力
26.你觉得你有哪些缺点?
本人比较固执
27.回归测试
修改代码后,重新进行测试以确认修改没有引入新的错误,没有影响之前的功能,与本次修改有关系的部分也需要进行测试,保证以前版本功能正常
28.c/s与b/s架构的区别?
b/s架构用浏览器请求访问,是基于网页的系统,如一般的网站;c/s架构要有客户端和服务器端,如qq
29.http的URL包括哪些部分?
协议部分、域名部分、端口部分、虚拟目录部分、文件名部分、参数部分、锚部分,如:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
30.软件测试的目的是什么?
确认产品能工作、确保程序按预期结果执行、尽早尽可能多的发现不足、通过最少的资源,最大化的提高产品质量、测试是将软件质量化的过程、软件质量的度量和评估
31.测试计划包含那些内容?
概述、编写目的、项目背景、项目质量目标、预期读者、参考资料、测试环境、系统架构、软硬件环境要求、测试环境部署图、测试规划、测试范围、测试工具、人员、角色及职责、测试策略、系统测试、业务流程测试、功能点测试、UI界面测试、性能测试、兼容性测试、安全测试、测试进度安排、工作汇报
32..数据库常用sql语句
1)、创建数据库:create database database-name
2)、删除数据库:drop database database-name
3)、创建新表:create table depart(dept_id int (11) not null auto-increment,dept_name varchar(255) default null,primary key(dept_id))
4)、删除新表:drop table table_name
5)、表增加一列:alter table tabname add column column_name type
6)、查询语句:select * from table where 范围
7)、插入语句:insert into table(field1,field2) values(value1,value2)
8)、删除语句:delete from table where 范围
9)、更新语句:update table set field1=value1 where 范围
10)、查找语句:select * from table where field like '%value1%'
33.软件开发流程
可行性分析、需求分析、概要设计、详细设计、编码、测试、运行维护
34.白盒测试逻辑覆盖方法有哪些?
语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖
语句覆盖:每条语句至少执行一次
判定覆盖:每个判定的每个分支至少执行一次,也称为分支覆盖
条件覆盖:每个判定的每个条件应取到各种可能的值
判定/条件覆盖:同时满足判定覆盖条件覆盖,是判定条件覆盖的交集
条件组合覆盖:每个判定中各条件的每一种组合至少出现一次
35.白盒测试法的覆盖标准有哪些?
逻辑覆盖、循环路径覆盖、基本路径覆盖
基本路径覆盖:并不是测试所有路径的组合,仅保证每条基本路径被执行一次
36.查询数据库中指定行的方法
select * from table_name limit 5,10; 取数据库中从第5条开始的10条记录
或者 select top n * from(select top m * from table_name order by column_name) a order by column_name desc;查询第n到m条记录,也是常用分页方式
37. hosts原理
将一些常用的网址域名与其对应的ip地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从hosts文件中寻找对应的ip地址,一旦找到,系统会自动打开对应网页,若没有找到,系统会将网址提交dns域名解析服务器进行ip地址的解析。
38.alpha测试,beta测试
alpha测试:模拟用户环境测试,beta测试:真实用户环境测试
39.白盒测试方法
分为静态方法和动态方法两大类。静态分析是一种不通过执行而进行测试的技术;动态分析的特点是当软件系统在模拟的或者真实的环境中执行之前、之中和之后,对软件系统行为的分析,常用的六种覆盖测试方法属于动态分析方法。
40.白盒测试的重点是什么?
覆盖率测试为白盒测试的重点,一般可使用基本路径测试法达到语句覆盖标准
41.linux系统版本?
redhat系列、ubuntu
42.http协议
1)、http协议是无状态的
2)、http协议定义了很多与服务器交互的方法,最基本的有四种,分别是get、post、put、delete,对应着对这个资源的查、改、增、删4个操作,get一般用于获取/查询资源,post一般用于更新资源信息
3)、get和post的区别
a、get提交的数据会放在url之后,以?分割url和传输数据,参数之间以&相连,如:EditPosts.aspx?name=test1&id=123456,POST方法是把提交的数据放在http包的body中
b、get提交的数据大小有限制,因为浏览器对url的长度有限制,而post方法提交的数据没有限制
c、get方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值
d、get方式提交数据,会带来安全问题,如登录,用户名和密码将出现在url上,如果页面可以被缓存或其他人访问,可以从历史记录获得该用户的账号和密码
4)、http协议中的5类状态码:
1xx 提示信息,表示请求已被成功接收,继续处理
2xx 成功,表示请求已被成功接收,理解、接受,常见200,OK
3xx 重定向,要完成请求必须进行更进一步的处理。常见302 Found,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的request. 304 Not Modofied,代表上次的文档已经被缓存,还可以继续使用。如果不想使用本地缓存,可以用ctrl+F5强制刷新界面。
4xx 客户端错误,请求有语法错误或请求无法实现。400 Bad Request,客户端请求有语法错误,不能被服务器所理解。403 Forbidden, 服务器收到请求,但是拒绝提供服务。404 Not Found,请求资源不存在
5xx 服务器端错误,服务器未能实现合法的请求。500 Internal Server Error 服务器发生了不可预期的错误。503 Server Unavailable ,服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
5)从HTTP/1.1 起,默认都开启了Keep-Alive,保持连接特性,即当一个网页打开完成后,客户端和服务端用于传输HTTP的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
43.软件测试的目的
1)为了发现错误而执行程序的过程
2)测试是为了证明程序有错,而不是证明程序无错,发现错误不是唯一目的
3)一个好的测试在于它发现至今未发现的错误
4)通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用软件过程的缺陷,以便改进
5)没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。一个经过测试而正常运行了n个小时的系统有继续正常运行n个小时的概率
44.做好测试用例设计工作的关键是什么?
以较少的用例覆盖模块输出和输入接口,以最少的用例在合理的时间内发现做多的问题
45.做好测试计划工作的关键是什么?
一个测试计划,核心的三个要素是时间、资源、范围,时间就是什么时候做以及要花多久做,资源就是你要协调的人力、机器等资源,范围是你要测试的东西以及测试重点,测试策略具体就是怎么测试,风险控制就是一旦有问题采取什么应急措施等。
46.bug生命周期
新建、已分配、已打开、提交测试、已关闭或者重新打开
47.软件生命周期
问题定义、可行性研究、需求分析、开发阶段、测试阶段、维护
48.软件开发流程
需求分析、概要设计、详细设计、编码、测试、维护
49.压测时请求的参数从哪里来?
get请求是在request.querystring,post请求是在request.form里
- lINUX环境部署和搭建:
A.常用命令:
①linux系统下的文件复制
cp 源文件 目标文件 ,如将test1目录下 的file1复制到test3目录下,并将文件名改为file2,命令为:cp /test1/file1 test3/file2
②linux下的文件移动命令
1)mv 源文件 目标文件, 如将test1目录下的file1复制到test3目录下,并将文件名改为file2,命令为:mv /test1/file1 test3/file2
2) linux当前目录所有文件移动到上一级目录,命令为:mv *../
③.文件删除命令
rm [fir] 文件或目录,如删除/test目录下的file1文件,可以输入以下命令:rm -i /test/file1
④.从本地上传文件至linux服务器,或从linux服务器下载文件至本地
首先服务器安装了rz、sz,命令为yum install lrzsz;
然后通过xshell连接服务器;
命令rz 文件名,将文件传至linux服务器;sz 文件名,将文件下载到windows本地
⑤到目录cd 解压缩unzip tar 编辑vi vim 性能top 授权chmod 改变文件所有者chown
设置用户密码passwd 查看日志cat tail 用于比较两个文件或目录的不同 diff
- 接口测试需要提供什么?
开发提供接口文档
- 接口文档的内容包括:
一个规范的接口文档,要包含以下信息:
1)基本信息(接口名称、请求方法、请求路径、接口描述)
2)请求参数(请求头、请求体)
3)返回数据(不同情况的响应状态码、响应数据)
53.什么时候可以开始执行性能测试?
功能测试通过(一般需要执行性能测试的系统,都是用户量比较大、业务使用比较频繁、比较重要的功能模块)。
54.Loadrunner有哪些部分组成?
主要有三部分组成。
脚本生成器(Virtual User Generator):录制调试脚本用的。
场景控制器( Controller ):用脚本生成场景、执行场景,并在场景执行时进行监控。
结果分析器( Analysis ):场景结束后将监控的指标整理成图表展现给用户。
Virtual User Generator来录制脚本。
Controller 可以模拟多用户并发下回放脚本。
55.什么是集合点?设置集合点有什么意义?Loadrunner中设置集合点的函数是哪个?
在性能测试过程中,需要模拟大量用户在同一时刻,访问系统并同时操作某一任务,可以通过配置集合点来实现,多个用户同时进行某操作;
集合点可以在服务器上创建密集的用户负载,使LoadRunner能够测试服务器在负载状态下的性能。
设置集合点函数:lr_rendezvous("Meeting"); // Meeting是集合点名称
56.什么是场景?场景的重要性有哪些?如何设置场景?
场景用来模拟用户实际业务操作。
Loadrunner 中场景有手工场景和面向目标的场景。
设置场景:选择场景类型、设置运行时设置、模拟用户数、加减压方式、持续时间、配置负载生成。
①选择场景中需要的脚本。
②选择为目标场景,还是手工场景。
③设置用户数、设置产生负载的设备。
④设置执行策略。
为什么要创建参数?如何创建参数?
参数:在环境变化时必须使脚本具有环境变化的能力,就需要参数化(客户端发送到服务器端)
①.确定要参数话的数据
②.设定规则形式来取值
57.什么是关联?自动关联和手动关联?
关联:很多构架用sessionid等方法标识不同任务和数据,应用在每次运行时方式发送数据不完全相同,需要利用的机制对录制的脚本进行处理,这种机制叫做关联(服务端发送到客户端)
一般的关联步骤:
1.从服务器返回的数据中选取需要进行关联的数据。
2.将该数据存入脚本的一个参数中
3.将脚本中需要使用该数据的地方用参数来替换。
Tip:对于web来说,一般会用一个hidden 的 field存放。所以在可以服务器返回的记录查找该字段值。
关联的目的:
1.简化或优化代码
例如,如果依次执行一系列的相关查询,您的代码可能会变得很长。为了减少代码的大小,可以嵌套查询,但这样会失去准确性,而代码会变得复杂而难以理解。通过关联语句,不需要嵌套就可以链接查询。
2.用于动态数据
许多应用程序和网站当前日期和时间标识会话。如果尝试重播脚本,该操作将会失败,应为当前时间与录制时间不同(LR自带的WEB演示程序)。通过关联数据可以保存动态数据,并在整个方案过程中使用这些数据。
关联的两种方法:
方法一:自动关联
1.Tools -Recording Options。
2.设置完成后录制登陆 - 退出过程。
3.利用LR自带的自动关联进行关联。
方法二:手动关联
1:录制测试脚本,录制二遍
2:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联(Tools下的 Compare with Vuser进行2个相同操作的脚本对比)
3:确定插入关联的位置
4:在VIEW TREE中使用web_reg_save_param函数手动建立关联(web_reg_save_param()函数主要根据需要做关联的动态数据前面和后面的固定字符串来识别、提取动态数据,所以在做关联时,需要找出动态数据的左、右边界字符串)
5:将脚本中有用到关联的数据,用参数代替
6:验证关联的正确性
常见的需要关联的场景
1.登录操作。
2.先查后修改,先差后删除。
3.并发控制:防止2个用户同时修改或同时删除一条记录。(用户登陆;客户端发送请求后,服务端验证正确性后,发送给客户端sessionid,是某种规则产生。)
58.说下python的内存管理和垃圾回收机制
答:python的内存管理机制有三种:引用计数、垃圾回收、内存池。
引用计数:引用计数是一种非常高效的内存管理手段,当一个pyhton对象被引用时其引用计数增加1,当其不再被引用时引用计数减1,当引用计数等于0的时候,对象就被删除了
垃圾回收:引用计数、标记清除、分代回收(https://www.jianshu.com/p/892aa84e5814)
内存池:Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。
另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。
也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
- 内存过大时你有什么调优手段
答:1.手动垃圾回收 2.避免循环引用(手动解循环引用和使用弱引用)3.调高垃圾回收阈值 - 数据库的事务是什么
答:数据库事务是指一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性 - cookie与session的区别是什么
答:(1)Cookie以文本文件格式存储在浏览器中,而session存储在服务端,因为每次发起 Http 请求,都要携带有效Cookie信息,所以Cookie一般都有大小限制,以防止增加网络压力,一般不超过4k
2)cookie的存储限制了数据量,只允许4KB,而session是无限量的
(3)我们可以轻松访问cookie值但是我们无法轻松访问会话值,因此它更安全
(4)设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
62.http和https的区别
答:1、https协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(原来网易官网是http,而网易邮箱是https。)
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
63.自动化测试用例如何设计?
答:自动化用例的设计依据场景诉求构造合理输入及输出断言,测试用例需要满足健壮性,有效性,可扩展,时效性要求
64、如何对测试用例进行优化与提炼,精简不必要测试用例?
答:等价划分,可从代码路径,业务要素,领域模型三个方面做最大覆盖最小流量用例精简,也可以考虑在变更基础上的精准测试
65、自动化测试框架设计中的分层如何实现,有哪几类分层?
答:自动化框架设计包含数据流,执行流,数据流解决测试数据存储及使用方式,执行流定义标准测试流程,一个标准的测试框架流程应该是数据清理,数据准备(入参,db,外部依赖),结果验证
66、如何准备完整的测试数据?
答:这个问题没啥可答的,要让一个用例能够符合预期就需要构造合理的输入,数据准备,需要依赖对于系统设计及业务的了解,没啥方法,但是可以借助实时流量提供准备数据效率
67、自动化测试执行前后,分别需要进行何种操作,以确保自动化不会影响系统运行?
答:用例运行可独立部署集群或者线下集群,一般很少在生产环境运行
68、如何基于Mock实现数据结果的返回,实现外部接口的测试?
答:mockito这些工具类可以看一下,也可以写拦截器构造返回对象
69、如何评判系统是否具备可测性?
答:这个问题比较广泛,我需要点时间整理出来
70、自动化测试执行中,如何对多个用例进行并发运行?
答:并发运行testng具备,其余的可看一下jenkins的多job或者自己写并发调度
71、在较大自动化用例运行压力下,如何实现自动化测试框架的分布式集群?
答:要做到这个点用例需要具备隔离性,其余的均衡调度就可以了
72.Selenium 中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
答:
1.添加元素智能等待时间 driver.implicitly_wait(30)
2.添加强制等待时间(比如 python 中写 sleep)
3.try 方式进行 id,name,clas,x path, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种
3.如何提高 Selenium 脚本的执行速度?
代码优化,多任务,分布式部署都是可以提升脚本执行速度的。
73、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
答:
1.time.sleep( )
2.driver.implicitly_wait(30)
3.多用 try 捕捉,处理异常
74、你的自动化用例的执行策略是什么?
答:自动化测试与软件开发本质上是一样的,利用自动化测试工具,经过测试需求分析,设计出自动化测试用例,从而搭建自动化测试的框架,设计与编写自动化脚本,验证测试脚本的正确性,最终完成自动化测试测试脚本(即主要功能为测试的应用软件)并输出测试结果
75、自动化测试的时候是不是需要连接数据库做数据校验?
答:从数据库层面来进行数据校验可以更方便验证系统的数据处理方面是否正确,数据处理逻辑正常后,UI 层面上的校验也是需要做的。
76:id,name,class,xpath, css selector 这些属性,你最偏爱哪一种,为什么?
答:css 、xpath 几乎所有的元素都可以定位到,但是它们的短处在于页面上更改了元素后位置很容易改变,所以首先使用的还是 id 或者 name 等。
77、如何去定位页面上动态加载的元素?
答:触发动态加载元素的事件,直至动态元素出现,进行定位
78、如何去定位属性动态变化的元素?
答:xpath 或者 css 通过同级、父级、子级进行定位
79、点击链接以后,Selenium 是否会自动等待该页面加载完毕?
答:会的
80、什么是 page object 设计模式?
答:简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的体现面向对象语言(比如 java 或者 python)的面向对象和封装特性。
81、如何在定位元素后高亮元素(以调试为目的)?
答:用 JavaScript 等脚本来重置元素属性,给定位的元素加背景、边框
82、什么是断言?
答:断言的英文是 assertion,断言检查的英文是 assertion checking。
断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的条件。
83、你觉得自动化测试最大的缺陷是什么?
答:
1.不稳定
2.可靠性
3.不易维护
4.成本与收益
84、Webdriver 可以用来做接口测试吗?
答:接口测试有现成的模块来处理,WebDriver 是用于做 WebUI 自动化测试的。如果要实现接口测试,可以使用 Requests 模块来实现
85.Android APP 内存不足时, 系统如何结束进程获得内存?
答:系统优先结束被挂起(暂停)的进程,释放内存
86、APP 测试常见的严重问题有哪些? 分别引起的原因有哪些?
答:常见的有 crash、ANR(应用无响应、卡死),一般由设备碎片化、网络波动大、内存泄漏、代码编写错误
Android 测试与 web 测试有什么区别?
答:相同点:
1.设计测试用例均依据等价类、边界值等方法,测试原理相同;
2.大多数都采用黑盒测试方法来验证业务功能;
3.需要检查界面布局、风格和按钮是否美观、统一等(UI 测试);
4.测试页面载入和翻页的速度、登录时长是否溢出等问题(性能测试)
5.测试应用系统的稳定性; 不同点:
1.手机作为通信工具,通信等一些行为会对 APP 产生(中断测试)
2.手机用户对 app 产品的安装卸载操作:从上一版本/上两个版本直接升级到最新版本(安装卸载测试);
3.web 自动化测试使用的工具较常用的是 selenium,而 android 手机自动化测试比较常用的自动化工具是 monkey、monkeyrunner、Appium(测试工具不一样)
87、app 测试有哪几种环境?
答:
1.本地环境: app 安装的手机环境和电脑搭建的自动化测试环境(比如安卓 SDK 等等) 。
2.服务器环境:war 包部署的服务器,服务器可以通过浏览器访问,也可以通过 app去访问。(访问的是 web 程序的接口)
88、简单介绍一下 Android SDK 的安装步骤:
答:
1.下载 jdk 和安卓 sdk
2.安装 jdk, 配置环境变量(java_home、 classpath、 path)
89、请简要介绍一下移动应用及其服务端的测试点?
答:
1.移动应用主要有权限、安装运行卸载、UI、功能、性能、中断、兼容性、安全性、回归、升级更新、用户体验。(app 的 11 大测试点)
2.服务端有接口测试、性能测试、安全测试。
90、如何判断 app 的 bug 是客户端问题还是后台问题
答:这个要根据业务来,一般数据的问题前端的问题多些,一般做法是有问题提给前端开发, 他们知道是他们自己的问题还是后台返回的数据问题。
91、安卓中如何取出日志信息?
答:
1.把安卓系统日志信息实时导入到本地: adb logcat -v time > d:\mylog.log
2.运行使用某个 app,实时获取该 app 的日志信息(cmd 里面的返回信息) : adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log
92、常见的 adb 命令:
答:
1.查看当前连接的设备: adb devices
2.安装软件: adb install 路径\xx.apk
3.卸载软件: adb uninstall <包名>
4.从电脑上发送文件到设备: adb push <本地路径> <远程路径> adb push C:\test1.txt /sdcard/
5.从设备上下载文件到电脑: adb pull <远程路径> <本地路径> adb pull /sdcard/test1.txt D:
6.实时获取日志: adb logcat -v time > D:\mylog.log
7.登录终端设备 shell: adb shell
8.查找包名/活动名: adb logcat | findstr START
(脚本中, cmp= 后面的值就是 包名/activity 名称)
9.启动 APP 启动
adb shell am start -n packageName/activity
10.关闭 app
语法: adb shell am force-stop 包名
11.监控 APP 启动时间
adb shell am start -W packageName/activity
12.Monkey 命令:
adb shell monkey -v -p mypackage 50
93、APP 这么多主流机型如何测试 ?
答:
我们公司就买了, 魅族, 华为, 小米, iphone7、iphone8 、iphone8plus 、iphone
x 测试兼容性,有些没有的机型,先借用同事的手机进行测试,同时申请公司购买,或者采用云真机。
94、App 崩溃(闪退),可能是什么原因导致的?
答:缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件.会导致越来越卡.也会出现闪退情况,运行的程序过多,导致内存不足
应用版本兼容问题:如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本 在调试中,也会造成应用闪退。解决方法:如果是版本太旧,更新为新版本即可;如果是新版本闪退, 可能是应用在改版调试,可卸载后安装旧版。检查 APP 中访问网络的地方,组件中的 ImageView 是否可以正常的下载并显示到 app 页面上。检查 APP 的 sdk 和手机的系统是否兼容。在一些特定情况下的闪退,比如播放视频,在 Android5.0 升级到 Android6.0 的时候, 有些系统 API 老版本有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退
95、Appium 都有哪些启动方式
答:
1.客户端启动
2.命令行启动
96、请简单介绍一下使用过的安卓 UI 自动化测试工具?
答:appium:是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。robotium:是一款国外的 Android 自动化测试框架,主要针对 Android 平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的 API,能够对各种控件进行操作。
97、请说明 Android 手机和 IOS 手机,系统有什么区别?
答:
1.两者运行机制不同:IOS 采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2.两者后台制度不同:IOS 中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3.IOS 中用于 UI 指令权限最高,安卓中数据处理指令权限最高。接口自动化测试
98、按你的理解,软件接口是什么?
答:
就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。
99、HTTPS 在哪一层?
答:HTTPS 在应用层。
100、get 和 post 区别是什么?
答:POST 和 GET 都是向服务器提交数据,并且都会从服务器获取数据。区别:
1)传送方式:get 通过地址栏传输,post 通过报文传输
2)传送长度:get 参数有长度限制(受限于 url 长度),而 post 无限制
3)GET 产生一个 TCP 数据包(对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200 返回数据),POST 产生两个 TCP 数据包(对于 POST,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok 返回数据)
4)get 请求参数会被完整保留在浏览历史记录里,而 post 中的参数不会被保留
5)在做数据查询时,建议用 GET 方式;而在做数据添加、修改或删除时,建议用 post 方式
101、常见的 POST 提交数据方式
答:主要有四种方式:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xml 等。
102、什么是 DNS?
答:DNS 是域名系统 (Domain Name System),DNS 是用来做域名解析的,它会在你上网输入网址后,把它转换成 IP,然后去访问对方服务器;没有它,你想上百度就要记住百度的 IP, 但有了 DNS 的处理,你只需要记住对应网站的域名,即网址就可以了。
103、请问你们公司是如何做接口测试的?
答:
接口测试实际跟一般测试不同就是测试用例的设计部分。
①获取接口规范。
②设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑 盒用例那一套)。
③各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选,还 有考虑参数有互斥或关联的情况)。
④接口返回值各种验证(符合接口文档需求)
⑤了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/…)
⑥接口能并发执行吗、安全吗,性能满足要求吗?
⑦采用工具或者自写代码来验证。
⑧发现问题跟功能测试一样,该报 bug 报 bug,该跟踪状态的跟踪状态。
104、怎么设计接口测试用例?
答:
通常,设计接口测试用例需要考虑以下几个方面:
①是否满足前提条件
有些接口需要满足前提,才可成功获取数据。常见的,需要登录 Token 逆向用例:针对是否满足前置条件(假设为 n 个条件),设计 0~n 条用例
②是否携带默认值参数
正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值, 其他不填写,设计 1 条用例
③业务规则、功能需求
这里根据时间情况,结合接口参数说明,可能需要设计 N 条正向用例和逆向用例
④参数是否必填
逆向用例:针对每个必填参数,都设计 1 条参数值为空的逆向用例
⑤参数之间是否存在关联
有些参数彼此之间存在相互制约的关系
⑥参数数据类型限制
逆向用例:针对每个参数都设计 1 条参数值类型不符的逆向用例
⑦参数数据类型自身的数据范围值限制
正向用例:针对所有参数,设计 1 条每个参数的参数值在数据范围内为最大值的正向用例
105、你做接口测试,测什么?
答:
可用性测试
根据约定的协议、方法、格式内容,传输数据到接口经处理后返回期望的结果:
·接口功能是否正确实现;
·返回值测试 - 返回值除了内容要正确,类型也要正确,保证调用方能够正确地解析;
·参数值边界值、等价类测试; 错误和异常处理测试
·输入异常值(空值、特殊字符、超过约定长度等),接口能正确处理,且按预期响应;
·输入错误的参数,接口能正确处理,并按预期响应;
·多输入、少输入参数,接口能正确处理,且按预期响应;
·错误传输数据格式(如 json 格式写成 form 格式)测试; 安全性测试,主要指传输数据的安全性:
·敏感数据(如密码、秘钥)等是否加密传输;
·返回数据是否含有敏感数据,如用户密码、完整的用户银行账号信息等;
·接口是否对传入的数据做安全校验,如身份 ID 加 token 类似校验;
·接口是否防止恶意请求(如大量伪造请求接口致使服务器崩溃);性能测试,如接口的响应时间、并发处理能力、压测处理情况:
·并发请求相同的接口(特别为 POST 请求),接口的处理情况(如插入了相同的记录导致数据出错,引发系统故障);
·接口响应时长在用户可忍受的范围内;
·对于请求量大的接口做压测,确定最大的瓶颈点是否满足当前业务需要;
106、平常用什么工具测接口的?
答:常用 http 协议接口测试工具,如:postman、fiddler、jmeter;webService 接口用 SoapUI、jmeter 等。
107、没有接口文档,如果做接口测试?
答:用抓包工具把接口抓取处理,然后针对性进行测试;接口中字段信息不清楚的,找时间 集中寻求开发解答。(常用抓包工具 Fiddler、Charles 等)
108、在手工接口测试或者自动化接口测试的过程中,上下游接口有数据依赖如何处理?
答:用一个全局变量来处理依赖的数据,比如登录后返回 token,其它接口都需要这个 token,那就用全局变量来传 token 参数。
109、依赖于第三方数据的接口如何进行测试?
答:mock
接着面试官会问你,如果 mock 的,然后你就顺着坑继续挖,搭建 mock 服务,参考这篇http://www.51ste.com/share/det-485.html
110、接口测试中,依赖登录状态的接口如何测试?
答:依赖登录状态的接口的本质上是在每次发送请求时需要带上 session 或者 cookie 才能发送成功,在构建 POST 请求时添加必要的 session 或者 cookie
111、如何模拟弱网做测试?
答:Fiddler 和 charles 都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试。具体可以看《几种弱网模拟方法,总有一种适合你》
112、你平常做接口测试的过程中发现过哪些 bug?
面试官出这个题,主要是想知道你是不是真的做过接口测试,毕竟现在很多小伙伴简历经过 包装(不包装连面试机会都没有,没办法,为了生存,能理解)
答:
常规错误,接口没实现,没按约定返回结果,边界值处理出错等。
输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理; 输入错误的参数、多输入、少输入参数,接口可能出现的错误;
安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请 求拦截等;
性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;
113、当一个接口出现异常时候,你是如何分析异常的?
答:先抓包,用 fiddler(charles)工具抓包,或者浏览器上 F12 调试工具;APP 上的话,那就用 Fiddler 做代理,通过手机设置代理去看请求和返回报文;
查看后端日志,如 Linux 系统通过 xhell 连上服务器,查看接口日志,查看是否有报错信息
(命令:tail -f 日志文件);
114、如何分析一个 bug 是前端还是后端的?
答:
平常提 bug 的时候,前端开发和后端开发总是扯皮,不承认是对方的 bug。
这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就 是前端发的数据不对;
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯。
115、你们做接口测试自动化吗?
答:现在针对大量应用,普遍推崇做接口测试自动化,维护成本低、收益高。常用的工具有 许多,如 Jmeter、Robot Framework、pytest 等。
116、列出几个 JMeter 监听器?
答:一些 JMeter 监听器是: 集合报告
汇总报告 查看结果树
用表格查看结果图形结果
BeanShell Listener 摘要报告等
117、在 python 中进行数据驱动测试
答:在 unittest 中,没有自带的数据驱动,我们得借助 ddt 来实现,首先,我们得在 python 运行环境中安装 ddt,用下列命令安装
pip install ddt
另 外 一 个 测 试 框 架 pytest , 它 自 带 数 据 驱 动 实 现 , 是 通 过
@pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。也可以根据自己需求用 python 实现数据的读取和驱动。
118、接口自动化中的关联怎么处理?
答:把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使 用 setattr()函数),下一个请求去调用这个类属性
119、自动化测试怎么校验结果?
答:断言 ,预期结果与实际结果对比
数据库校验,根据测试场景来查询数据库里的数据和请求之前的数据进行比对
120、自动化使用的测试框架是什么?简述自动化框架的设计与维护
答:测试框架:python+unittest+requests+ddt+openpyxl+pymysql+logging
python:入门简单,语法简洁
unittest :定义一个测试用例类,具体的方法来维护测试用例的生命周期,测试场景行为, 测试用例 前置场景,行为,期望结果,实际结果,断言方法,Setup teardown 方法
requests:接口调用 ,支持 http 请求的库,API 简洁,提供不同的 http 请求方法,支持session,cookies,
ddt :数据驱动,ddt 类装饰器,data 测试方法装饰器 unpack 解包可迭代的数据类型普通用户,数据库,配置文件—(基础数据)
openpyxl: 数据管理 excel 管理数据,使用 openpyxl 模块来进行 excel 数据的读和写
(excle,csv, json, yaml, txt 都可以管理测试数据)
pymysql:数据库交互,数据校验
eval,json:数据格式的转换 Eval 将 python 支持的格式转换成对应的格式
logging:日志处理, 统一日志输出格式,渠道,级别,执行结果的记录,便于定位问题jenkins:持续集成
2/框架设计思路:数据驱动+结构分层(可读性,可维护性,可扩展性)
数据驱动:将维护数据与代码分离,接口调用行为一致,针对不同的参数组合驱动不同的测 试场景,减少代码冗余
结构分层:数据层+用例层+逻辑层数据层:测试数据的支撑 data.xls
用例层:用例的执行 test_register.py test_recharge.py
逻辑层:公用的方法的封装与提取 doexcle.py do_mysql.py http_requests.py logger.py 等模块
框架设计步骤:
准备测试数据: EXCEL 表准备测试用例—excel 数据的读取—参数值的替换
发起请求:请求方法(get/post 方法进行封装—URL 的拼接(不同—参数转化为字典拿到请求的返回值:解析返回值 code,status,msg 信息
断 言 好处:
1、自动化测试用例和手工测试用例的完美结合,减少重复工作
2、配置灵活,可以自主切换测试环境,执行测试用例
3、常用功能进行封装,逻辑清晰,易于维护
4、统一执行入口,管理测试用例集:
run.py 模块通过模糊查找来选择需要执行的测试用例
5、持续集成,定时构建,快速反馈
121、具体的在这个项目中自动化怎么应用到实际的,您对自动化结果的分析
答:完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到jenkins,配置定时执行,生成 html 报表,查看测试通过率,查看接口的功能每次发版时,进行回归测试,新功能开发未提测前
122.说明jmeter的工作原理?
jmeter就像一群将请求发送到目标服务器的用户一样。它收集来自目标服务器的响应以及其他统计数据,这些统计数据通过图形或表格显示应用程序或服务器的性能。
123.提到JMeter中处理器的类型是什么?
JMeter中的处理器类型为:①预处理器;②后处理器。
124.正则表达式中的“包含”和“匹配”表示什么?
在正则表达式中,contains表示正则表达式与目标的至少一部分匹配。匹配表示正则表达式匹配整个目标。如“alphabet”与“al.*t”匹配。
125.说明JMeter中的计时器是什么,计时器的类型是什么?
默认情况下,JMeter线程将连续发送请求而不会暂停。为了在请求之间暂停,使用了计时器。使用的一些计时器包括恒定计时器,高斯随机计时器,同步计时器,均匀随机计时器等。
126.解释什么是JMeter中的断言?断言的类型有哪些?
断言有助于验证被测服务器是否返回了预期结果。
JMeter中一些常用的断言是:
响应断言 持续时间断言 大小断言(Size Assertion) XML断言 HTML断言
127说明如何减少JMeter中的资源需求?
①使用非GUI模式执行测试,如 jmeter –n –t test.jmx –l test.jtl
②在加载期间,测试不使用“查看结果树”或“查看表中的结果”监听器,仅在脚本编写阶段使用它们;
③不要使用功能模式;
④与其使用大量相似的采样器,不如在循环中使用相同的采样器,并使用变量来改变采样;
128.解释如何在JMeter中执行尖峰测试(Spike testing)?
通过同步,可以实现计时器JMeter尖峰测试。同步计时器将阻塞线程,直到阻塞了特定数量的线程,然后将它们全部释放,从而产生了巨大的瞬时负载。
小贴士:尖峰测试 也可以称为冲击测试,反复冲击服务器。指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景。
解释如何在JMeter中捕获身份验证窗口的脚本?
通常,可以通过录制来捕获脚本:
首先,必须在Testplan(测试计划)中使用 Threadgroup,然后在 Workbench(工作台) 中使用HTTP代理服务器;
之后,在“全局设置”框中设置端口号(如8911),然后在 IE高级选项>连接>局域网设置中 开启 代理设置,并将地址修改为localhost,端口改为8911。
然后,HTTP代理服务器中选择 目标控制器 Testplan>Threadgroup,然后启动HTTP代理服务器并运行应用进行登录。
129.如何测试一个App的登录场景?
APP登录场景大体从以下几个方面进行: 页面基本元素的操作。 大量字符,特殊字符,边界值,必填项校验。
注册手机号的特殊性验证,注册邮箱的格式验证。 密码大小写是否敏感,密码是否加密展示,密码是否有可见按钮功能,密码框能否使用复制粘贴。
验证码校验:必填项,过期,错误,无网络时获取验证码,多次获取,超过获取次数,输入验证码后,修改手机号。
登录时与系统的交互:锁屏,蓝牙,home,后退,横竖屏,修改字体字号。
逆向思维:已注册账号注册,未注册账号忘记密码,未注册账号登录,注册过程中退出再次注册。 输入法交互,切换输入法,切换输入模式,手写/九宫格。
登录账号的多样性:多个账号轮流登录,同一个账号多角色登录。 第三方登录验证:账号授权,信息正确,取消授权。
登录页面跳转,返回,登录成功及其他页面跳转。 手机兼容性测试:分辨率兼容,系统兼容,系统版本兼容,App版本兼容。
网络切换,网络断开,弱网。
130、Push消息如何测试?
Push消息的测试可以从以下几个方面进行: 检查Push消息是否按照指定的业务规则发送。
检查不接收推送消息时,用户不会再接收到Push消息。
如果用户设置了免打扰的时间段,检查在免打扰时间段内,用户接收不到Push。在非免打扰时间段内,用户能正常收到Push。
当Push消息是针对登录用户的时候,需要检查收到的Push与用户身份是否相符,没有错误的将其他人的消息推送过来。一般情况下,只对手机上最后一个登录用户进行消息推送。
测试Push时,在开关机、待机状态下执行推送,消息及其推送跳转的正确性。 push消息时,会有红点展示,推送消息阅读前后数字的变化是否正确;
应用在开发、未打开状态、应用启动且在后台运行的情况下是push显示和跳转是否正确。 多条推送的合集的显示和跳转是否正确。
131、App的闪退通常是什么原因造成的?
APP闪退的原因可能是: 缓存垃圾太多,Android系统的特性,如果长时间不清理垃圾文件,会导致越来越卡,甚至闪退。
运行程序太多,导致内存不足。 应用版本兼容问题,分辨率兼容问题。 APP中访问网络的地方,组件能否正常下载并显示。
APP的SDK与手机系统不兼容。 系统升级后,新版本不兼容老版本的API,返回对象失败,报空指针。 软件权限未开放。
132、测试过程中遇到app出现crash或者ANR,你会怎么处理?
APP出现Crash或ANR,可以从以下几个方面处理: 可以先把日志过滤出来:adb logcat | findstr xxxxx(过滤日志信息) ; 然后再搜索其中的关键字,比如:exception、crash,看看是哪些方法或者异常导致了问题;初步定位问题原因后,可以交给开发人员去具体查找深层原因并修复。
133、你平常会看日志吗, 一般会出现哪些异常(Exception)?
这个主要是面试官考察你会不会看日志,是不是看得懂Java里面抛出的异常,一般面试中Java
Exception(runtimeException )是必会被问到的问题,app崩溃的常见原因应该也是这些了。常见的异常列出四五种,是基本要求。
常见的几种如下: NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常
IllegalArgumentException - 传递非法参数异常 ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常 IndexOutOfBoundsException -
下标越界异常 NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常 SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常
134、APP 测试的内容主要包括哪些,如何开展?
APP测试的进行,可以从以下几个方面展开: 功能测试: 业务逻辑正确性测试:依据产品文档->测试用例编写。
兼容性测试:
1.系统版本:Android:官方版本,定制版本;IOS:官方提供版本。
2.分辨率:720 * 1280 1080* 1920。
3.网络情况:2g 3g 4g 5g Wi-Fi。
异常测试:
1.热启动应用:应用在后台长时间待机;应用在后台待机过程中,手机重启。
2.网络切换和中断恢复:网络切换;中断恢复。
3.电话信息中断恢复。
升级,安装,卸载测试:
1.升级测试:临近版本升级(1.0->1.1);跨版本(1.0->…->2.2)。
2.安装测试:首次安装;覆盖安装(同版本,不同版本覆盖);卸载后安装。
3.卸载测试:首次卸载;卸载安装后再卸载。
健壮性测试:
1.手机资源消耗:cpu,内存。
2.流量消耗:图片,数据,视频。
3.电量测试。
4.崩溃恢复。
135、APP性能测试关注点及常见APP性能测试工具
1.性能关注点
包体大小:
包体大小能被列为性能指标,是从APP性能指标及运营两个维度考虑的,用户是更希望包体小的同时性能要好,有时它们会是一个互相取舍的关系。
启动时长:
移动应用的启动时间是用户体验的一个重要方面,IOS一直建议尽可能的缩短启动时间,防止用户不愿意使用它们。对于浏览器而言,由于程序启动时还会有教育页和闪屏的下发,因此启动时间的获取显得尤为重要。
启动时间分为冷启动时间和热启动时间,所谓的“冷启动”,就是一个完全没有运行的应用的启动时间,与热启动(应用已经在后台运行,某个事件将其带至前台)相比,由于此时系统尚未建立缓存,因此冷启动往往要较平时(热启动)耗费更长的时间。
内存使用: 在Android系统中,每个APP进程除了同其他进程共享(shared dirty)外,还独用私有内存(private
dirty),通常我们使用PSS(=私有内存+比例分配共享内存)来衡量一个APP的内存开销。移动设备的内存资源是非常有限,为每个APP进程分配的私有内存也是有限制。一方面我们要合理的申请内存使用,以免导致频繁的GC(垃圾回收机制)影响性能和大对象申请发生内存溢出;另一方面,我们要及时释放内存,以免发生内存泄漏。
CPU占用率:
一般情况下,用主流手机使用APP20%-40%的CPU占用率算是合理的,当然这个数值随着近年来手机硬件配置的提高,会略微下降,如果CPU占用率超过80%就非常值得我们去关注了。
图片处理器每秒刷新的帧数(FPS):
可用来指示页面是否平滑的渲染。手机APP帧率FPS,30-60都可接受,上了60对于人眼主观感受差别就不大了。对于移动应用开发而言,并不是FPS越高就一定越好,FPS取决于显卡,其次是内存、CPU,然后是网络。故综合APP其他性能指标,选择一个适合的FPS即可。
电量:
相对于PC来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为重要。另外,android的很多特性都比较耗电(如屏幕,GPS,sensor传感器,唤醒机制,CPU,连网等的使用),我们必须要慎重检查APP的电量使用,以免导致用户手机耗电发热,带来不良体验。
流量:
目前的网络类型包含2G\3G\4G\5G\wifi,其中还有不同运营商的区分,我们在APP的使用中经常遇到大资源,重复请求,调用响应慢,调用失败等各种情况。在不同的网络类型之下,我们不仅要控制流量使用,还需要加快请求的响应。另外,对于需要联网的手游来说,部分游戏对不同联网方式的网络类型采用了不同的流量消耗策略,主要分为wifi环境和蜂窝网络环境。所以针对不同的游戏,我们统计流量消耗时,可能要连接不同的网络进行测试。
2.app性能测试工具
GT和iTest,Emmagee APT ,DDMS ,手机自带开发者选项中的工具,也可以通过adb命令来查看等
136、如何对app进行弱网测试
一款APP针对不同网络情况下都需要保证不会崩溃,同时尽可能做到在弱网情况下也能达到功能正常使用,或者使用体验达到最佳。弱网测试可以测试APP的加载时间、可用性、稳定性和健壮性。这时我们就可以借助工具来模拟不同的网络状况,模拟2G、3G或弱网情况进行测试。工具可以选择Fiddler也可以选择Charles也可以选择其他工具。
137.自动化遇到用例fail掉如何排查故障?
答:看出错log,如果能按层次说清楚排查失败:手工查应用是否真的有bug, 确认不是bug,是不是新版本引入了新的变更,调试脚本看看自己的脚本是不是因为没有等待元素出现后就操作了,是不是元素上面有其他元素出现这样操作是不是操作了其他的元素上了
138、说说接口测试的流程和接口自动化流程,介绍一下request有哪些内容?
答:(1)流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。 (2)request 内容:1,封装了get、post等;
2、以关键字参数的方式,封装了各类请求参数,params、data、headers、token、cookie等;3,封装了响应内容,status_code、json()、cookies、url等;
session会话对象,可以跨请求;
139、接口测试用例的编写要点有哪些?
1)必填字段:请求参数必填项、可选项
2)合法性:输入输出合法、非法参数
3)边界:请求参数边界值等
4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
5)响应数据校验:断言、数据提取传递到下一级接口…
6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点
8)安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)
140、postman的使用方式?高级用法?mock的应用场景和基础用法?
答:A,基础使用:入参出参校验返回;
b,Environment–配置不同的环境参数,Globals即设置全局变量,Pre-request Script–配置使用环境变量或进行前置脚本处理;
c,团队可以更好地并行工作,前后端人员只需要定义好接口文档就可以开始并行工作,互不影响,只在最后的联调阶段往来密切,开启TDD(Test-Driven Development)模式,即测试驱动开发;
141、你之前自动化测试的数据放哪?怎么使用?公共变量的管理方式?管理测试用例的手段?如何提高用例覆盖率?接口测试关联性接口实现方式?
答:测试数据存放总结:
1.对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini)
2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成
3.对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以
4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理
5.对于邮箱配置的一些参数,可以用ini配置文件
6.对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据
7.对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头,十年八年都不会变更的。
142、不可逆的操作,如何处理,比如删除一个订单这种接口如何测试?
此题考的是造数据的能力,接口的请求数据,很多都是需要依赖前面一个状态的
比如工作流这种,流向不同的人状态不一样,操作权限不一样,测试的时候,每种状态都要测到,就需要自己会造数据了。
平常手工测试造数据,直接在数据库改字段状态。那么自动化也是一样,造数据可以用python连数据库了,做增删改查的操作
测试用例前置操作,setUp做数据准备
后置操作,tearDown做数据清理
143、说出5个以上 Linux 命令(注重考察性能测试监控常用命令?)
答:cd、ls、grep、mkdir、pwd、ping等等,重要是性能测试常用监控命令:netstat 、top 、Nmon 、dstat、ulimit、vmstat 、tcpdump、free 、lsof ,需回答上至少两个。
144、介绍一下你在这个项目中是如何使用 Jenkins 的。
答:基本操作,比如定时构建执行代码等。
145、举例说明,Linux下命令行cURL的种常见用法和示例?
答:常用10种,这里举出三种常用:A,获取页面内容:curl+get请求;curl https://www.baidu.com
B,把链接页面的内容输出到本地文件中:curl https://www.baidu.com > index.html
C,使用 -d 发送 POST 请求:curl -d “userName=tom&passwd=123456” http://www.example.com/login
146、jmeter上一个接口参数返回值做为下一个接口入参的实现方式有几种,举例?
答:正则表达式处理器、JSON Path Extractor、边界值提取器
147、接口自动化中,遇到签名、鉴权加密等,如何处理的,用到哪些方法?
答:比如MD5加密–hashlib内置库,看怎么回答怎么具体问:开放性。
148、对pytest的理解程度?使用规范?参数化方法?说说常用装饰器?
答:pytest是一个非常成熟的全功能的的Python测试框架,主要特点有以下几点:
1,简单灵活,容易上手,文档丰富;
2,支持参数化,可以细粒度地控制要测试的测试用例;
3,能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/ appnium等自动化测试,接口自动化测试(pytest +请求);
4,pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest - selenium(集成selenium),pytest-HTML(完美的HTML测试报告生成),pytest-rerunfailures(失败情况下重复执行),pytest -xdist(多CPU分发)等;
5,测试用例的跳跃和xfail处理;
使用规范:
测试文件名必须以“test_”开头
测试类以Test开头,并且不能带有 init 方法
测试方法必须以“test_”开头
除了有setup/teardown,还能更自由的定义fixture装载测试用例
参数化方法:
pytest支持在多个完整测试参数化方法:
pytest.fixture(): 在fixture级别的function处参数化
@pytest.mark.parametrize:允许在function或class级别的参数化,为特定的测试函数或类提供了多个argument/fixture设置。
pytest_generate_tests:可以实现自己的自定义动态参数化方案或扩展。
149、举例说明pytest.mark标记的使用?
答:1,无条件跳过测试pytest.mark.skip
2,有条件跳过测试pytest.mark.skipif
3,标记测试功能按预期失败pytest.mark.xfail
4,将测试功能标记为使用给定的夹具名称pytest.mark.usefixtures
5,向特定测试项添加警告过滤器,以便更好地控制应在测试,类甚至模块级别捕获哪些警告@pytest.mark.filterwarnings
6,自定义标记:标记指定标签
150、自动化测试报告生成方式?如果是allure详述?
答:@allure.severity(“critical”) # 优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级
@allure.feature(“测试模块_demo1”) # 功能块,feature功能分块时比story大,即同时存在feature和story时,feature为父节点
@allure.story(“测试模块_demo2”) # 功能块,具有相同feature或story的用例将规整到相同模块下,执行时可用于筛选
@allure.issue(“BUG号:123”) # 问题表识,关联标识已有的问题,可为一个url链接地址
@allure.testcase(“用例名:测试字符串相等”) # 用例标识,关联标识用例,可为一个url链接地址
151、什么是冒泡排序,手写一个冒泡排序?
答:冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
- 如果开发在开发过程中偷偷地改了某个功能没有跟测试讲,怎么样去保证测试发现问题或者流程正常发布,没有隐患?
①查看开发提交日志
②开发说明自己修改点以及影响功能点,如果没说明,针对自己改动的需要承担相应的风险
③主流程验证,在主流程验证中没发现风险,可能对整体流程影响较小,减少发布风险
- 线上要求的服务器性能在测试环境下无法达到性能测试要求,怎么样去设计实施性能测试?
等比例缩小,测试等比例缩小情况下性能,然后通过缩小后的性能表现来进行确认
- 有没有做过安全相关测试,简单谈谈安全测试相关?
Web应用程序的安全性问题依其存在的形势划分,种类繁多,这里不准备介绍所有的,只介绍常见、比较常见和有点常见这种级别的。我相信从Web应用安全角度来说,会比你从网上搜的要全面的多。以下是这些安全性问题的列表:
跨站脚本攻击(CSS or XSS, Cross Site Scripting)
2、SQL注入攻击(SQL injection)
3、远程命令执行(Code execution,个人觉得译成代码执行并不确切)
4、目录遍历(Directory traversal)
5、文件包含(File inclusion)
6、脚本代码暴露(Script source code disclosure)
7、Http请求头的额外的回车换行符注入(CRLF injection/HTTP response splitting)
8、跨帧脚本攻击(Cross Frame Scripting)
9、PHP代码注入(PHP code injection)
10、XPath injection
11、Cookie篡改(Cookie manipulation)
12、URL重定向(URL redirection)
13、Blind SQL/XPath injection for numeric/String inputs
14、Google Hacking