面试题总结

**

1.Web 测试和App测试的相同点和区别

**
相同点
(1)设计测试用例时依然是根据边界值、有效等价类和无效等价类、场景法、因果图法、错误推测法来设计用例。

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

(3)测试方向依然是:ui界面布局是否合理,风格按钮是否简洁美观、功能测试、稳定性测试、页面载入和翻页的速度,登录时长,内存是否溢出、安全测试、性能测试。

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

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

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

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

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

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

全新安装新版本

新版本覆盖旧版本安装

卸载旧版本,安装新版本

卸载新版本,安装新版本

(3)兼容性的区别

web测试主要考虑浏览器内核以及浏览器版本的兼容,操作系统的兼容性,分辨率的兼容。

APP兼容性主要考虑不同厂家的不同手机型号、系统版本、屏幕分辨率、屏幕大小、内存大小。

4)APP横竖屏测试,不同方向屏幕显示以及操作。

5)APP测试还需要考虑网络2G3G4G5G WIFI 弱网环境。

2.如何测定一个app的登陆场景

1、页面基本元素的操作。

2、大量字符,特殊字符,边界值,必填项校验。

3、注册手机号的特殊性验证,注册邮箱的格式验证。

4、密码大小写是否敏感,密码是否加密展示,密码是否有可见按钮功能,密码框能否使用复制粘贴。

5、验证码校验:必填项,过期,错误,无网络时获取验证码,多次获取,超过获取次数,输入验证码后,修改手机号。

6、登陆时与系统的交互:锁屏,蓝牙,home,后退,横竖屏,修改字体字号。

7、逆向思维:已注册账号注册,未注册账号忘记密码,未注册账号登陆,注册过程中退出再次注册。

8、输入法交互,切换输入法,切换输入输入模式,手写/九宫格。

9、登陆账号的多样性:多个账号轮流登陆,同一个账号多角色登陆。

10、第三方登录验证:账号授权,信息正确,取消授权。

11、登陆页面跳转,返回,登陆成功及其他页面跳转。

12、手机兼容性测试:分辨率兼容,系统兼容,系统版本兼容,App版本兼容。

13、网络切换,网络断开,弱网

**

3.push推送消息如何测试

**
消息推送对象

消息推送一般可以自定义推送对象,有全部推送,精确推送,及安卓和IOS渠道推送,注意推送对象是否正确,推送之前确认自己是否在测试环境操作,以免造成生产问题。

消息简介

客户端收到消息推送有两种形式,客户端后台运行一般推送显示在通知栏,客户端前台运行一般弹出弹框,简介内容注意字数过多溢出情况。

消息详情

注意详情所支持的内容,包括文字、图片、表情包、换行以及链接跳转。

消息推送场景(支持定时推送)

(1)消息推送时间:

a)设置过去时间

b)未推送之前修改消息内容

c)删除消息,查看是否还会推送

(2)客户端运行状态

a)前台运行

b)后台运行

c)进程关闭状态

(2)特殊场景

a)多个提醒冲突

b)当天设置当天推送

c)当天设置隔几天起效

**

4.app闪退是由那些原因造成的

**
带宽限制:带宽不佳的网络对App所需的快速响应时间可能不够。

网络的变化:不同网络间的切换可能会影响App的稳定性。

内存管理:可用内存过低,或非授权的内存位置的使用可能会导致App失败。

用户过多:连接数量过多可能会导致App崩溃。

代码错误:没有经过测试的新功能,可能会导致App在生产环境中失败。

第三方服务:广告或弹出屏幕可能会导致App崩溃。
**

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

**
一.接口请求的八种方式:

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协议中能够将连接改为管道方式的代理服务器

二.get 和 post区别:

1.get请求无消息体,只能携带少量数据,且不安全

post请求有消息体,可以携带大量数据,且安全

2.携带数据的方式:

get请求将数据放在url地址中

post请求将数据放在消息体body中

3.GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

三.Get和head被称为安全方法:

它们只会从服务器获取数据而不会操作数据,数据不变就不会有问题
**
**

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

**
1.200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
2.404:(客户端问题)请求的资源没有找到,说明客户端错误的请求了不存在的资源;
3.500:(服务端问题)请求资源找到了,但服务器内部发生了不可预期的错误;
4.301/302/303:(网站搬家了,跳转)重定向
5.304: Not Modified,代表上次的文档已经被缓存了,还可以继续使用。如果你不想使用本地缓存可以用Ctrl+F5 强制刷新页面

6.如何查看移动端日志以及出现哪些异常

**

7.app测试如何展开主要测试哪些

**

  1. 功能

首先设计的功能必须是10Z0%的测试,而且是最基本的测试。

  1. 安装卸载

App可以正常安装启动,各大应用市场下载安装,升级安装,跨版本升级安装,手机存储满时安装。安装时的权限也是很重要的。

App的卸载应该很容易,直接系统自带卸载。

  1. 流畅度

App的流畅度最能考验一款软件的易用性。如果一个软件打开就卡,随便滑动几下页面就卡死,谁还会用第二次?

  1. 兼容性

对于兼容性,因为公司不可能给你所有市场上的安卓机,所以尽量在自己有的机子上测试通过的条件下,去各大网站远程真机测试,有很多都是免费的。

对于iOS,可以在电脑上模拟真机测试跑跑smoke。

  1. 网络

弱网,2g,2.5g,3g,4g,wifi情况下的使用。网络切换时的使用,模拟地铁,停车场等的测试都是很有必要的。

  1. 流量消耗

偷偷盗用流量的手机app,只要发现我就会删除,所以流量消耗的测试一定要多测试。主要看看断开wifi情况下会不会偷跑流量。

  1. 低配手机

低配手机一般都指安卓4.4.0以下版本的手机,运行内存不大,很容易卡住。可以看看低配手机下是否能正常运行app,该显示的都能正常显示。

**

8.App、的性能测试关注点有哪些

**
1.响应

2.内存

3.cpu

4.FPS(app使用的流畅度)

5.GPU多度

6.耗电

7.耗流

**

9.如何对App进行弱网测试

**
fiddler 模拟网络延迟

1、使用真实的SIM卡、运营商网络来进行测试(移动无线测试中存在一些特别的BU6必须在特定的真实的运营商网络下才会发现)

2、通过代理的方式模拟弱网环境进行测试(charles硬延迟)在fiddler和 charles中可以设置网络,fiddler可以在rule中调,charles可以在proxy中延迟设置中设置网染速度。

3、连接模拟弱网的热点进行测试 比如360wifi助手可以设置

**

10.常见的ADB命令 monkey命令

**
1、adb devices:查看已连接的设备

2、adb version:查看adb的版本序列号

3、adb -s <设备名字>:指定某设备做什么(设备名字用1的方法可以查看)

4、adb install <安装包.apk>:安装应用(写清楚apk的完整路径)adb -s <设备名字> install <安装包.apk>:指定设备安装应用

5、adb shell:通过远程shell命令来控制模拟器/设备

6、exit:退出shell远程连接,回到原路径。(Ctrl+d,退出shell,回到默认路径)

7、adb pull <设备端路径> :将指定的文件从设备/模拟器上拷贝到pc端(后面的pc端路径可以不指定,默认存储在当前路径下)。

例: adb pull /sdcard/log.txt c:/monkey

8、adb push <设备端路径>:将指定的文件从pc端拷贝到设备/模拟器上

9、adb shell pm list packages:列出电脑端所有apk的包名

10、adb logcat:查看pc端的日志输出。adb shell界面只需输入logcat,查看设备端日志输出(退出Ctrl+c)

Monkey命令扩展

1、最简单的monkey执行语句:(adb shell)monkey –p com.jianjiexuan.na –v 500 (对com.jianjiexuan.na 这个程序包单独进行一次500次的monkey测试)

  名词解释:-p:用于约束限制,用此参数指定一个或多个包。指定包之后,Monkey将只允许系统启动指定的APP。

如果不指定包,Monkey将允许系统启动设备中的所有APP。指定多个包:monkey -p –p -p -v 500-v:用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:

  日志级别 Level 0

  例 monkey –p com.jianjiexuan.na –v 500说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息

  日志级别 Level 1

  例 monkey –p com.jianjiexuan.na –v -v 500说明:提供较为详细的日志,包括每个发送到Activity的事件信息

  日志级别 Level 2

  例 monkey –p com.jianjiexuan.na –v -v -v 500

  说明:最详细的日志,包括了测试中选中/未选中的Activity信息

2、延时及固定序列(adb shell)monkey -s 100 -p com.jianjiexuan.na – -throttle 1000 -v 500 (每次执行一次有效的事件后休眠1000毫秒)

(adb shell)monkey -p com.jianjiexuan.na – -throttle 1000 – -randomize-throttle -v 500 (每次执行一次有效事件后随机延时0-200毫秒)

名词解释:-s:用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

出现问题下次可以重复同样的系列进行排错。–throttle:固定延时,用于指定用户操作(即事件)间的时延,单位是毫秒;

–randomize-throttle:随机延时,用于指定用户操作(即事件)间的时延,单位是毫秒。

3、保存monkey运行结果1)保存在PC中adb shell monkey –p com.jianjiexuan.na –v 500 > d:\monkey\log.txt 2)保存在手机中手机端进入shell模式:

  adb shell monkey –p com.jianjiexuan.na –v 500 > /mnt/sdcard/monkey/log.txt

4、monkey事件百分比的调整(adb shell)monkey -p com.jianjiexuan.na -v – -pct-anyevent 100 500指定多个类型事件的百分比:

  monkey -p com.jianjiexuan.na -v –pct-anyevent 50 –pct-appswitch 20 500

  名词解释:–pct-****:

  monkeygai01.png

  设置某个事件的百分比。后面接数字(0-100),100即100%的概率执行该事件注意:各事件类型的百分比总数不能超过100%。

如果不进行设置则显示默认百分比。

5、正在运行的monkey如何终止如在命令窗口端直接打印结果,想要停止monkey的运行,那么就再打开一个cmd命令窗口查看monkey的进程:

  adb shell ps | find “monkey”kill掉该进程就可以adb shell kill + 进程编号 ,

**

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

**
1、Android多分辨率测试,20多种,IOS较少。

2、Android手机操作系统较多,IOS较少且不能降级,只能单向升级;新的IOS系统中的资源库不能完全兼容低版本中的IOS系统的应用,低版本IOS系统中的应用调用新的资源库,会直接导致闪退。

3、Android操作习惯,Back键是否被重写,应用数据从内存移动到SD卡能否正常运行。

4、安装卸载测试:Android的下载和安装平台较多,IOS主要是AppStore,iTunes,TestFlight。

5、Push测试:Android点击home键,程序后台运行,此时点击Push消息,唤醒后台应用;iOS点击home键关闭程序和屏幕锁屏的情况。

6、单条item的操作:Android中分为点击和长按,点击一般进入一个新的页面,长按进入编辑模式。IOS中分为点击和滑动,点击一般进入一个新的页面,滑动会出现对item的常用操作。

7、悬浮窗:Android中可以有各种悬浮窗,IOS并不支持。

**

12.常见的接口协议/类型

**
1.HTTP类型/协议:

通过GET或POST来获取数据,在数据处理上效率比较高 == 概念

2.Webservice 类型/协议:

通过soap协议来获取数据,比起 http 来说能处理更加复杂的数据类型。本质上也是 http 协议。

**

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

**
post 、get 、 put、delete、 options、patch、 copy、 head

**

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

**
接口测试包括内部接口测试和外部接口测试。服务器接口测试这种接口是后端开发与前端/移动端页面进行数据交互的。在还没有前端界面的时候,进行接口测试,会提前发现一些bug。

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

**

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

**
从后端角度出发:后端测试自己开发的接口,更多在于单测层面,好的开发会从接口业务调用场景出发,覆盖一些功能case,但是开发测试自己的代码,他往往觉得自己的代码已经很完美了,所以开发测试自己的代码往往是覆盖不全面的。

从前端角度出发:前端开发要和后端联调,所以前端的关注点是你接口返回给我的数据结构是不是严格按照技术方案上契约来设计的,你让我传给接口的参数是不是按照契约约定的,,所以前端开发不太关注接口逻辑对不对,只关心我只要入参给的对,返回的数据结构对就行了。

从测试角度出发:测试是保证质量最重要的一环,接口测试我们不仅仅只考虑功能层面用例,还要从非功能层面出发,比如接口性能,稳定性,安全性。我们还要结合业务场景,去思考一些反向的异常case,和其他服务相互调用过程的异常场景怎么兜底,依赖服务响应超时怎么兜底,系统异常怎么兜底等。

综上,因为前后端对同一个接口的关注点是不同的,所以不能说是重复测试。保证质量,更多依赖测试人员。三者相互协调能得到质量最优解。

**

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

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

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

但是相对功能测试而言,接口测试有一个比较明显的区别,就是输入不再是界面的,而是一个基于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、 执行,添加一个结果树

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

**

17.get/post 的区别?

**
观点:本质上没有区别

GET和POST是什么?HTTP协议中的两种发送请求的方法。

HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的,HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

那往常get/post大大小小的限制是怎么来的呢?

互联网上,有着不同的浏览器(发起http请求)和服务器(接受http请求), 虽然理论上,你可以在url中无限加参数。但是浏览器不能接受,加减数据也有着很大的成本,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你处理,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

GET和POST还有一个重大区别,简单的说:

GET产生一个TCP数据包;POST产生两个TCP数据包。

长的说:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

  1. GET与POST都有自己的语义,不能随便混用。

  2. 在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

**

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

**
接口测试,首先需要开发提供接口文档。最重要的有一下几点:

被测接口的地址

接口参数,以及各个参数的说明

必要的http头与http体 ( http头是可以自定义的,可以用来校验是否是自己人访问 )

接口返回什么值,以及各个返回值的说明

接口是干什么的、

接口测试用例
功能测试:测试这个接口的功能是否实现,并且测试这个接口是否按照接口文档来进行开发的(比如说接口文档规定了一些关键字,而开发的时候把关键字改成了其他的关键字,因为在整个项目周期,并不只有一个开发而是有多个,所以可能因为在开发过程中因为关键字不一样导致某些开发的功能异常,还有自动化脚本也会发生异常)

逻辑业务,主要指的是一些逻辑业务依赖关系(比如支付宝提交订单的时候要保证你是在登录的情况下,如果你没有登录而提交成功了,这就是异常,可以修改请求的cookie来测试)

异常测试:参数异常:关键字参数(应用其他的关键字替换进行测试)、参数为空、参数多少(通过添加参数增添个数),参数错误。数据异常:关键字数据(填入的数据用其他的数据语言的数据替用)、数据长度、数据为空、数据错误。

**

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

**
性能测试:主要是在压力测试下收集系统的各项性能指标,与预期的指标进行对比,如关注并发用户数,cpu、内存,响应时间;

负载测试:性能测试的一种,对系统不断增加压力,或增加一定压力下的持续时间,知道系统的性能指标达到极限,如响应时间超过预定指标,强调压力持续时间。

强度或压力测试:通过增加系统负载,确定系统在什么条件下失效,来获得系统性能下降拐点,侧重压力大小。

容量测试:是系统承受超额的数据容量,测试系统是否能够正常处理,通常和数据库有关。

**

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

**
在系统第一轮冒烟测试后就应该介入性能测试,不管功能实现中有多少bug都不影响性能测试的初步阶段,我们可以先进行简单的性能测试。尽量排除功能缺陷的干扰,尽早发现性能上的瓶颈。即时修改方案

**

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

**
压力测试:强调极端暴力

稳定性测试:在一定压力下,长时间运行的情况

基准测试:在特定条件下的性能测试

负载测试:不同负载下的表现

容量测试:最优容量

**

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

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

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

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

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

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

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

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

性能计数器
性能计数器是描述服务器或操作系统性能的一些数据指标,如使用内存数、进程时间,在性能测试中发挥着“监控和分析”的作用,尤其是在分析统统可扩展性、进行新能瓶颈定位时有着非常关键的作用。

Linux中可以使用top或者uptime命令看到当前系统的负载及资源利用率情况。

**

23.如何判断一个bug是前端bug还是后台bug?

**
前端是用户看得见摸得着的东西,主要体现在页面的视觉效果以及交互设计上。比如说一个网站的页面风格、页面跳转等,最简单的例子就是一个注册界面:前端设计界面风格,约束输入的字符类型、长度以及合法性校验等,不涉及到与数据库之间的信息交流。

后台则侧重于更深层面的东西,关于逻辑,关于数据,关于平台的稳定性与性能。后台主要负责实现具体的功能,举个例子,还是那个注册界面,前端写好了界面,规定了你能输入哪些数据,不能输入哪些数据,而后台则会把你输入的信息与数据库进行比对,如果是新用户,则顺势在数据库中插入一条信息。

**

24.Python 数据类型有哪些?

**
1)int(整型)

    所有整数对应的数据类型。在python2.x还有long

2)float(浮点型)

   所有的小数对应的类型都是浮点型。(浮点型支持科学计数法)

3)str(字符串)

  所有的文本数据对应的数据类型。

4)bool(布尔)

  True 和 False 对应的数据类型。

5)其他数据类型

 比如:list(列表),tuple(元组),dict(字典),迭代器,生成器,函数自定义类型。

25.给你一个网站,你如何测试?给你一个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等工具进行弱网测试。

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.请描述下微信朋友圈发小视频的用例设计?

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下保存一个文本文件时会弹出保存对话框,如果为文件名建立测试用例,等价类应该怎样划分?

单字节,如A;
双字节, AA、我我;
特殊字符 /‘。‘;、=-等;
保留字,如com;
文件格式为8.3格式的;
文件名格式为非8.3格式的;
/,,*等九个特殊字符。
空字符串;
数字字母组合;
单字节双字节组合;
字符与特殊字符组合

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.自动化测试用例的覆盖率多少?

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拦截并修改请求和返回值的步骤以及在你项目中的应用场景?

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

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

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 for(int j=0; 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 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.数据库的中的左连接右连接和全连接内连接的区别?

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

单元测试退出标准

  1. 单元测试用例设计已经通过评审
  2. 核心代码100% 经过Code Review
  3. 单元测试功能覆盖率达到100%
  4. 单元测试代码行覆盖率不低于80%
  5. 所有发现缺陷至少60%都纳入缺陷追踪系统且各级缺陷修复率达到标准
  6. 不存在A、B类缺陷
  7. C、D、E类缺陷允许存在
  8. 按照单元测试用例完成了所有规定单元的测试
  9. 软件单元功能与设计一致
    集成测试退出标准
  10. 集成测试用例设计已经通过评审
  11. 所有源代码和可执行代码已经建立受控基线,纳入配置管理受控库,不经过审批不能随意更改
  12. 按照集成构件计划及增量集成策略完成了整个系统的集成测试
  13. 达到了测试计划中关于集成测试所规定的覆盖率的要求
  14. 集成工作版本满足设计定义的各项功能、性能要求
  15. 在集成测试中发现的错误已经得到修改,各级缺陷修复率达到标准
  16. A、B类BUG不能存在
  17. C、D类BUG允许存在,但不能超过单元测试总BUG的50%。
  18. E类BUG允许存在
    系统测试退出标准
  19. 系统测试用例设计已经通过评审
  20. 按照系统测试计划完成了系统测试
  21. 系统测试的功能覆盖率达100%
  22. 系统的功能和性能满足产品需求规格说明书的要求
  23. 在系统测试中发现的错误已经得到修改并且各级缺陷修复率达到标准
  24. 系统测试后不存在A、B、C类缺陷
  25. D类缺陷允许存在,不超过总缺陷的5%
  26. E类缺陷允许存在,不超过总缺陷的10%
    注:这只是一套比较理想化的退出标准,但在实际工作中不可能达到这种程度,尤其是测试覆盖率和缺陷解决率不可能是100%。现在的军方标准是达到99%。对于通用软件来说就要根据公司实际情况了。

你可能感兴趣的:(面试题总结)