软件测试面试经验总结

一、软件测试基础理论

1.怎么进行测试需求分析

1)阅读需求文档,对不理解的地方进行标记、提出问题、弄清需求

2)通过XMind功能组织结构图来分析测试点

3)流程图绘制项目的主要业务流程

2.怎么做需求评审(需求评审评审哪些方面)

3.如何制定测试计划

测试计划包括:测试目标、测试范围、测试环境的说明、测试的类型(功能、安全、性能、稳定性)、测试工具、模块的划分、测试的负责人、测试执行伦次的时间安排、测试的风险

4.测试分哪几个阶段

单元测试-集成测试-系统测试-验收测试

单元测试:对软件中的最小可测单元进行测试,一般开发自测

集成测试:单元模块组装成系统或者子系统再进行测试,重点测试不同模块的接口部分。

系统测试:一般先进行功能测试然后再进行性能、兼容性、易用性测试

验收测试:对项目进行验收,确定开发的软件是否符合预期

5.敏捷开发/敏捷测试

敏捷测试,沟通会多、节奏更加紧凑,流程还是规范的流程

6.测试人员在软件开发过程中的任务是什么?

1)在需求评审阶段参与需求评审,提出产品开发可能忽视的点,减少开发测试成本

2)需求评审完成之后,编写测试用例,进行用例评审

3)开发提测后,部署测试环境,进行测试。在测试过程中发现问题后,提交bug验证bug

4)测试完成后提交测试代码到master分支,在master分支回归验证

7.软件的V模型

8.软件的W模型

9.什么是alpha测试,beta测试

都是验收测试

alpha测试:内部人员测试,除了测试部门还有其他部门参与

beta测试:灰度测试,先放量给部分用户,当没有问题后就全面发布

10.你对软件测试这个职位怎么理解的?怎么才能做好测试工作?

1)首先一个好的测试,应该足够了解公司的业务。只有足够了解公司的业务,才能保证测试的全面性。在需求评审过程中才能做到测试左移,减少开发测试的成本

2)技术要扎实且要持续学习。测试作为技术岗位,要深耕代码功底,接口自动化、UI自动化等都是必备的技术,这样可以帮助团队提高测试效率

3)热爱这份工作,只有对工作有热爱有激情,才愿意为此投入心血和经理

4)注重沟通,和开发产品保持良好的沟通能力,这样工作效率才会高

11.在项目中如何保证软件质量

1)测试用例要全面。通过等价类划分法、边界值法、场景法、错误推断法等,用例编写过程中要结合业务场景,提高用例覆盖率。

2)测试用例编写完成后,组织开发和产品进行用例评审,确保用例全面性

3)编写接口自动化脚本,提高测试效率

4)回归测试要全面

5)考虑问题要全面,不仅仅要进行功能测试还有考虑接口问题、性能问题。

二、测试用例

测试用例话术(先考虑功能点再说业务场景最后说非功能性的东西)

1.功能

首先考虑功能这块,功能的话会考虑数据的正确性,独立功能点操作这些

对于数据正确性,我们会考虑数据初始化展示或者数据操作后的展示是否正确。当前我们的项目不直接对接数据库,需要我们根据日志平台,查询底层接口返回的数据与前端接口的数据进行对比来判断数据正确性。

独立功能点的操作。比如手机号输入框这种,写用例的时候我们就要分析数据的长度、类型、是否为空、是否重复,一般考虑使用等价类划分法,边界值法等

2.业务场景

要从用户思路操作场景出发

确定有哪些用户,用户可能会有哪些操作。用户完成一次完整的操作,就可以认为是一个场景,然后一个场景就可以设计成一条测试用例。比如:我们在酒店填写页售卖保险产品,用户进入填写页后,勾选保险产品,点击提交订单按钮就可以设计成一条用例。当然这是正常操作流程,在测试过程中还要考虑各种异常流程,比如用户未勾选保险产品成单,勾选保险产品成单时房量库存不足、或者发生变价等异常场景

3.非功能性东西

针对不同的项目类型,考虑一些非功能性的问题

对于web项目,我们要考虑:页面、页面元素、兼容性、安全性、页面性能等

对于手机端项目,我们要考虑安装卸载,软件更新,UI页面,前后台切换,中断干扰,网络环境等方面的问题

1.一个好的测试用例,有哪些特点

1)用例要规范。要包含具体的信息,比如用例编号、所属模块、标题、前置条件、操作步骤、预期结果、实际结果、备注

2)用例覆盖程度要高,要覆盖所有的测试点;用例要具有代表性,能代表一组操作;用例要具有判定性,不管谁来执行的得到的结果都是一样的。

2.测试用例的方法有哪些

1)等价类划分法——有效等价类和无效等价类

2)边界值法——边界、次边界、有效值

3)因果图法

4)判定表法——因果图的一种简化

5)错误推测法

6)场景法

7)正交表法

3.没时间写测试用例怎么办

4.编写测试用例需要哪些文档

1)prd文档

2)接口文档

5.正交表测试设计方法的特点

6.描述测试用例设计得完整过程

参考话术

7.一天写几个测试用例

8.以前的项目每天执行多少用例

9.用例评审怎么做

10.用例评审哪些内容

1)用例覆盖率

2)用例是否规范,是否具有代表性、可判定性

三、web测试

1.开发环境、测试环境、预发布环境、灰度环境、生产环境分别是什么

开发环境:

测试环境:克隆一份生产环境的配置,一个程序在测试环境工作不正常肯定在生产环境有问题

预发布环境:会连接真实的数据库,要注意脏数据的产生

灰度环境:灰度环境介于预发布环境和生产环境之间,灰度会发布到一部分机器上,验证新功能是否有问题,如果有问题回滚这几台机器即可

线上环境:

2.在项目里如何实现测试环境的切换

web项目:通过switchhosts工具创建各种环境,修改host内容,将域名配置为不同机器的ip

app项目:不同环境有不同的安装包,通过安装“测试环境”、“预生产环境”的安装包,就能实现各个环境的切换

3.验收测试怎么做

我们会列一个比较详细的清单,在清单中规定功能、页面、页面元素、兼容性、安全性的各项要求,也会有一个整体的要求,比如我们的标准是:

1)测试用例全部执行完毕

2)测试用例不通过数比例<3%

3)不存在P0、P1级别的bug

4)所有提交的bug都得到更正

4.小程序测试

1)兼容性:要考虑Android和IOS,以及最新的手机版本

2)考虑系统版本

3)考虑微信sdk库的兼容

5.上线的流程是怎么样的

本迭代需求都合并到迭代分支之后,在灰度环境打包部署迭代分支,然后进行回归测试。回归测试没有问题后,确认上线版本。

后端先上线,后端上线完成后,要检查各项数据是否正确、核心业务是否完整等等。然后测试、开发同学要在项目上线的几个小时内监控线上数据,一旦线上数据有异常,立即采取措施回滚代码或者重新打开开关等,尽量将线上bug引起的损失降到最低。

下午小程序前端发版,发版1小时后开发和产品要填写监控信息,确保线上业务流程正常。

6.项目上线之后怎么测试

上线完成后,需要继续观察监测线上数据,测试人员需要在项目上线的几个小时内重点监控线上有没有bug,如果有异常立即回滚代码或者重新打开开关

7.搭建过什么环境?如何搭建的?
8.bug等级如何确定的

系统崩溃:闪退、崩溃、卡死,其他导致功能无法测试的问题

十分严重:

严重

一般

次要

建议

9.怎么处理无法再现的bug/bug很难复现怎么办

首先对bug进行详细的描述,记录发现bug的步骤。拿到操作步骤后找研发一起对操作步骤中的每一步核对代码进行分析,寻找问题核心

其次,合理安排时间,对难以复现的缺陷暂时搁置,并记录对应的风险,告诉产品保证项目进度

最后如果仍未解决,需要在测试报告中体现,并分析可能造成的影响,大家一起权衡该bug是否可遗留,并且在测试过程中再保持对这个bug的关注。

10.如何提交高质量的bug

提交bug的时候首先要规范,包括bug的优先级、bug严重程度、bug标题、给出bug复现步骤、给给出相关日志和截图。还要关联好迭代和需求

11.跟开发因为bug产生分歧怎么解决

首先分析开发不认可bug的原因

不是bug:如果拒绝原因是提交的不是bug,而且自己分析后的确不是缺陷,则应该注意一会再做测试时要好好复现、认真研读需求,提高自己找缺陷的能力

理解偏差:如果是因为对项目的理解存在偏差导致双方对bug存在分歧的话,我会拉上产品和研发一起召开一个小型会议确认对需求的理解并将结论及时同步到项目群

确认是bug:如果确认是bug,开发不承认或者不修复,那么我会根据产品需求文档检出产品对bug部分的需求说明及bug的实际截图或者日志,得出不修复造成的影响以及业务风险。如果研发还是不修复,那需要拉上产品以及开发测试组长讨论促进问题修复

12.bug在管理工具中的状态流转

新建—待验证——已验证——已关闭

 重新打开、不修复、延期解决

13.测试非常紧急的过程中,遇到阻塞性问题,对应的开发没有时间解决,你如何推动问题解决

1)首先要判断问题的严重程度,向对应的开发了解问题的原因

2)辅助开发提供详细的复现步骤、效果截图及相关日志,让开发评估问题修复的时间

3)若需要的时间很长,影响进度的话可能导致项目延期的话,要在群里及时通报风险。如果项目不允许延期,请求协调开发资源或者申请加班赶进度

14.在测试过程中你测出过哪些bug

代码逻辑错误、

哪些地方容易出bug:参数校验、边界条件、复杂的逻辑以及一些异常场景没考虑

15.有过线上漏测的经历吗?什么情况下容易造成漏测

我的测试过程中没有出现过线上P0或者P1这样的bug

偶尔有些小问题,比如某些操作场景下、或者某些机型的展示有问题

漏测的原因:需求不明确、需求变更,用例没有严格执行,用例设计过程中场景不够充分,测试环境的数据限制

16.印象最深的bug是什么?

这次我们有一个需求是新增了一个促销,当促销只有这个新增促销+满减促销的底层接口返回异常。

17.项目马上要上线,突然发现一个严重的bug怎么办

立即叫停发布流程。

同时联系产品及研发分析问题严重性,分析开发解决问题需要多长时间,如果影响发布则和产品讲清楚,需要延期发布。如果项目不允许延期发布,同时问题解决需要的时间很长则考虑将存在bug的模块延期交付,先保证项目上线

18.测试工作怎么排期

排期的话一般在需求评审之后制定项目的排期

通常包含用例编写时间,开发提测后需要测试的时间,以及验收测试的时间点,上线的时间点

19.页面空白怎么办

页面白屏大多数是由于前端代码报错引起的,可以在vconsole中查找报错原因,方便对错误进行排查

20.上线前突然新增功能怎么办

四、手机端测试

五、Linux常用操作

六、MySQL

1.常用的数据库有哪些

关系型数据库:MySQL、Oracle、SQLServer

缓存级别数据库:Redis

文档类型数据库:MongoDB

2.数据库定义语言(DDL)

2.1.数据库的创建和操作

1)创建库——create database

2)展示库——show database

3)删除库——drop database

4)使用库——use 库名

2.2表的操作

1)创建表——create table 表名(表头1  数据类型  约束,表头2  数据类型  约束....)

2)展示表——show tables

3)查看表结构——desc tables

4)删除表——drop tables

5)添加表头——alter table 表名 add 不存在的表头 数据类型 约束

6)修改——alter table 表名 add 存在的表头 数据类型 约束

2.3 数据类型

(1)整形——int

(2)浮点型——float、double、decimal

(3)字符串——char/varchar(可变类型)/text

(4)日期——data

(5)时间——time

(6)时间戳——timestamp

2.4 单表字段的约束

(1)主键约束——primary

(2)自增约束——auto_increment 

(3)唯一约束——unique

(4)非空约束——not null

3.数据库操纵语言(DML)

3.1.增加(insert into)

insert into 表名 values (列值1,列值2....)

3.2 改(update)

update 表名 set 列名=修改后的值 where 条件

3.3删除(delete、truncate)

1)delete

根据条件删除数据——delete from 表名 where 条件

注:不写条件的时候删除全部数据

2)truncate

删除所有数据——truncate 表名

3)delete和truncate的区别

delete可以根据条件删除数据,truncate不能根据条件删除

delete删除的时候走事务;truncate删除的时候不走事务。delete删除可以混滚,truncate删除不支回滚

delete删除速度慢,truncate删除速度快

4.数据库查询语言(DQL)

4.1简单查询

select * from 表名

4.2去重查询

关键字:distinct

select distinct * from 表名

4.3指定列查询

select 列1,列2 from 表名

4.4列运算

select *,salary+bonus from employee

4.5模糊查询

关键字:like

%:表示多个字符

_:表示单个字符

select * from employee where name like "小_";
select * from employee where name like "小%";
select * from employee where name like "%花%";
4.6关系运算符

<> 不等于

!= 不等于

4.7 逻辑运算符

and、or

select * from employee where job="会计" and salary>3000;
select * from employee where job="会计" && salary>3000;
select * from employee where gender="女" or salary>9000;
select * from employee where gender="女" || salary>9000;
4.8 limit分页运算符

limit 开始索引,长度

select * from employee limit 0,3;   从第一个开始,取三个
select * from employee limit 3,2;   从第4个开始,取两个
4.9 between..and
select * from employee where salary between 6000 and 9000;
4.10 in 在什么范围之中
select * from employee where name in ("小张","小王","小赵");
4.11 排序

关键字:order by

asc:升序

desc:降序

select * from employee order by birthday asc;  按照出生时间排序(数字从小到大)
select * from employee order by birthday desc;按照出生时间倒序(数字从大到小)
select * from employee order by salary desc,birthday desc;(多条件排序)
select * from employee order by salary desc limit 0,3; 查询salary 最大的三名

5. 聚合函数

5.1统计数量:count

select count(*) from 表名 where 条件

5.2求和:sum

select sum(列名) from 表名 where 条件

5.3求平均值:avg

select avg(列名) from 表名 where条件

5.4 最大值/最小值:max/min
5.5分组查询

select 列名 from 表名 where 条件 group by 分组的列 having 分组之后的筛选项

七、性能测试

5.1性能测试的基本概念

5.1.1 系统处理能力——吞吐量

系统处理能力是指系统在利用系统硬件平台和软件平台进行信息处理的能力

有以下指标来度量

HPS:每秒点击次数

TPS:系统每秒处理的事务数

QPS:系统每秒查询次数

一般情况下用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示对服务器点击请求。

5.1.2并发用户数

在同一时刻内,登录系统并进行业务操作的用户数量

5.1.3错误率

指系统在负载的情况下,失败交易的概率,错误率=(失败交易数/交易总数)*100%

参考标准:一般成功率不低于99.4%

5.1.4CPU

cpu的指标主要指的是cpu利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)

cpu利用率要低于业界警戒值范围之内

cpu利用率<75%

cpu sys% <= 30%

cpu wait% <= 5%

5.1.5 Memory
5.1.6磁盘吞吐量
5.1.7网络吞吐量
5.1.8 稳定性指标

5.2 并发计算方式

性能测试理论公式:吞吐量 = 并发用户数/响应时间(RT)

如何确定并发用户数:

1.性能需求文档中指定使用多大的并发

2.根据在线用户的峰值计算并发量

3.根据pv数量,计算并发量

5.3性能测试的基本流程

5.3.1 性能需求分析
5.3.2确定关键业务和关键路径

分析关键业务,确定关键路径接口,对关键路径进行性能测试

5.3.3确定测试参数

并发用户数量、思考时间、加载的循环次数或者持续时间、请求的数据量、用户加载方式

5.3.4准备测试环境,完成脚本录制或者脚本开发

搭建测试环境,一般运维或者开发协助完成

录制脚本,使用工具设计脚本

5.3.5执行测试,观察或者监控输出参数,比如数据吞吐量、响应时间、资源占有率等
5.3.6 对测试结果进行分析,分析性能问题

5.4Jmeter脚本编写

5.4.1创建测试计划
5.4.2添加线程组

设置线程组的名称、线程数、准备时长、循环次数、调度器等参数

线程数:虚拟用户数。一个虚拟用户占用一个进程或者线程。设置多少虚拟用户数=设置多少线程数

准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数是10,准备时长是2,那么需要两秒钟启动10个线程,也就是每秒钟启动5个线程

循环次数:每个线程发送请求的次数。如果线程数是10,循环次数是100,那么每个线程发送100次请求,总共发送10*100=1000次请求。如果勾选永远,那么所有的线程会一直发送请求,直到停止运行脚本

调度器:设置线程组启动的开始时间和结束时间(配置调度器是,需要勾选循环次数为永远)

持续时间(秒):测试持续时间,会覆盖结束时间

启动延迟(秒):测试延迟启动时间,会覆盖启动时间

结束时间:测试结束时间,持续时间会覆盖

5.4.3 添加HTTP请求

右键点击“线程组”->“添加”->“sampler”->“HTTP请求”

HTTP请求主要参数详解

1)web服务器

协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认是HTTP

服务器名称或IP:HTTP请求发送的目标服务器名称或者IP

端口号:目标服务器的端口号,默认值是80

2)HTTP请求

请求方法:GET、POST

请求URL

编码方式

3)请求参数

5.4.3添加结果树

右键点击“线程组”->“添加”->“监听器”->“查看结果树”

5.4.4添加用户自定义变量

我们可以通过添加用户自定义变量用以HTTP请求参数化,右键点击“线程组”->“添加”->“配置元件”->“用户自定义变量”

新增一个参数wd,存放搜索词

并在http请求中引用这个参数,格式为:${wd}

5.4.5 添加断言

右键点击“HTTP”请求->“添加”->“断言”->“响应断言”

5.4.6 添加断言结果

右键点击“HTTP请求”->“添加”->“监听器”->“断言结果”

5.4.7. 添加聚合报告

右键点击“线程组”->“添加”->“监听器”->“聚合报告”,用以存放性能测试报告

5.4.8JMeter参数化

1.使用csv配置元件

2.随机函数助手

5.4.9Jmeter定时器

1.固定定时器

2.

5.5Jmeter执行性能测试

5.1配置线程组

点击线程组,配置本次性能测试相关参数:线程数(并发用户数)、循环次数、持续时间等

5.2执行测试

点击绿色的小箭头可以启动测试,测试之前点击小扫把清除之前的调试结果

5.6分析测试报告

聚合报告参数详解:

Label:

#Samples:请求数——表示这次测试一共发出了多少请求

Average:平均响应时间

Median:50%用户响应时间

90%Line:90%用户响应时间

Min:最小响应时间

Max:最大响应时间

error%:错误率

Throughput:吞吐量

5.7 Jmeter配置元件

5.7.1 HTTP cookie管理器

5.7.2 HTTP信息头管理器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值