2021-04-15 68面试题

1. web端和app端测试的相同点和不同点的是

1、相同点

不管是传统行业的web测试,还是新兴的手机app测试,都离不开测试的基础知识,即是不管怎么变,测试的原理依然会融入在这两者当中。

1)设计测试用例时,依然都是依据边界值分析法、等价类划分等;

2)多数采用黑盒的测试方法,来验证业务功能是否得到正确的应用;

3)需要检查界面的布局、风格和按钮等是否简洁美观、是否统一等;

4)测试页面载入和翻页的速度、登录时长、内存是否溢出等;

5)测试应用系统的稳定性等。

2、不同点

相对于web测试,手机软件测试,除了要考虑基本的功能测试、性能等,还要考虑手机本身固有的属性特征。所以对比web测试和手机测试,手机测试过程中还需要注意如下几个方面特性:

1)手机作为通信工具,来电、去电、接收短信等操作都会对app应用程序产生影响,所以app测试第一个要考虑的属性特征是:中断测试。

中断测试有人为中断、新任务中断以及意外中断等几种情况,主要从以下几个方面进行验证:

a.来电中断:呼叫挂断、被呼叫挂断、通话挂断、通话被挂断

b.短信中断:接收短信、查看短信

c.其他中断:蓝牙、闹钟、插拔数据线、手机锁定、手机断电、手机问题(系统死机、重启)

2)手机用户对app产品的安装卸载操作:从上一个版本/上两个版本直接升级到最新版本。

全新安装新版本

新版本覆盖旧版本安装

卸载旧版本,安装新版本

卸载新版本,安装新版本

3)web自动化测试使用的工具较常用的是QTP,而android手机自动化测试工具比较常用的是monkey、monkeyrunner

2. Ios和android测试的侧重点是?

1.ios的应用,更注重的是用户的体验要好,比如性能、稳定性、安全性,同时软件对于系统版本的兼容性也是
2.安卓应用,对于兼容性的要求更高,同时对于应用的安装、卸载等也要进行关注,因为ios只有通过AppStore安装,途径唯一;反观安卓,来源则较为广泛

3. 如何测试一个app的登录场景?

一、功能测试(Function test)

  1. 什么都不输入,点击提交按钮,看提示信息。

1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。

2.输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。

3.登录成功后能否能否跳转到正确的页面

4.用户名和密码,如果太短或者太长,应该怎么处理

5.用户名和密码,中有特殊字符(比如空格),和其他非英文的情况

6.记住用户名的功能

7.登陆失败后,不能记录密码的功能

8.用户名和密码前后有空格的处理

9.密码是否加密显示(星号圆点等)

10.牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使 用者),刷新或换一个按钮是否好用

11.登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确

12.输入密码的时候,大写键盘开启的时候要有提示信息。

二、界面测试(UI Test)

1.布局是否合理,2个testbox和一个按钮是否对齐

2.testbox和按钮的长度,高度是否复合要求

  1. 界面的设计风格是否与UI的设计风格统一

  2. 界面中的文字简洁易懂,没有错别字。

三、性能测试(performance test)

1.打开登录页面,需要几秒

2.输入正确的用户名和密码后,登录成功跳转到新页面,不超过5秒

四、安全性测试(Security test)

1.登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)

2.用户名和密码是否通过加密的方式,发送给Web服务器

3.用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证

4.用户名和密码的输入框,应该屏蔽SQL注入攻击

5.用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)

6.错误登陆的次数限制(防止暴力破解)

  1. 考虑是否支持多用户在同一机器上登录;

  2. 考虑一用户在多台机器上登录

五、可用性测试(Usability Test)

  1. 是否可以全用键盘操作,是否有快捷键

  2. 输入用户名,密码后按回车,是否可以登陆

  3. 输入框能否可以以Tab键切换

六、兼容性测试(Compatibility Test)

1.主流的浏览器下能否显示正常已经功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)

2.不同的平台是否能正常工作,比如Windows, Mac

3.移动设备上是否正常工作,比如Iphone, Andriod

4.不同的分辨率

七、本地化测试 (Localization test)

  1. 不同语言环境下,页面的显示是否正确。

八、软件辅助性测试 (Accessibility test)

软件辅助功能测试是指测试软件是否向残疾用户提供足够的辅助功能

  1. 高对比度下能否显示正常 (视力不好的人使用)

4. Push消息测试如何测试?

1.1. 覆盖的系统

1.2. 覆盖的机型

1.3. 到达率(即时?定时?)

1.4. 覆盖哪些模块的push?

IM/秘邮消息push 

应用通知的push

1.5. 内容展示

显示几行?

标点符号显示?

时间显示?

APP icon显示是否正常

1.6. push推送的场景

  1. 手机是否设置开启消息通知栏(开启/关闭)

  2. APP是否运行/锁屏,是否有推送消息/是否可点击查看

a) App前台运行

b) App前台运行-锁屏-亮屏

c) App前台运行-锁屏-息屏

d) App后台运行

e) App后台运行-锁屏-亮屏

f) App后台运行-锁屏-息屏

g) APP被杀进程

  1. 推送用户范围

a) 全部用户推送

b) 部分用户推送/分组推送

c) 指定用户推送

i. 已登录

ii. 未登录

  1. 收到推送,跳转测试

a) 单个推送

b) 折叠推送

5. App的闪退通常是什么原因造成的?

1.缓存垃圾过多

   由于安卓系统的特性,如果长时间不清理垃圾文件.会导致越来越卡.也会出现闪退情况.
  1. 运行的程序过多,导致内存不足

3.应用版本兼容问题

     如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本在调试中,也会造成应用闪退。

      解决方法:如果是版本太旧,更新为新版本即可;如果是新版本闪退,可能是应用在改版调试,可卸载后安装旧版。

4… 检查APP中访问网络的地方,组件中的ImageView是否可以正常的下载并显示到app 页面上。

5.检查APP的sdk和手机的系统是否兼容。

6.在一些特定情况下的闪退,比如播放视频,在Android5.0 升级到Android6.0的时候,有些系统API老版本有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退问题

6. 常见的接口协议/类型是什么?

  1. OPC协议:OPC(Object Linking and Embedding(OLE) for Process Control)是微软公司的对象连接和嵌入技术在过程控制方面的应用。该标准中定义了在基于PC的客户机之间进行自动化数据实时交换的方法。
  2. ODBC开放数据库连接(Open Database Connectivity,ODBC)是为解决异构数据库间的数据共享而产生的,现已成为WOSA(The Windows Open System Architecture(Windows开放系统体系结构))的主要部分和基于Windows环境的一种数据库访问接口标准ODBC 为异构数据库访问提供统一接口。
  3. WebService协议是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,Web Service技术,能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。
  4. Http Restful协议是一种网络应用程序的设计风格和开发方式,适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

7. 常见的接口请求方式是什么?

1、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)

2、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改

3、Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)

4、Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体内容,用于获取报头)

5、Delete 请求服务器删除request-URL所标示的资源*(请求服务器删除页面)

6、Trace 回显服务器收到的请求,用于测试和诊断

7、opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送*测试服务器功能(允许客户端查看服务器性能)

8、Connect HTTP/1.1协议中能够将连接改为管道方式的代理服务器

8. 常见的状态码是什么以及都有什么意思请解释说明?

1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的 URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

9. 接口测试的原理是什么?

原理:模拟客户端向服务器发送请求报文,服务器接受请求报文后对相应的报文做处理并向客户端返回应答,客户端再接受应答的一个过程

10. 后台接口测试了一遍前端也测试一遍是不是重复测试?

不是
1、基本功能测试:

由于是针对基本业务功能进行测试,所以这部分是两种测试重合度最高的一块,开发同学通常所指的也主要是这部分的内容。

2、边界分析测试:

在基本功能测试的基础上考虑输入输出的边界条件,这部分内容也会有重复的部分(比如业务规则的边界)。但是,前端的输入输出很多时候都是提供固守的值让用户选择(如下拉框),在这种情况下测试的边界范围就非常有限,但接口测试就不存在这方面的限制,相对来说接口可以覆盖的范围更广,同样的,接口出现问题的概率也更高。

3、性能测试:

这个比较容易区分,虽然都需要做性能测试,但关注点确大不相同。App端性能主要关注与手机相关的特性,如手机cpu、内存、流量、fps等。而接口性能主要关注接口响应时间、并发、服务端资源的使用情况等。两种测试时的策略和方法都有很大区别,所以这部分内容是需要分开单独进行测试的,理论上来说这也是不同的部分。

接口测试和app测试的活动有部分重复的内容,主要集中在业务功能测试方面。除此之外,针对各自特性的测试都不一样,需要分别进行有针对性的测试,才能确保整个产品的质量。

11. 接口测试的流程/步骤(你的接口测试怎么做的)?

实际上我们做接口测试,还是“输入—处理—输出”这样的模式。用户输入一串数据,然后让这个接口或者让这个后台功能来处理,然后检查输出结果跟期望是否一致。

这个其实也就是我们所说的黑盒测试。也是我们做测试的一个常规的思路。用户输入一串数据,然后让系统去处理,然后我们再去检查结果跟期望是否一致。功能测试是这么做的,接口测试实际上还是这么做。

但是相对功能测试而言,接口测试有一个比较明显的区别,就是输入不再是界面的,而是一个基于HTTP的请求;输出也不再是界面,而是基于HTTP的响应。所以需要通过请求和响应分别来输入我们的数据以及检查我们的结果。

第一步,设计操作步骤。

操作步骤就是请求,有一些请求是是单独的,有些请求是多个请求前后有联系的,这种情况就需要创建关联,。那么我们需要了解请求的格式,规范以及如何做关联。soapUI,postman,jmeter里,都有关联。

第二步,设计数据用例。

建议将数据用例写到Excel文档里,然后让工具读取Excel。Excel里有几组数据用例,就执行几次。循环执行(自动化),就可以让每一个用例被执行一次,那么每一个测试场景也就被运行到了。

第三步:断言。

也就是提前将预期结果写入到工具中,让工具自动化判断结果是否正确。不同的工具叫法不同,soapUI和Jmeter中叫做断言,postman中叫做tests。

第四步:执行并检查测试结果。

执行很简单,对测试结果进行分析的话就需要了解协议。知道发出去了什么,返回了什么,才能够知道,到底哪个环节出了问题。

对应上面的四个步骤,如何用jmeter做接口测试?

1、 设计操作步骤:这里我们创建HTTP请求即可

添加——取样器——HTTP请求

2、 设计数据用例:由于jmeter只支持CSV文件,所以设计测试用例时记得生成CSV格式的,将CSV导入到jmeter中(这部分在性能测试里面叫做jmeter的参数化)

添加——配置元件——CSV数据文件设置

3、 断言,添加一个响应断言即可(也可以加别的)

添加——断言——响应断言

4、 执行,添加一个结果树

添加——监听器——查看结果树

12. get/post的区别?

  1. get请求常⽤在获取数据,post常⽤于发送数据
  2. get请求速度⽐post稍快4
  3. get请求的数据是跟随请求地址⼀起发送,⽽post是在请求体中单独发送。

13. 如何编写接口测试用例?

1.通过性验证:

首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。

2.参数组合:

现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。

3.接口安全:

1)、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?

2)、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功

3)、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。

4)、密码安全规则,密码的复杂程度校验

4.异常验证:

异常的,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。

5.根据业务逻辑来设计测试用例

根据业务逻辑来设计的话,就是根据自己系统的业务来设计用例,这个每个公司的业务不一样,就得具体的看自己公司的业务了,其实这也和功能测试设计用例是一样的。 举个例子,拿bbs来说,bbs的需求是这样的: 1、登录失败5次,就需要等待15分钟之后再登录 2、新注册的用户需要过了实习期才能发帖 3、删除帖子扣除积分 4、… 像这样的你就要把这些测试点列出来,然后再去造数据测试对应的测试点。

6.接口测试用例模板

咱们测试接口的话,肯定要写测试用例,写测试用例的话,就要有一个用例模板,那需要有哪些字段呢?

1)项目 是哪个项目的

2)模块 这个接口是属于哪个功能模块的

3)用例id

4)接口名称

5)用例标题 用例是干嘛的

6)请求方式 GET/POST

7)请求url url地址

8)请求参数

9)前置条件 有依赖的时候,比如说要测登录失败3次的

10)结果验证 预期结果

11)请求报文

12)返回报文

13)测试结果 通过/失败

14)测试人员

14. 性能测试都包含了哪些?(负载测试 压力测试 容量测试)

负载测试- 核实在保持配置不变的情况下,测试对象在不同操作条件(如不同用户数、事务数等)下性能行为的可接受性。

压力测试- 核实测试对象性能行为在异常或极端条件(如资源减少或用户数过多)之下的可接受性。

容量测试- 核实测试用户同时使用软件程序的最大数量。

15. 什么时候执行性能测试?

性能测试则是在功能基本稳定,没什么严重问题的时候开始执行

16. 你是如何做测试分析?

1、覆盖度够全

PRD、UI搞、时序图、表结构变更设计、概要设计文档、接口文档等等的参考文档上的内容在测试分析中都有体现

2、结构清晰易懂

不了解此块业务的人看到测试分析,也能快速了解业务框架结构、细节逻辑、业务间关联关系

3、维护成本低

在需求不断变化,迭代速度越来越快的情况下,如何快速找到所有需求要更新的部分,以及合理把新增

部分加入到原有的测分中且不用对原有结构做大的调整

4、隐式需求挖掘较透彻

往往需求文档写的不够细致到位,或者是为了实现新的需求的部分细节功能会和与原有的某些功能相违背

甚至是不兼容、设计的不合理,可变性降低等等

5、非功能性方面的考虑

性能能否满足、容错处理、业务层面的安全性考虑、用户体验等

17. 性能测试的步骤/流程?

在这里插入图片描述

18. 你如何识别性能测试的瓶颈?

19. 请解释下 常用的性能测试指标的含义?

1、负载测试

负载测试,一种性能测试指数据在超负荷环境中运行,程序是否能够承担。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。

2、强度测试

强度测试,一种性能测试,他在系统资源特别低的情况下软件系统运行情况。这类测试往往可以书写系统要求的软硬件水平要求。

实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。

3、数据库容量测试

数据库容量测试指通过存储过程往数据库表中插入一定数量的数据,看看相关页面是否能够及时显示数据。数据库容量测试使测试对象处理大量的数据,以确定是否达到了将使软件发生故障的极限。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。

4、基准测试

基准测试与已知现有的系统进行比较,主要检验是否与类似的产品具有竞争性的一种测试。

5、竞争测试

软件竞争使用各种资源(数据纪录,内存等),与其他相关系统对资源的争夺能力

20. 响应时间 并发用户数 吞吐量 性能计数器 TPS HPS QPS?

并发数
并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。

响应时间
响应时间是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间。

吞吐量
吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标。

QPS(每秒查询数)、TPS(每秒事务数)是吞吐量的常用量化指标,另外还有HPS(每秒HTTP请求数)。

跟吞吐量有关的几个重要是:并发数、响应时间。

QPS(TPS),并发数、响应时间它们三者之间的关系是:

QPS(TPS)= 并发数/平均响应时间

性能计数器
性能计数器是描述服务器或操作系统性能的一些数据指标,如使用内存数、进程时间,在性能测试中发挥着“监控和分析”的作用,尤其是在分析统统可扩展性、进行新能瓶颈定位时有着非常关键的作用
资源利用率:指系统各种资源的使用情况,如cpu占用率为68%,内存占用率为55%,一般使用“资源实际使用/总的资源可用量”形成资源利用率。

21. 针对性能测试 负载测试 压力测试在你项目中的使用?

性能测试概念

是指通过模拟生产运行的业务压力或用户使用场景来测试系统的性能是否满足生产性能的要求。
性能测试是一种“正常”测试,主要测试使用时系统是否满足要求,同时可能为了保留系统的扩展空间而进行的一些稍稍超过“正常”范围的测试(比如:当前系统使用用户100人,可能未来人数会增多到300人,所以要让系统能够在300人情况下正常运行)
负载测试

是通过逐步增加系统负载,测试系统性能的变化,并在满足最终确定性能指标的情况下,系统所能承受的最大负载量的测试
性能指标:是系统应该满足的,比如请求响应时间等
负载测试是正常范围的测试
压力测试

逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载下系统性能处于失效状态,并以此来获得系统能提供的最大服务级别的测试

23. 说一说你所知道的Python 数据类型有哪些?

数字 —> int类
布尔值 —>bool类
字符串 —>str类
列表 —>list类
元组 —>tuple类
字典 —>dict类
集合 -->set类

24. 你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解?

首先,将问题提交到缺陷管理库里面进行备案。

然后,要获取判断的依据和标准:

根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;

如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;

根据用户的一般使用习惯,来确认是否是缺陷;

与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;

合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪。

等待测试经理做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反映,并有上级做出决定。

25. 给你一个网站,你如何测试?给你一个app程序你要怎么做?

性能测试
(1)连接速度测试:用户连接到电子商务网的速度与上网方式有关,他们或许是电话拨号,或是宽带上网,打开速度越快的网站,越受用户喜爱。
(2)负载测试:负载测试是在某一负载级别下,检测电子商务系统的实际性能。允许多少个用户同时在线,可以通过相应的软件在一台客户机上模拟多个用户来测试负载。
(3)压力测试:压力测试是测试系统的限制和故障恢复能力,也就是测试电子商务系统会不会崩溃。安全性测试对网站的安全性(服务器安全,脚本安全)可能有的漏洞测试,攻击性测试,错误性测试。对电子商务的客户服务器应用程序、数据、服务器、网络、防火墙等进行测试。用相对应的软件进行测试。基本测试包括色彩的搭配,连接的正确性,导航的方便和正确,CSS应用的统一性。网站优化测试
(1)引擎优化测试:好的网站是看它是否经过搜索引擎优化了,网站的架构、网页的栏目与静态情况等。
(2)用户优化测试:用户来到网站能能够在3-5次,找到其需要的内容。方便用户的网站倍受用户的亲昵。功能实现:网站现有版本,需求是否完全实现。满足需求的网站才是有用的网站

app
1)功能测试

每项开发的新功能都需要进行测试。app测试中功能测试是一个重要方面。测试人员应该要进行手动测试和后期的自动化测试维护。刚开始测试时,测试员必须把app当做"黑盒"一样进行手动测试,看看提供的功能是否正确并如设计的一样正常运作。除了经典软件测试,像点击按钮、提交订单看看会发生什么,测试员还必须执行更多功能的app测试。

除了整个手动测试过程,测试自动化对移动app也很重要。每个代码变化或新功能都可能影响现存功能及它们的状态。通常手动回归测试时间不够,所以测试员不得不找一个工具去进行自动化回归测试。现在市面上有很多自动化测试工具,有商业的也有开源的,面向各个不同平台,如Android,iPhone,WindowsPhone7,BlackBerry以及移动Webapp。根据开发策略和结构,品质管理测试专家需找出最适合他们环境的自动化工具。

(2)客户端性能测试

一个App做的好不好,不仅仅只反应在功能上。被测的app在中低端机上的性能表现也很重要。比如:一个很好玩的游戏或应用,只能在高端机上流畅运行,在中低端机上卡的不行,也不会取得好的口碑。

关于App的性能测试,我们比较关注的参数有:CPU,内存,耗电量,流量,FPS。同时也需关注一下App的安装耗时和启动耗时。

目前大家可能比较困惑的一个问题,多高的CPU,内存,耗电量,流量,FPS才算是符合发布的值呢?这里可以告诉大家,可以参考精品游戏的一些数值,将自己研发的app与业内精品的app数据做对比。

(3)适配兼容测试

App在经过功能测试后,也需对其进行适配兼容测试需要检查的项主要有以下几点:

(a)在不同平牌的机型上的安装、拉起、点击和卸载是否正常;

(b)在不同的操作系统上的安装、拉起、点击和卸载是否正常;

我们在实际测试中,常常会遇到下列问题:

(a)在某个平牌某个系统上,app安装不上;

(b)在某个平牌某个系统上,app无法拉起;

©在某个平牌某个系统上,app拉起后无响应或拉起后黑屏、花屏;

(d)在某个平牌某个系统上,app无法顺利卸载;

(4)安全测试

App在上线前,都需要做详细的安全测试。安全测试主要为了检测应用是否容易被外界破解;是否存在被恶意代码注入的风险;上线后外挂的风险高不高等。

(5)服务器性能测试

服务器性能测试,主要包含单机容量测试和24小时稳定性测试。单机容量测试,可以检测到单机服务器在90%的响应时间和成功率都达标的前提下,能够承载多少用户量。使用特定游戏模型压测24小时,服务无重启,内存无泄漏,并且各事务成功率达标。

26. 什么是测试用例?什么是测试脚本?两者关系?

测试用例为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。

测试脚本是为了进行自动化测试而编写的脚本。

测试脚本的编写必须对应相应的测试用例

27. 简述:静态测试、动态测试、黑盒测试、白盒测试、α测试 、β测试分别是什么?

静态测试(ui界面 业务逻辑 )是不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程。

动态测试(链接数据之后 )是实际运行被测程序,输入相应的测试实例,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能。

黑盒测试一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否能得以实现,把被测试的程序当作一个黑盒,不考虑其内部结构,在知道该程序的输入和输出之间的关系或程序功能的情况下,依靠软件规格说明书来确定测试用例和推断测试结果的正确性。

白盒测试根据软件内部的逻辑结构分析来进行测试,是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。(白盒测试 : 使用编程脚本进行测试 实现自动化)

α测试:是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。

β测试:是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。

28. 在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

一条Bug记录最基本应包含:

bug编号;

bug严重级别,优先级;

bug产生的模块;

首先要有bug摘要,阐述bug大体的内容;

bug对应的版本;

bug详细现象描述,包括一些截图、录像…等等;

bug出现时的测试环境,产生的条件即对应操作步骤;

高质量的Bug记录:

1)通用UI要统一、准确

缺陷报告的UI要与测试的软件UI保持一致,便于查找定位。

2)尽量使用业界惯用的表达术语和表达方法

使用业界惯用的表达术语和表达方法,保证表达准确,体现专业化。

3)每条缺陷报告只包括一个缺陷

每条缺陷报告只包括一个缺陷,可以使缺陷修正者迅速定位一个缺陷,集中精力每次只修正一个缺陷。校验者每次只校验一个缺陷是否已经正确修正。

4)不可重现的缺陷也要报告

首先缺陷报告必须展示重现缺陷的能力。不可重现的缺陷要尽力重现,若尽力之后仍不能重现,仍然要报告此缺陷,但在报告中要注明无法再现,缺陷出现的频率。

5)明确指明缺陷类型

根据缺陷的现象,总结判断缺陷的类型。例如,即功能缺陷、界面缺陷、数据缺陷,合理化建议这是最常见的缺陷或缺陷类型,其他形式的缺陷或缺陷也从属于其中某种形式。

6)明确指明缺陷严重等级和优先等级

时刻明确严重等级和优先等级之间的差别。高严重问题可能不值得解决,小装饰性问题可能被当作高优先级。

7)描述 (Description) ,简洁、准确,完整,揭示缺陷实质,记录缺陷或缺陷出现的位置

描述要准确反映缺陷的本质内容,简短明了。为了便于在软件缺陷管理数据库中寻找制定的测试缺陷,包含缺陷发生时的用户界面(UI)是个良好的习惯。例如记录对话框的标题、菜单、按钮等控件的名称。

8)短行之间使用自动数字序号,使用相同的字体、字号、行间距

短行之间使用自动数字序号,使用相同的字体、字号、行间距,可以保证各条记录格式一致,做到规范专业。

9)每一个步骤尽量只记录一个操作

保证简洁、条理井然,容易重复操作步骤。

10)确认步骤完整,准确,简短

保证快速准确的重复缺陷,“完整”即没有缺漏,“准确”即步骤正确,“简短”即没有多余的步骤。

11)根据缺陷,可选择是否进行图象捕捉

为了直观的观察缺陷或缺陷现象,通常需要附加缺陷或缺陷出现的界面,以图片的形式作为附件附着在记录的“附件”部分。为了节省空间,又能真实反映缺陷或缺陷本质,可以捕捉缺陷或缺陷产生时的全屏幕,活动窗口和局部区域。为了迅速定位、修正缺陷或缺陷位置,通常要求附加中文对照图。

 附加必要的特殊文档和个人建议和注解

如果打开某个特殊的文档而产生的缺陷或缺陷,则必须附加该文档,从而可以迅速再现缺陷或缺陷。有时,为了使缺陷或缺陷修正者进一步明确缺陷或缺陷的表现,可以附加个人的修改建议或注解。

12)检查拼写和语法缺陷

在提交每条缺陷或缺陷之前,检查拼写和语法,确保内容正确,正确的描述缺陷。

13)尽量使用短语和短句,避免复杂句型句式

软件缺陷管理数据库的目的是便于定位缺陷,因此,要求客观的描述操作步骤,不需要修饰性的词汇和复杂的句型,增强可读性。

15)缺陷描述内容

缺陷描述的内容可以包含缺陷操作步骤,实际结果和期望结果。操作步骤可以方便开发人员再现缺陷进行修正,有些开发的再现缺陷能力很差,虽然他明白你所指的缺陷,但就是无法再现特别是对系统不熟悉的新加入开发人员,介绍步骤可以方便他们再现。实际结果可以让开发明白错误是什么,期望结果可以让开发了解正确的结果应该是如何。

29. 在你的项目中详细的描述一个测试活动完整的过程?

https://wenku.baidu.com/view/5020f1a767ec102de3bd890a.html

  1. 项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后进入项目,开始进行统计和跟踪

  2. 开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或者双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。

  3. 测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。

  4. 测试用例完成后,测试和开发需要进行评审。

  5. 测试人员搭建环境

  6. 开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现bug后提交给bugzilla。

  7. 开发提交第二个版本,包括bug fix以及增加了部分功能,测试人员进行测试。

  8. 重复上面的工作,一般是3-4个版本后bug数量减少,达到出货的要求。

  9. 如果有客户反馈的问题,需要测试人员协助重现以及回归测试。

30. 如果项目周期很短,测试人力匮乏,你是怎么协调的?

依据代码review的结果和影响范围,对测试内容进行适当的裁剪。

借助自动化工具的支持,提高测试案例的执行效率。

调整组内任务的优先级,进行人力协调,优先投入最紧要的项目。

必要的情况下加班

31. 描述下你团队的测试分工?

https://blog.csdn.net/ljyfree/article/details/105402178

一个测试经理,3个测试组长,每个组有5个测试人员:包括自动化测试、,功能测试、性能测试等的测试工程师。

我们往往都是根据接到的项目来组成测试团队。当然人手不够的时候,可以请几位开发人员参与到测试工作中。

32.你做移动端的应用和web的程序应用都是如何的兼容性测试的?

https://blog.csdn.net/weixin_46183674/article/details/113914319

移动端

1、适配系统版本:

去二手平台找到低版本的设备

2、 适配不同机型:

选择世面上的主流机型

3、适配尺寸:

4、适配分辨率:

分辨率常见的720p(720×1280),1080p(1080×1920),2k(2560×1440)

5、适配网络:

三大运营商 、信号:2G、3G、4G、5G、WiFi

6、适配异形屏

现在手机花里胡哨的,全面屏、曲面屏、3D屏、刘海屏、挖孔屏、越来越多,所以我们也需要测试一下系统状态栏

7、涉及到蓝牙、耳机,看对应功能需要了

web端

1.操作系统兼容性

市场上有很多不同的操作系统,Windows 、Mac、Linux等操作系统。同一个应用在不同的操作系统下,可能会有兼容性问题,可能有些系统正常,有些系统不正常。

2.浏览器兼容性

国内主流的浏览器内核主要有3种:IE内核、Firefox内核和Chrome内核;

(1)IE内核常见的浏览器有:360安全浏览器(兼容模式)、360极速浏览器(兼容模式)、搜狗浏览器(兼容模式)、QQ浏览器;

(2)Firefox内核常见的浏览器即火狐浏览器(Firefox);

(3)Chrome内核常见的浏览器有

3.分辨率兼容性

同一个页面在不同分辨率下,显示的样式可能会不一样。可以通过对浏览器的缩放的比例进行不同分辨率的测试。

台式机分辨率::1024×768、1280×1024、1440×900

笔记本电脑分辨率:1024X768 、1280X800、1440X900、 1600X9000

4.网速测试

项目在不同的网络环境中是否正常的运行,通过Charles、Fiddler等工具进行弱网测试。

作者:遇见什刹海
链接:https://www.jianshu.com/p/e7f5916ca60c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

32. 你做移动端的应用和web的程序应用都是如何的兼容性测试的?

相同点:进行的都是功能测试

1)使用相同的设计测试用例方法:等价类、边界值、错误推导法、场景法。

2)使用相同的测试方法,验证业务功能是否符合预期。

3)进行UI检查:界面的布局、风格和按钮排版是否统一,简洁美观,符合需求。

4)检测页面的性能

5)应用的稳定性:不会出现闪退和卡死等等。

不同点:

1)记录bug

在web端可以通过系统自带的截图和电脑上安装的截图工具(QQ截图、钉钉截图)等方式来截图bug的图片,对于错误的地方可以用工具自带的标识来重点标记。

对于移动端设备可以用手机自带的截图工具来截图再上传至电脑上。一般习惯安装钉钉,通过钉钉中的文件传输助手,将图片发送到PC端。

对于工作中记录bug的建议:

提交的bug主题要尽量言简意赅,bug描述时,对于操作步骤比较复杂的bug要详细的写上操作步骤,必要时附带上相关的log截图、测试环境、手机版本等。针对必现和非必现的bug也要进行详细说明,减少不必要的沟通成本。

2)测试环境

web端的测试环境很多时候是通过hosts进行切换,switchhosts工具可以方便的切换需要的host,但是移动端设置起来就比较复杂,比较简单的方式是电脑设置代理,手机端直接连接代理。注意,手机和电脑必须连接同一个网络。

有的公司是在移动端设置一个环境切换入口,可以根据自己需要,切换不同的测试环境。

移动端抓包:电脑安装一个抓包工具(fidder、charlse),手机端与PC端使用同一个网络并设置代理,就可以抓到手机端的数据包。

3)兼容性

web端的测试一般都是主要使用一种浏览器,待系统基本稳定时,再去专门测试浏览器的兼容性。

移动端这样是不行的,因移动端主要分为Android和Ios,这两端出现的问题一般是不一致的,一致的问题主要是数据问题,数据问题需要后台处理,故测试时需两端都重点测试,而不能出现先着重测试某一端的问题。

注意,一般方式是在测试一端时,出现问题则立即查看另一端是否也有这个问题存在。

4)移动端的特性

移动端与web端相比较来说,有很多特性;移动端测试强调用户体验。

a. 网络种类多

移动端有多种网络:无限网络、2G\3G\4G等,断网、网速较差及网络之间的切换时页面的显示等,这些对移动端来说都很重要,此外,在非wifi下,需要注意网络使用量问题。弱网测试,需要模拟APP在网络慢,网络不稳定的情况。

b.屏幕的限制

首先是图片与文字的显示,上传不同尺寸的图片显示是否正常;图片与文字一起显示时,效果如何。

操作区域:web端的应用,一般是不会受到屏幕的限制,通过鼠标操作会更加准确。因移动端屏幕较小,页面及按钮会受到屏幕尺寸大小的限制,且用户是通过手指进行操作,一些按钮、选择框等是否容易点击,多个可点区域位置较近时,点击部位稍微偏移,也许就会造成不同的结果,这种情况是否可以达到预期的效果。

c.软件启动运行

移动端启动、卸载、升级这几个特性,也是比较常见、重要的,比如升级时用户的数据怎么办,卸载后用的数据怎么处理,卸载再安装后登录数据的显示等。

测试点:

用应用市场安装。用apk文件安装。完全卸载(用户的profile)。部分卸载。

从上一个版本/上两个版本直接升级到最新版。新版本覆盖旧版本安装。卸载旧版本,安装新版本。卸载新版本,安装新版本。增量更新。强制更新。

升级之后,已经登录的用户,是否仍处于登录的状态,用户的缓存文件、配置文件是否还在,界面显示是否正确,无闪退、卡死等现象出现。

d.间断问题

移动端有一个很重要的问题,就是在使用软件的过程并不是长久的,这中间可能会发生很多中断,比如电话、短信、通知、断电等等,软件就需要特殊处理这些特殊情况。

打开一个页面,或在操作的过程中(点击一个按钮后),将手机屏幕锁住,再打开时,应用能否正常处理。

来电中断:呼叫中断,被呼叫挂断,通话中断,通话被挂断

短信中断:接手短信,查看短信

其他中断:闹铃,插拔数据线,手机断电,手机锁定,手机问题(系统死机、重启)

e.手势

移动端有自己比较简单的手势,用户可以通过手势进行一个操作,比如左滑删除、右滑返回上一个页面、左右滑动图片等,软件需要对这些手势进行适配。

f.分享

移动端一般会安装很多软件,用户参加活动时或购买完成时,都会进行分享,但分享时的权限、软件是否存在等问题,需要进行特殊处理测试。一般的软件或应用都会开放一部分页面,允许用户不登录时也可访问,而有些页面是要求用户必须登录的,主要针对这两种权限不同的页面做分享,然后通过分享进入本页面,查看权限的控制是否正常。

g.移动端与web端的同步

用户在web端的操作,在移动端是否可以正常的进行同步、显示。在移动端的操作,用户登录web端,信息是否同步等。

33. 请讲诉移动应用的灰度是怎么做的?

1.开黑白名单(白名单的人下载后可使用,黑名单的人及时可下载但也不可使用)

2.开灰度环境(直接在后台控制,可有一级灰度发布、二级灰度发布、三级灰度发布、全量发布等,每个灰度针对不同的人群)

3.iOS版本可以使用testflight灰度发布,让加入的人群提前体验

4.Android可以使用第三方平台(如:蒲公英,可设置下载密码,提供给特定的人群体验)。或者生成下载连接发给对应的人

34. 请简述移动应用在升级安装时候应该考虑的场景?

1.APP有新版本时,打开APP是否有更新提示。

2.当版本为非强制升级版时,用户可以取消更新,老版本能正常使用。用户在下次启动app时,仍能出现更新提示。

3.当版本为强制升级版时,当给出强制更新后用户没有做更新时,退出APP。下次启动app时,仍出现强制升级提示。

4.不删除APP直接更新,检查是否能正常更新,更新后能否正常工作。

5.删除老的APP,重新下载APP,能不能正常工作。

6.不删除APP直接更新,检查更新后的APP和新安装的APP提供的功能一样。

7.检查在线跨版本升级能否成功,版本过老是否提示用户重装。

8.更新成功后,用户数据有没有丢失,各个配置项是否还原。

35. 如果让你来测试扫码支付,你会考虑哪些场景?

功能测试用例

卡的类型(

一类户:借记卡、信用卡、各个开户行

二类户:虚拟账户如微信里的零钱账户、支付宝的余额宝、电子账户

二维码的商户类型(微信、支付宝、汇宜、银联)

支付限额(单笔限额、累计限额、日累计、月累计、支付笔数)

退款(退款入口、退款进度、退款结果)

对账

资金流动(我方扣款数额正确,对方收款数额正确)数额及时效

支付结果展示、交易明细

连续扫码支付,每天的扫码支付次数限制及数额限制

二维码有效期

有无相机权限

前后置摄像头

像素低端的手机能否扫码成功

兼容性

兼容性(不同手机厂商自带相机功能实现不一致)

安全性:

1.是否有超时超次限制

2.测试用户操作时相关信息是否写入了日志文件、是否可追踪等

3.如果使用了安全套字,需要测试加密是否正确,加密前后的信息完整性,正确性

性能

1.用户操作的响应时间

2.系统的吞吐量(TPS)

3.系统的硬件资源情况(CPU、硬盘、磁盘)

4.网络资源占用情况等。

异常场景

异常情况(卡异常、余额不足)

36. 请描述下微信朋友圈发小视频的用例设计?

1.功能测试

功能测试是软件测试中最基本的测试,功能实现不满足要求,软件就不能发布测试。要进行功能测试,首先就需要了解朋友圈的各个功能,那么如何了解朋友圈的功能呢?——需求文档。因为所有的开发设计、测试设计等,都是以需求文档来进行的。需求文档中规定了必须有哪些功能,那么我们在测试的时候就可以对比知道哪些功能实现了,还有哪些功能未实现(需要说明的是:开发计划明确说明当前版本暂不实现的功能,不能算作bug)。

相信玩过微信朋友圈的人都能知道微信朋友圈大概有以下基础功能:
1)发朋友圈、删除朋友圈,看朋友圈;

2)朋友圈的类型(图、文、混合);

3)评论朋友圈;

4)朋友圈的对外接口(例如,王者荣耀,把战绩分享至朋友圈等);

5)屏蔽与被屏蔽,不能查看对应好友的朋友圈;

我们做基础功能测试,就需要对朋友圈具有的所有功能进行测试。

发朋友圈:我们可以通过短按或者常按朋友圈中的照相机图标,分别发起图片版或文字版的朋友圈操作,在此过程中,我们需要关注进行发起操作的响应时间是否符合需求。然后就需要对发朋友圈进行全面的测试了,其中包括,正常发朋友圈,取消发朋友圈,多次发朋友圈等。如果需求中对朋友圈的内容有限定,例如不允许出现敏感字眼等。

2.可靠性测试

先来说一下软件可靠性的概念:软件可靠性(software reliability)是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。

规定的条件是直接与软件运行相关的使用该软件的计算机系统的状态和软件的输入条件,或统称为软件运行时的外部输入条件;

规定的时间是指软件的实际运行时间区间;

规定的功能是指提供给定的服务,软件产品所必须具备的功能。

软件可靠性不但与软件存在的缺陷(或)差错有关,而且与系统输入和系统使用有关。软件可靠性的概率度量程为软件可靠度。

这里举几个朋友圈的可靠性例子:

1)短时间内频繁进行发送、取消、以及删除朋友圈的组合测试,看朋友圈相关功能是否正常;

2)微信打开后,手机锁屏或切换到主界面,微信在后台是否会失效出现bug,并且朋友圈的功能是否会失效。

3.性能测试

性能测试主要对服务器的性能进行测试的。在App上,性能测试分为客户端性能、服务器性能。

对客户端性能我们主要关注的指标有:CPU占用率、内存占用率、流量耗用量等。举个例子,如果发起朋友圈操作之前,手机的CPU使用率为30%,发起操作之后,忽然涨到了80%,不关闭朋友圈的相关操作,CPU使用率降不下来,那么对于整个朋友圈的性能问题就得需要我们去好好找原因了。

对提供朋友圈服务的服务器进行性能测试时,我们需要进行压力测试、负载测试、稳定性测试。常用的工具就是Loadrunner了,主要关注的指标有:CPU、内存、响应时间等。

4.其他测试

例如:

1)在弱信号的情况,进行发朋友圈、看朋友圈等操作,测试其是否会产生其它未知故障。(例如对WiFi信号进行限速)

2)在不同的客户端的兼容性测试,使用不同平台的客户端进行朋友圈的功能测试。(例如使用不同厂商的手机、平板)

3)安全性测试(例如在朋友圈儿中输入一些脚本程序代码什么的,测试是否会将微信客户端搞崩溃什么的。

37. 一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?

1.)300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。

2.)300个用户在一个客户端上,需要更大的带宽。

3.)IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。

所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。

38. 您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?

尽量面对面的沟通,其次是能直接通过电话沟通,如果只能通过Email等非及时沟通工具的话,强调必须对特性的理解深刻以及能表达清楚。

运用一些测试管理工具如TestDirector进行管理也是较有效的方法,同时要注意在TestDirector中对BUG有准确的描述。

在团队中建立测试人员与开发人员良好沟通中注意以下几点:

一真诚、二是团队精神、三是在专业上有共同语言、四是要对事不对人,工作至上

当然也可以通过直接指出一些小问题,而不是进入BUG Tracking System来增加对方的好感。

39. 简述你在以前的工作中做过哪些事情,比较熟悉什么?

我过去的主要工作是系统测试和自动化测试。在系统测试中,主要是对BOSS系统的业务逻辑功能,以及软交换系统的Class 5特性进行测试。性能测试中,主要是进行的压力测试,在各个不同数量请求的情况下,获取系统响应时间以及系统资源消耗情况。自动化测试主要是通过自己写脚本以及一些第三方工具的结合来测试软交换的特性测试。

在测试中,我感觉对用户需求的完全准确的理解非常重要。另外,就是对BUG的管理,要以需求为依据,并不是所有BUG均需要修改。

测试工作需要耐心和细致,因为在新版本中,虽然多数原来发现的BUG得到了修复,但原来正确的功能也可能变得不正确。因此要注重迭代测试和回归测试。

40. 请说出这些测试最好由那些人员完成,测试的是什么?

代码、函数级测试一般由白盒测试人员完成,他们针对每段代码或函数进行正确性检验,检查其是否正确的实现了规定的功能。

模块、组件级测试主要依据是程序结构设计测试模块间的集成和调用关系,一般由测试人员完成。

系统测试在于模块测试与单元测试的基础上进行测试。了解系统功能与性能,根据测试用例进行全面的测试。

41. 在windows下保存一个文本文件时会弹出保存对话框,如果为文件名建立测试用例,等价类应该怎样划分?

  1. 单字节,如A;

  2. 双字节, AA、我我;

  3. 特殊字符 /‘。‘;、=-等;

  4. 保留字,如com;

  5. 文件格式为8.3格式的;

  6. 文件名格式为非8.3格式的;

  7. /,,*等九个特殊字符。

  8. 空字符串;

  9. 数字字母组合;

  10. 单字节双字节组合;

  11. 字符与特殊字符组合

42. 假设有一个文本框要求输入10个字符的邮政编码,对于该文本框应该怎样划分等价类?

特殊字符,如10个*或¥;英文字母,如ABCDefghik;小于十个字符,如123;大于十个字符,如11111111111;数字和其他混合,如123AAAAAAA;空字符;保留字符

43. 您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容。?

评审计划->预审->评审;

评审内容主要是测试用例对软件需求的覆盖程度,对于相关边界是否考虑,是否针对复杂流程准备多套测试数据,是否有专门针对非功能性需求的测试。

44. 在你测试的过程中如果发生时间上不允许进行全部测试,你应该怎么做?

软件测试初学者可能认为拿到软件后需要进行完全测试,找到全部的软件缺陷,使软件“零缺陷”发布。实际上完全测试是不可能的。主要有以下一个原因:

-完全测试比较耗时,时间上不允许;

-完全测试通常意味着较多资源投入,这在现实中往往是行不通的

-输入量太大,不能一一进行测试;

-输出结果太多,只能分类进行验证;

-软件实现途径太多;

-软件产品说明书没有客观标准,从不同的角度看,软件缺陷的标准不同;

因此测试的程度要根据实际情况确定。

45. 列举web自动化中常见的元素定位方式是?

1)通过class属性定位

driver.findElement(By.className(“spread”)).sendKeys(“你好”);

2)通过id属性定位

driver.findElement(By.id(“username”)).sendKeys(“你好”);

3)通过name属性定位

driver.findElement(By.name(“username”)).sendKeys(“你好”);

4)通过link属性定位

driver.findElement(By.linkText(“海贼王”)).click();

5)通过partialLink定位

driver.findElement(By.partialLinkText(“贼”)).click();

6)通过标签tabname定位

driver.findElement(By.tagName(“a”)).click();

7)通过css定位

driver.findElement(By.cssSelector(“input[type=‘button‘]”)).click();

8)通过xapth定位

driver.findElement(By.xpath("/html/body/div[1]/input[2]")).click();

//通过xpath绝对路径的方式定位

driver.findElement(By.xpath("//input[@value=‘查询‘]")).click();

//通过相对路径的方式定位

driver.findElement(By.xpath("//a[text()=‘百度一下‘]")).click();

//相对路径方式,元素是可点击的链接文字

46. 简述你知道的延时等待的方式?

硬性等待,也叫线程等待,通过休眠的方式完成等待如等待5秒Thead.sleep(5000)

隐式等待,通过imlicitlyWait完成延时等待,这种事针对全局设置的等待,如设置超市10秒,使用imlicitlyWait后,如果第一次没有找到元素,会在10秒之内不断循环查找元素,如果超时间10秒还没有找到,则抛出异常

显式等待,智能等待,针对指定元素定位指定等待时间,指定的范围内进行元素查找,找到元素则直接返回,超时没有找到元素则抛出异常

47. 自动化测试用例的覆盖率多少?

90%

48. 完整运行一次自动化用例需要多久时间?

主要跑的是业务流,所以跑一次需要半个小时左右

49. 什么是分层自动化?

金字塔结构, 最底层UnitTest,往上接口API/集成起来的service, 最上面UI自动化

50. 你的测试数据是怎么准备的?

小型系统的测试,业务数据一般可以直接获取以前版本的数据,通过SQL数据或某些命令操作,取得当前需要使用的数据。

    对于复杂系统,测试数据准备可能需要封装一系列的API函数,例如一种策略就是先封装出一个完全API调用函数,里面有各种常规默认值,然后再这个基础上针对业务进行封装,面向该操作只需要设定某个特定值的,可以调用该特定封装函数。极个别的,可以直接调原始的完全封装。当然,考虑到一些大公司的情况,可能还需要考虑跨平台测试架构的情况,有些人提出进一步封装,提供RestFul的调用接口来屏蔽开发工具特性。其实,都只有一个目的,尽量把测试数据和产生方法隔离,而只侧重测试的业务属性。

大量需要业务累积才能形成的测试数据,一般只有一个办法,就是通过大量实际数据脱敏。但如果涉及面向公众业务或国防业务之类,考虑到安全策略限制,就只能用笨办法就通过自动化操作来逐步实施模拟,但是这个方法就是太慢,并且不见得好用。

    对测试数据准备都需要有专人专责的一段时间来做的,就是很大系统很大业务了,这时很有必要对测试数据采取严格的版本管理和配置部署管理。用户需要首先注册数据,注明对应版本。测试运行时,平台会有统一生成的脚手架,对应脚本需要使用的数据必须标明版本。

    而考虑到自动化和灵活性,一般比较通用的方法还是先考虑实际数据脱敏,然后通过SQL脚本为基础,结合API调用,需要灵活配置的部分放到配置文件中,再加上配置管理来保证。这一般只在大型网站、大型系统有这个必要。

    实际测试时,针对测试数据,可能有以下一些策略:1、检索:只允许从现在系统中或已使用的数据中检索,没有的话直接生成数据失败;2、新创建:有些时候需要全新创建数据;3、智能:无所谓,只要有符合要求 ;4、out-of-box:使用缓冲池预先准备的数据。

51. 请简述Appium和selenium的原理?

selenium的原理

我们使用Selenium实现自动化测试,主要需要3个东西

1.测试脚本,可以是python,java编写的脚本程序(也可以叫做client端)

2.浏览器驱动, 这个驱动是根据不同的浏览器开发的,不同的浏览器使用不同的webdriver驱动程序且需要对应相应的浏览器版本,比如:geckodriver.exe(chrome)

3.浏览器,目前selenium支持市面上大多数浏览器,如:火狐,谷歌,IE等

appium工作原理

当开启appium服务器的同时就开启了监听端口;我们运行脚本的时候,调用任何的appiumAPI,都会向Appium Server端post一条HTTP请求,请求内容就是根据webdriver wire protocol协议规定的一条JSON格式的数据;Appium Server端接收到请求后,解析出JSON数据并发送到手机端;手机端上已经由BootStrap.jar(iOS为BootStrip.js)开启的socket服务器监听相应的端口,BootStrap.jar在appium每个session第一次访问手机端的时候会自动安装;手机端接收到对应的请求后,通过BootStrap.jar翻译成UIAutomator能执行的命令,然后通过UIAutomator处理并操作APP完成测试。

52. 如果使用monkey发现了一个闪退,请问怎么使用monkey重现它?

重新按照出现的步骤进行重现

53. Charles拦截并修改请求和返回值的步骤以及在你项目中的应用场景?

54. Charles如恶化抓取app端的htpps接口的?

1,下载charles

https://www.charlesproxy.com/download/

2.跟着提示一直下一步安装即可

3.启动charles安装证书 点击charles中的help­>SSL Proxying­>install charles Root certificate

安装时注意 选择将所有证书存储到第三方根证书颁发机构

最后点击证书路径 看证书状态 显示改证书没有问题即可

4.手机端配置网络代理 需要和电脑端在同一个局域网

win+R 输入cmd 输入ipconfig查看ip地址

点击Proxy -》Proxy Settings查看端口号

5.苹果手机 在safari浏览器中输入: http://chls.pro/ssl

安卓手机 在自带的浏览器中输入 http://chls.pro/ssl

会自动提示下载 安装证书后 有弹窗选择Allow

6.如果浏览器输入http://chls.pro/ssl 没有网络 需要在pc端设置下网络防火墙允许charles应用通过

7.此时抓包charles会显示unknown

需要配置抓取https请求

点击Proxy -> SSL Proxying Settings

Host输入框输入*

Port输入框输入*

8.以上就配置好了 如果不行请重启charles

55. 如何实现jenkins实现自动自动化打包发布和启动?

1.下载jenkins安装包并安装

本例使用jenkins-2.86的windows版本

2.安装常用插件

如PUBLISH OVER SSH、Subversion Plug-in、Credentials Binding Plugin、Maven Integration plugin

3.配置svn账号,用于拉取源码

4.配置maven、JDK

5.配置SSH服务器

6.构建一个maven工程

7.构建完成后把war包发布到远程tomcat,并执行脚本重启tomcat

8.需要修改脚本为可执行脚本,否则jenkins权限不够执行shell脚本

9.jenkins控制台乱码

56. 如何进行jmeter 上下游接口测试?

57. 你为什么离开上家公司?离职原因(这个会在最后问)

58. 请写出冒泡排序

public static int[] buddleSort(int[] arr){

for(int i=1;i<arr.length;i++){

    for(int j=0; j<arr.length-i; j++){

        if(arr[j] < arr[j+1]){

            int temp = arr[j];

            arr[j] = arr[j+1];

            arr[j+1] = temp;

        }

    }

}

return arr;

}

59. 1~9999数列中数字3出现的次数。用递推方法解出。

def count_digit(number):
return len(str(number))

def countThree(digit):
if not isinstance(digit,int):
raise TypeError(‘number is not int’)
# digit = len(str(number))
if(digit <=0):
return 0
if(digit ==1):
return 1
return 10*countThree(digit-1) + 10 **(digit-1)

print(countThree(count_digit(9999)))

60. 从一个数组中找出前4个最大的数,用最优解。

#快速排序:最快的n*logN
def qiuckSort(list):
if len(list)<2:
return list
mid = list[0]
left = [i for i in list[1:] if i <= mid]
right = [i for i in list[1:] if i mid]
finallyList = qiuckSort(left)+[mid] + qiuckSort(right)
return finallyList
array = [3, 0, 1, 832,23,45, 5, 5, 6,46, 9, 56, 897]
print(qiuckSort(array)[-4:])

61. 写一段程序,删除字符串a中包含的字符串b,举例 输入a = “asdw”,b = “sd” 返回 字符串 “aw”,并且测试这个程序。

def delBString(a,b):
if not isinstance(a,str):
raise TypeError(“a is not str”)
if not isinstance(b,str):
raise TypeError(“b is not str”)
if len(a) < len(b):
raise Exception(‘a length must large to b length’)
result = []
flag = False
i=0
la = len(a)
lb = len(b)
while i <la:
j = 0
while j < lb:
if i+j < la and a[i+j] == b[j]:
j += 1
else :
j += 1
flag = False
break
flag = True
if flag:
i += lb
else:
result.append(a[i])
i += 1
return “”.join(result)
测试用例:
class TestdelInnerStringFunctions():
def setUp(self):
pass
def tearDown(self):
pass
def test_nomorl1(self):
assert delBString(‘asdqwe’,‘we’) == ‘asdq’
def test_nomorl2(self):
assert delBString(‘asdqwe’,‘0’) == ‘asdqwe’
def test_nomorl3(self):
assert delBString(‘测试asdqwe’,‘we’) == ‘测试asdq’
def test_nomorl4(self):
assert delBString(‘测试asdqwe’,‘测试’) == ‘asdqwe’
def test_nomorl5(self):
assert delBString(‘asdqwe’,’’) == ‘asdqwe’
def test_nomorl6(self):
with pytest.raises(TypeError):
delBString(’’, 0)
def test_nomorl7(self):
with pytest.raises(TypeError):
delBString(0, ‘as’)
def test_nomorl8(self):
with pytest.raises(TypeError):
delBString(True)
def test_nomorl9(self):
with pytest.raises(Exception) as excinfo:
delBString(‘acd’,‘acde’)
assert “a length must large to b length” in str(excinfo.value)
assert excinfo.type == Exception

62. 写一个方法把字符串转为数字,比如 str=“1234”,变成 int 1234。并且测试这个程序

def StrToInt(a):
res ,mult,flag = 0,1,1
if not isinstance(a,str):
raise TypeError(“a is not str”)
if a[0] ==’-’ or a[0] == ‘+’:
if a[0] == ‘-’:
flag = -1
a = a[1:]
for i in range(len(a)-1,-1,-1):
if ‘9’ >=a[i] >= ‘0’:
res +=(ord(a[i]) -48) * mult
mult = mult *10
else :
return 0
return res * flag

def test_strToInt2(self):
with pytest.raises(TypeError):
StrToInt(34)

测试用例:
def test_strToInt3(self):
assert StrToInt(‘测试赛’) == 0

def test_strToInt4(self):
assert StrToInt(’+2147689’) == 2147689

def test_strToInt5(self):
assert StrToInt(‘45’) == 45

def test_strToInt6(self):
assert StrToInt(‘1a33’) == 0

def test_strToInt7(self):
assert StrToInt(’-5’) == -5

63. 数据库的中的左连接右连接和全连接内连接的区别?

1、内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。

内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。

2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。

在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:

1)LEFT JOIN或LEFT OUTER JOIN

左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

2)RIGHT JOIN 或 RIGHT OUTER JOIN

右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

3)FULL JOIN 或 FULL OUTER JOIN

完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

64. 测试结束的标准是什么?

单元测试退出标准

  1. 单元测试用例设计已经通过评审

  2. 核心代码100% 经过Code Review

  3. 单元测试功能覆盖率达到100%

  4. 单元测试代码行覆盖率不低于80%

  5. 所有发现缺陷至少60%都纳入缺陷追踪系统且各级缺陷修复率达到标准

  6. 不存在A、B类缺陷

  7. C、D、E类缺陷允许存在

  8. 按照单元测试用例完成了所有规定单元的测试

  9. 软件单元功能与设计一致

集成测试退出标准

  1. 集成测试用例设计已经通过评审

  2. 所有源代码和可执行代码已经建立受控基线,纳入配置管理受控库,不经过审批不能随意更改

  3. 按照集成构件计划及增量集成策略完成了整个系统的集成测试

  4. 达到了测试计划中关于集成测试所规定的覆盖率的要求

  5. 集成工作版本满足设计定义的各项功能、性能要求

  6. 在集成测试中发现的错误已经得到修改,各级缺陷修复率达到标准

  7. A、B类BUG不能存在

  8. C、D类BUG允许存在,但不能超过单元测试总BUG的50%。

  9. E类BUG允许存在

系统测试退出标准

  1. 系统测试用例设计已经通过评审

  2. 按照系统测试计划完成了系统测试

  3. 系统测试的功能覆盖率达100%

  4. 系统的功能和性能满足产品需求规格说明书的要求

  5. 在系统测试中发现的错误已经得到修改并且各级缺陷修复率达到标准

  6. 系统测试后不存在A、B、C类缺陷

  7. D类缺陷允许存在,不超过总缺陷的5%

  8. E类缺陷允许存在,不超过总缺陷的10%

注:这只是一套比较理想化的退出标准,但在实际工作中不可能达到这种程度,尤其是测试覆盖率和缺陷解决率不可能是100%。现在的军方标准是达到99%。对于通用软件来说就要根据公司实际情况了。

热门文章

暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法&#xff0c;在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较&#xff0c;从而确定目标数是在中间数的左边还是右边&#xff0c;将查…
暂无图片
编程学习 ·

GMX 命令分类列表

建模和计算操作命令&#xff1a; 1.1 . 创建拓扑与坐标文件 gmx editconf - 编辑模拟盒子以及写入子组(subgroups) gmx protonate - 结构质子化 gmx x2top - 根据坐标生成原始拓扑文件 gmx solvate - 体系溶剂化 gmx insert-molecules - 将分子插入已有空位 gmx genconf - 增加…
暂无图片
编程学习 ·

一文高效回顾研究生课程《数值分析》重点

数值分析这门课的本质就是用离散的已知点去估计整体&#xff0c;就是由黑盒子产生的结果去估计这个黑盒子。在数学里这个黑盒子就是一个函数嘛&#xff0c;这门课会介绍许多方法去利用离散点最大化地逼近这个函数&#xff0c;甚至它的导数、积分&#xff0c;甚至微分方程的解。…
暂无图片
编程学习 ·

在职阿里5年,一个28岁女软测工程师的心声

简单的先说一下&#xff0c;坐标杭州&#xff0c;14届本科毕业&#xff0c;算上年前在阿里巴巴的面试&#xff0c;一共有面试了有6家公司&#xff08;因为不想请假&#xff0c;因此只是每个晚上去其他公司面试&#xff0c;所以面试的公司比较少&#xff09; ​ 编辑切换为居中…
暂无图片
编程学习 ·

字符串左旋c语言

目录 题目&#xff1a; 解题思路&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 总代码&#xff1a; 题目&#xff1a; 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符…
暂无图片
编程学习 ·

设计模式--观察者模式笔记

模式的定义与特点 观察者&#xff08;Observer&#xff09;模式的定义&#xff1a;指多个对象间存在一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式&#xf…
暂无图片
编程学习 ·

睡觉突然身体动不了,什么是睡眠痽痪症

很多朋友可能有这样的体验&#xff0c;睡觉过程中突然意识清醒&#xff0c;身体却动弹不了。这时候感觉非常恐怖&#xff0c;希望旁边有一个人推自己一下。阳光以前也经常会碰到这样的情况&#xff0c;一年有一百多次&#xff0c;那时候很害怕晚上到来&#xff0c;睡觉了就会出…
暂无图片
编程学习 ·

深入理解C++智能指针——浅析MSVC源码

文章目录unique_ptrshared_ptr 与 weak_ptrstd::bad_weak_ptr 异常std::enable_shared_from_thisunique_ptr unique_ptr 是一个只移型别&#xff08;move-only type&#xff0c;只移型别还有std::mutex等&#xff09;。 结合一下工厂模式&#xff0c;看看其基本用法&#xff…
暂无图片
编程学习 ·

@TableField(exist = false)

TableField(exist false) //申明此字段不在数据库存在&#xff0c;但代码中需要用到它&#xff0c;通知Mybatis-plus在做写库操作是忽略它。,.
暂无图片
编程学习 ·

Java Web day15

第十二章文件上传和下载 一、如何实现文件上传 要实现Web开发中的文件上传功能&#xff0c;通常需要完成两步操作&#xff1a;一.是在Web页面中添加上传输入项&#xff1b;二是在Servlet中读取上传文件的数据&#xff0c;并保存到本地硬盘中。 需要使用一个Apache组织提供一个…
暂无图片
编程学习 ·

【51nod 2478】【单调栈】【前缀和】小b接水

小b接水题目解题思路Code51nod 2478 小b接水 题目 输入样例 12 0 1 0 2 1 0 1 3 2 1 2 1输出样例 6解题思路 可以发现最后能拦住水的都是向两边递减高度&#xff08;&#xff1f;&#xff09; 不管两个高积木之间的的积木是怎样乱七八糟的高度&#xff0c;最后能用来装水的…
暂无图片
编程学习 ·

花了大半天写了一个UVC扩展单元调试工具

基于DIRECTSHOW 实现的&#xff0c;用的是MFC VS2019. 详见&#xff1a;http://www.usbzh.com/article/detail-761.html 获取方法 加QQ群:952873936&#xff0c;然后在群文件\USB调试工具&测试软件\UVCXU-V1.0(UVC扩展单元调试工具-USB中文网官方版).exe USB中文网 USB中文…
暂无图片
编程学习 ·

贪心(一):区间问题、Huffman树

区间问题 例题一&#xff1a;区间选点 给定 N 个闭区间 [ai,bi]请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 N&#xff0c;表示区间数。 接下来 …
暂无图片
编程学习 ·

C语言练习实例——费氏数列

目录 题目 解法 输出结果 题目 Fibonacci为1200年代的欧洲数学家&#xff0c;在他的着作中曾经提到&#xff1a;「若有一只免子每个月生一只小免子&#xff0c;一个月后小免子也开始生产。起初只有一只免子&#xff0c;一个月后就有两只免子&#xff0c;二个月后有三只免子…
暂无图片
编程学习 ·

Android开发(2): Android 资源

个人笔记整理 Android 资源 Android中的资源&#xff0c;一般分为两类&#xff1a; 系统内置资源&#xff1a;Android SDK中所提供的已经定义好的资源&#xff0c;用户可以直接拿来使用。 用户自定义资源&#xff1a;用户自己定义或引入的&#xff0c;只适用于当前应用的资源…
暂无图片
编程学习 ·

零基础如何在短时间内拿到算法offer

​算法工程师是利用算法处理事物的职业 算法&#xff08;Algorithm&#xff09;是一系列解决问题的清晰指令&#xff0c;也就是说&#xff0c;能够对一定规范的输入&#xff0c;在有限时间内获得所要求的输出。 如果一个算法有缺陷&#xff0c;或不适合于某个问题&#xff0c;执…
暂无图片
编程学习 ·

人工智能:知识图谱实战总结

人工智能python&#xff0c;NLP&#xff0c;知识图谱&#xff0c;机器学习&#xff0c;深度学习人工智能&#xff1a;知识图谱实战前言一、实体建模工具Protegepython&#xff0c;NLP&#xff0c;知识图谱&#xff0c;机器学习&#xff0c;深度学习 人工智能&#xff1a;知识图…
暂无图片
编程学习 ·

【无标题】

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…