赞
踩
今天抽空整理下软件测试面试中的那点事儿吧,希望可以帮助正在找工作或想跳槽的家人们,可以找到高薪工作
为了发现程序中的错误而执行程序的过程
增强软件使用可靠性,发现软件存在的不足和差异,提高软件质量。简单地说,就是替用户受过,测试的最终目的是确保最终交给用户的产品的功能符合用户的需求,把尽可能多的问题在产品交给用户之前发现并改正
发现尽可能多的错误
测试是一个为了寻找错误而运行程序的过程
一个好的测试案例是指很可能找到迄今为止尚未发现的错误的用例
一个成功的测试是指揭示了迄今为止尚未发现的错误的测试
如果条件允许,原则上来说,是越早介入需求分析越好,因为测试人员对需求理解越深刻,对测试工作的开展越有利,可以尽早的确定测试思路,减少与开发人员的交互,减少对需求理解上的偏差原则上,测试人员对需求了解得越深入对测试工作越有利,所以最好一开始就应该参加需求分析工作,这样做可以带来如下好处:
测试人员全程参与需求分析,对需求了解得很深入,减少了很多与开发人员的交互,节省了时间
早期确定测试用例的编写思路,为测试打好基础
可以获取一些测试数据,为测试用例设计提供帮助
可以发现需求不合理的地方,降低了测试成本
测试人员主要的工作之一就是确认系统是否正确实现了需求
测试项目:杯子
需求测试:查看杯子使用说明书界面测试:查看杯子外观
功能度:用水杯装水看漏不漏;水能不能被喝到安全性:杯子有没有毒或细菌
可靠性:杯子从不同高度落下的损坏程度
可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用
兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等
易用性:杯子是否烫手、是否有防滑措施、是否方便饮用
用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述
疲劳测试:将杯子盛上水(案例一)放 24 小时检查泄漏时间和情况
压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
跌落测试: 杯子加包装(有填充物),在多高的情况摔下不破损
震动测试: 杯子加包装(有填充物),六面震动,检查产品是否能应对恶劣的铁路\公路\航空运输
基本功能测试(逻辑功能测试)
(1)硬度:是否达到设计标准
装载能力:在杯子内分别装入少量的、半杯的、满杯的,看其装载量是否达到设计标准
装载种类:开水(是否产生异味)、温水、冷水、冰水、咖啡
(2)界面测试(UI 测试)。
看其形状、大小设计是否适合人方便拿起
外观是否吸引人(广告嘛),赏心悦目
带广告的图案沾水受是否掉色、模糊
(3)易用性测试
看其形状、大小设计是否适合人方便拿起
残疾人士用此杯去喝水的容程度
杯子设计是否上大下小,在运输过程中可以套在一起有效利用空间,在使用时也容易拿开
(4)稳定性测试(24 X 7 测试)。装入液体后记录其多少以后漏水
(5)安全性测试。杯子所用的材料(包括纸基、涂层和广告颜料)是否符合食品卫生标准,在内外温
度等环境因素下是否会与所盛各种饮料相反应,而产生对人体有害的物质
查看文件内容的命令有 more less head tail cat
查看进程:ps -ef | grep 进程号
查看日志文件常用:less、view
表的创建:create table 表名 (列名1 类型 约束,列2 类型 约束…)
表的删除:drop table 表名
插入记录:insert into 表名…values…
更新记录:update 表名 set 列名=值 where 条件
删除记录:delete from 表名 where 条件
数据完整性指的是存储在数据库中的数据的一致性和准确性
完整性分类:
(1)实体完整性:主键值必须唯一且非空。(主键约束)
(2) 引用完整性(也叫参照完整性):外键要么为空,要么引用主表中存在的记录。(外键约束)
(3)用户自定义完整性:针对某一具体关系数据库中的约束条件
Nginx (engine x) 是一个高性能的HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器
Apache HTTP Server 是一个模块化的服务器,源于 NCSAhttpd 服务器
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,是开发和调试JSP 程序的首选
Fiddler 是一个 http 协议调试代理工具
打开Fiddler,进入 Tools-Options-HTTPS,配置允许抓取 HTTPS 连接和解析 HTTPS 流量,然后选择要解析的来源,设置是否忽略服务证书错误(这些操作做完之后,在浏览器方位 IP:8888,安装证书就可以在浏览器抓取 HTTPS 协议了)
1)发送接口请求
2)测试接口获取返回值
3)断言:判断实际结果是否符合预期
1)负载测试(Load Test)
通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试
2)压力测试(Stress Test)
通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能够提供的最大服务级别的测试
压力测试是一种特定类型的负载测试
3)疲劳强度测试
通常是采用系统稳定运行情况下能够支持的最大并发用户数或者日常运行用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程
疲劳强度测试可以反映出系统的性能问题,例如内存泄漏等
4)大容量测试(Volume Test)
对特定存储、传输、统计、查询业务的测试
appium1.6以后回答需要升级u2进行定位
事务是并发控制单位,用户定义的一个操作序列。这些操作要么都做,要么都不做,是不可分割的的工作单位。通过事务,sql server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性,主要用于一些对操作过程的完整性比较高的程序。(事务的特性:原子性、一致性、隔离性、持久性)
事务提交是提交事务的所有操作:具体来说就是将所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束。
事务回滚是数据库返回到事务开始的状态;事务在运行过程中发生某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,使数据回滚到事务开始时的状态。
大致是有8种方法:
a、选取最试用字段属性
b、使用连接(join)代替子查询
c、使用联合(union)来代替手动创建的临时表
d、使用事务
e、锁定表
f、使用外键
g、使用索引
h、优化查询语句
分布式架构系统简单的说是运行在多个处理器上的软件架构设计,分布式系统是建立在网络之上的软件系统、正是因为软件的特性,所以具有高度的内聚性和透明性
if既可以作为表达式用,也可在存储过程中作为流程控制语句使用
脏数据是在临时更新(脏读)中产生,比如事务A更新了某个数据项x,但是由于某种原因,事务A出现了问题,于是要把A回滚。但是回滚之前,另一个事务读取了数据X的值(A更新后),A回滚了事务,数据项恢复了原值。事务B读取的就是数据项X的就是一个“临时”值,这就是脏数据。=
1、检查系统是否有中毒的特征
2、检查软件/硬件的配置是否符合软件的推荐标准
3、确认当前的系统是否是独立,即没有对外提供什么消耗CPU资源的服务
4、如果是C/S或者B/S结构的软件,需要检查是不是因为与服务器的连接有问题,或者访问有问题造成的
5、在系统没有任何负载的情况下,查看性能监视器,确认应用程序对CPU/内存的访问情况
线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程
1、命令模式,2、编辑模式,3、末行模式
七层模型(应用层、表示层、会话层、传输层、网络层、数据链层、物理层)五层模型(应用层、传输层、网络层、数据链层、物理层)
测试目前主要是产品测试和项目测试。做自己公司的产品测试,如果碰到不能按原计划完成,本着为质量负责,一般都可以申请延期
如果是做项目,迫于合同和客户验收的压力,碰到不能按原计划完成的情况,就是项目风险了。而处理的方式基本都是“先测客户比较关心的,比较常用的功能”,保证通过客户验收,拿到项目款。分析客户验收所关心的功能点(比如客户最近几天提过什么需求,肯定要测试,因为时间短,他肯定记得),分析系统最脆弱的地方,走通所有业务流程等。而客户验收时候,不关心和不可能想到得地方可以不测试(比如系统中很多同步功能)
注册用户数、在线用户数、并发用户数、请求响应时间、事务响应时间、每秒点击数、吞吐率、业务成功率、tps(每秒事务处理数)、资源利用率,cpu、内存、带宽等
功能性、可靠性、效率性、可移植性、可维护性、易用性
测试人员需要做的工作
测试策略的设计: 质量是多维度的,功能测试、性能测试、兼容性测试等多种测试类型的结合
用例质量: 采用合适的用例方法、如何进行需求分析、用例评审
执行质量: 保证执行深度(界面、关联模块、数据库、日志)与广度(系统测试类型)
缺陷质量:bug评审,引入合适的bug流程
过程质量:合理的软件测试流程,测试过程监控
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主要有appstore,iTunes和testflight下载
7、升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区分新旧版本(如版本号),对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
adb shell dumpsys meminfo 包名(com.mbox.cn)
在拿到项目后,在熟悉需求、原型图后不必急着去设计用例,而是先需思考下测试思路,从哪方面下手,有哪些地方需要覆盖到,支持哪些平台,有哪些不同的常用场景,是否需要考虑到稳定性、性能等等,针对项目进行大概的测试规划,再根据大概的规划去逐个细化,最后形成用例,简单来说就是:
1.明确测试任务
2.分析测试范围
3.制定测试计划和测试用例
cdn的全称是 Content Delivery Network 即内容分发网络,通俗的理解就网站加速,CPU均衡负载,可以解决跨运营商,跨地区,服务器负载能力过低,带宽过少等带来的网站打开速度慢等问题
1、一个程序至少有一个进程,一个进程至少有一个线程
2、线程的划分尺度小于进程(资源比进程少),使得多线程程序并发性高
3、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大提高了程序的运行效率
4、线程不能独立运行,必须依存于进程中
5、一个线程可以多个协程,一个进程也可以单独拥有多个协程
6、线程进程都是同步机制,协程是异步机制
http协议:每次都需要客户端定时轮询向服务器请求,然后服务器再向客户端发送数据
websocket协议:允许服务端主动向客户端推送数据,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输
保持连接状态:与http不同的是,websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而http请求可能需要每个请求都携带状态信息
1.服务器Linux(包括CPU、Memory、Load、I/O)
2.数据库:1.Mysql 2.Oracle(缓存命中、索引、单条SQL性能、数据库[/url]线程数、数据池连接数)
3.中间件:1.Jboss 2. Apache(包括线程数、连接数、日志)
4.网络: 吞吐量、吞吐率
5.应用: jvm内存、日志、Full GC频率
6.监控工具(LoadRunner[/url]):用户执行情况、场景状态、事务响应时间、TPS等
7.测试机资源:CPU、Memory、网络、磁盘空间
兼容的类型,如果细分的话,有平台的兼容,网络兼容,数据库兼容,以及数据格式的兼容
兼容测试的重点是,对兼容环境的分析。通常,是在运行软件的环境不是很确定的情况下,才需要做兼容。根据软件运行的需要,或者根据需求文档,一般能够得出用户会在什么环境下使用该软件,把这些环境整理成表单,就得出做兼容测试的兼容环境了
孤立的测试策略
孤立的测试策略是最简单、最容易操作的,它属于纯单元测试。这种方法不考虑每个单元与其他单元之间的关系,为每个单元单独设计定点单元和驱动单元来进行单元测试,可以达到较高的结构覆盖率。由于需要开发大量的桩单元和驱动单元,所以测试效率较低
自上而下的测试策略
自上而下的测试策略是先测试最顶层的单元,然后把顶层所调用的单元做成桩单元;其次测试第二层,把上面已经测试的单元作为驱动单元。以此类推,直到所有单元都测试完毕。这种方法节省了驱动单元的开发工作量,测试效率也很高。但是,随着被测试单元的逐一增加,测试过程变得越来越复杂,增加了开发和维护的成本
自下而上的测试策略
自下而上的测试策略是:首先对底层单元进行单元测试,并模拟调用该单元的单元作为驱动单元;然后对顶层进行单元测试,并将下面已经测试过的单元作为存根单元。以此类推,直到所有单元都测试完毕。这种方法节省了桩单元的开发工作量,具有较高的测试效率。由于底层单元的测试质量会对上层功能的测试产生很大的影响,而且随着底层单元的逐一加入,它更像是小粒度的集成测试,所以这种方法不是纯粹的单元测试
loadrunner 分为脚本生成器,场景控制器,结果分析器三个部分。LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题
Alpha测试是指把用户请到开发方的场所来测试,beta测试是指在一个或多个用户的场所进行的测试,Alpha测试的环境是受开发方控制的,用户的数量相对比较少,时间比较集中,而beta测试的环境是不受开发方控制的,谁也不知道用户如何折磨软件,用户数量相对比较多,时间不集中,一般地,alpha测试先于beta测试执行。通用的软件产品需要较大规模的beta测试,测试周期比较长
驱动模块: 驱动模块是用来模拟被测模块的上一级模块,相当于被测模块的主程序。它接收数据并将相关数据传送给被测模块,启用被测模块并打印出相应结果。驱动模块的目的很单纯,就是访问类库的属性和方法来确定类库是否正确
桩模块: 桩模块是模拟被测试模块所调用的模块,而不是软件产品的组成部分。主程序作为驱动模块,与之直接相连的模块是桩模块,也称为“替身模块”。桩模块本身不执行任何功能,只在它作为替身被调用时返回静态值
缺陷的生命周期,指的是缺陷从被发现到被解决验证通过的完整过程
一个缺陷的正常生命周期是 新建(提交)–打开(确认)–修复–测试验证,通过就关闭,没有通过就重新打开,继续修复和验证
缺陷周期:新建–提交–确认–分配–修复–验证–关闭
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。