软件测试常见面试题(持续更新)

1.软件测试基础

1.测试流程是什么样的?

1.产品确定需求后,邀请项目经理,开发,测试等人员参加需求评审会;

2.评审结束后开发根据需求文档和接口文档开发,测试制定测试计划和编写手工测试用例,测试脑图;

3.测试召开用例评审,等开发完成后并且进入联调时,可以先介入进行单接口的测试,等开发转测后,进行系统之间的业务测试;

4.执行测试用例,在禅道上提出bug并且跟踪bug,开发解决后回归测试。用例执行完成并且bug全部修改完成后,进行提交上线

2.测试计划包括哪些内容?

测试标题,测试范围,测试计划开始时间和结束时间,测试实际开始时间和结束时间,开发人员,测试人员,测试环境,是否存在风险等

3.测试用例包括哪些内容?

所属模块,前置条件,用例标题,用例等级,测试步骤,预期结果等

4.测试报告包括哪些内容?

测试背景,测试标题,测试实际开始时间和结束时间,开发人员,测试人员,测试环境,测试结论,bug统计,待办事项等

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

以借款申请接口为例:

1.先理解所测接口的业务逻辑,参数和响应的含义。

2.根据接口的业务返回设计测试用例,比如借款成功,失败,处理中等线上常见的场景

3.根据接口请求参数的长度限制设计测试用例(边界值),比如用户的身份证,手机号的长度

4.根据接口请求参数的格式限制设计测试用例(等价类:有效等级类和无效等级类),比如用户手机号以1开头并且都是数字,这是有效等价类。非数字以外的格式为无效等价类

5.根据接口请求参数的是否非必传设计测试用例,逐个去验证必传参数不传的情况

6.若存在请求参数的组合场景,比如证件形式:1身份证2其他证件。接口传1,但是不传身份证号码的场景

7.接口和接口之间的业务关联,比如未调用授信申请,直接调用借款申请等情况

8.对数据库记录和重要字段的校验

6.测试用例的设计方法有哪些?

等价类(有效等价类和无效等价类),边界值,因果图,场景法,错误推断(结合实际情况,有针对的推断问题会发生在哪)

7.如何提高测试覆盖率?

1.首先理解产品需求和接口文档。可以先编写测试脑图帮助理清逻辑

2.召开测试用例评审,和开发产品讨论测试用例是否有遗漏的地方

3.根据测试用例去测试,每测试完一条修改测试用例状态,不要想一点测一点

4.可以多考虑线上出现过的问题,着重去测试该部分模块

8.如何判断bug为前端还是后端的?

前后端分离项目,可以抓包或者f12进行分析接口的请求和响应。

如果接口请求有问题,则为前端的bug;如果请求没有问题,响应有问题,则为后端的bug;如果请求和响应都没有问题,但是页面展示有问题,则为前端的bug

9.http和https有什么区别?

http是超文本传输协议,信息是明文传输的,端口号为80

https是更具安全性的加密传输协议,端口号为443

10.常见的http请求响应码?

1xx(正在请求)

2xx(请求成功):200

3xx(重定向)

4xx(请求出错):401(没有权限),403(服务器拒绝请求),404(请求网址不存在),405(请求方式错误)

5xx(服务器错误):500(服务器内部错误),503(服务不可用)

11.三次握手和四次挥手

三次握手:

1.客户端发生请求到服务端

2.服务端返回已收到响应到服务端

3.客户端再发送请求到服务端,数据开始进行传输

四次挥手:

1.客户端发送关闭数据传输请求到服务端

2.服务端收到请求并且返回客户端,关闭传输等待状态

3.服务端发送关闭数据传输,请求客户端

4.客户端再发送确认关闭请求到服务端

12.token,cookie,session的区别

相同点:都是用于接口鉴权

不同点:token是登录接口返回的,后续接口请求头需要带上token才能请求

cookie是储存在客户端的,请求服务器需要带上session-id,不安全

session是储存在服务端的,相对安全,但是访问量大的时候会占用服务端的内存

13.app测试和web测试的区别?

app测试是基于客户端,如果服务端更新后,客户端不会随着更新。需要用户手动去更新客户端;

web测试是基于浏览器,如果服务端更新,文本页面会随着更新;

兼容性不同:app测试需要测试不同型号,不同操作系统的手机,web需要测试不同的浏览器;

相对于web测试,app多了很多专项测试,比如弱网,来电,来短信,关机等状态下

14.b/s和c/s的区别?

b/s:浏览器和服务器之间的架构,是http协议传输

c/s:客户端和服务器之间的架构,是tcp/ip协议传输

兼容性测试不同,c/s要考虑安装,卸载,更新的测试

15.给你一个网站怎么测试?

通过软件质量模型中8个特性去测试:

1.功能性:测试网站功能是否正常,是否符合产品需求

2.易用性:是否容易被访问,操作错误时是否有相关的提示语,是否有错误防御功能

3.兼容性:在不同的浏览器上运行

4.可靠性:服务器中断后,是否能够保存并且恢复用户数据和重建系统

5 .信息安全性:用户没有权限的情况下,是否获取数据和篡改数据

6.维护性:页面可以根据产品需求,有效率的维护和迭代

7.可移植性:页面是否可以适合不同的环境和硬件

8.性能效率:接口响应的时间,页面反应的速度

16.如何定位bug?

1.可以先确认服务器是否启动成功,各服务的配置是否添加成功

2.可以通过服务器的access和extre,error日志来确定

3.查看数据库的前置数据是否正确

17.测试分为几个阶段?

1.单元测试:开发完成联调阶段,测试可以先进行单接口的测试

2.系统测试:转测后,根据测试用例,测试多接口之间业务系统和产品需求

3.回归测试:开发改完bug后进行回归验证

4.交叉测试:负责的模块测试完成后,可以和其他测试交叉测试对方的模块

5.验收测试:产品或者运营验收产品

18.http协议中有哪几种请求方式?

get,post,put,delete,head等

19.get和post有什么区别?

get是获取数据,请求参数是放在url后面的,不安全

post是提交数据,请求参数是放在body里的,相对安全

20.post常见的数据提交方式?

application/json;application/xml;text/html;from表单等

21.如果项目上线后发现bug怎么办?

首先评估bug的严重性,如果是一般的bug,可以先记录下等下一个版本修改上线;

如果是严重的bug需要紧急修复上线,编写好对应的测试用例,再测试环境复现该bug(如果不能复现可以从线上日志找原因),等开发解决完之后,再回归测试上线。之后总结教训,分析原因

22.接口调不通如何排除?

1.首先检查服务器是否启动,可以ping一下接口地址,还有端口号是否正确

2.检查防火墙是否关闭

3.浏览器是否设置了网络代理

4.检查接口的四要素:请求地址,请求头,请求参数,请求方式

5.接口会返回状态码,可以根据状态码定位

2.Linux:

1.常用的linux命令:

ipconfig(window系统)/ifconfig(linux系统):查看ip地址

ls:查看当前目录下的文件

ls-l(ll):查询当前目录下文件的详细信息

pwd:当前路径

cd 路径:前进到该路径下

find 路径 -name "文件名":查询该路径下文件

grep "查询的内容" 文件名:查询文件里面的内容

grep "查询的内容" 文件名|wc -l:统计查询的内容出现的次数

cat 文件名:查看文件内容

more 文件名:翻页查询文件内容

less 文件名:上下键显示文件内容

head -n 5: 查询文件前5行内容

tail -f :实时查询文件内容

tail -100f:查询文件后100行

mkdir:创建文件夹

mkdir -p:创建多级文件夹

touch:创建文件

top:监测进程(查询cpu使用率,内存使用率)

ps -ef:查询进程

df -h:查询磁盘内存

netstat -an| grep 端口号:查询端口是否被占用

chmod g+r 文件名:给所属组添加读的权限

2.文件的755是什么意思?

u:所属人 g:所属组别 o:其他组别

4:可读  2:可写 1:可执行

3.如何查询端口号被占用?

netstat -an|grep 端口号

4.如何查询指定进程并且杀死?

ps -ef|grep 进程

kill -9 pid

5.linux文件夹的介绍

/bin:系统启动和运行时需要使用的基本二进制文件

/var:系统在运行过程中所产生的数据,日志路径/var/log

/usr:包含了系统中许多用户程序和库文件

/etc:包含了系统配置文件

3.mysql数据库

1.左链接和右链接的区别

左链接:左边表的全部数据加上右边表和左边表相匹配的数据

右链接:右边表的全部数据加上左边表和右边表相匹配的数据

2.delete,drop,turncate的区别

delete是删除数据,不能改变索引和约束,可以回滚

drop是删除表的结构和数据,释放空间,不能回滚

turncate是清空表的数据,执行较快,不删除结构,不能回滚

3.where和having的区别

1.用的地方不同:

where可以跟在select,update,insert,delete后面使用

having只能在select后面使用;

2.执行顺序不同:

where是在分组之前执行的,having是在分组之后执行的;如果一起使用的话,where会先执行,having会后执行

3.筛选条件不同:

where后面不能跟聚合函数,having可以

4.聚合函数有哪些?

min()最小值,max()最大值,count()总数,avg()平均值,sum()总和等

5.索引的作用,怎么添加索引?

索引可以提高查询数据的速度,避免全表扫描,提供查询性能

alter table 表名 add index 索引名称

4.公司项目

1.介绍一下你在上一家公司做的项目

我以我上一家公司项目为例:主要是和移动合作的信用购机的项目,线下用户从移动侧app上办理信用购机的活动,app会将授信和借款等流程通过接口的形式请求到公司的进件系统,系统审核之后返回告知用户审核结果,后续还会配合处理放款,用户的还款等操作。我主要负责的是授信和借款模块的测试。

2.如何测试授信申请接口?

1.线上正常的业务场景:授信成功,授信失败,授信处理中

2.校验接口申请的参数是否必传

3.校验接口申请的参数格式限制和字段长度

4.未上传必须校验的个人信息文件,比如身份证正反面图片

5.和其他接口进行业务关联的测试。比如各种状态下取消订单,未进行授信申请先进行授信查询等

6.调完不同的接口后,还有校验数据库的信息和重要的字段

3.如何测试借款申请接口?

1.线上正常的业务场景:借款成功,借款失败,借款处理中

2.校验接口申请的参数是否必传

3.校验接口申请的参数格式限制和字段长度

4.传数据库里未配置的套餐或者未授信的手机号

5.和其他接口进行业务关联的测试。比如各种状态下取消订单,未进行授信直接借款等

6.调完不同的接口后,还有校验数据库的信息和重要的字段

4.项目中你负责模块写了多少测试用例,提了多少bug?

授信和借款模块大概写了200多条测试用例,提了30多个bug

5.项目中遇到哪些问题,怎么解决的?

问题:项目迭代速度太快,不能保证上线质量;

解决方法:保证一级用例全部通过;引进自动化测试加快测试效率;对修改点重点测试

问题:开发后的效果和产品需求不符合,产品变更需求未通知测试

解决方法:产品变更需求要在群里通知,并且更新文档上传svn

5.接口测试和python接口自动化

1.什么是接口?

两个系统之间是独立的,相互无法访问到对方的信息和数据,需要一种途径去访问对方。接口就是双方共享信息和数据的途径。

2.为什么要做接口测试

1.前端未转测或者在后段联调阶段,测试可以先介入进行单接口的测试,提前进入测试节省时间

2.有些项目没有页面,只能进行接口测试

3.有些测试场景,页面测试无法实现,只能通过接口测试(比如登录输入框不能输入某个格式,但是接口可以)

3.平时用什么测试接口

1.使用postman测试单接口

2.使用jmeter测试多接口,接口和业务的关联

3.搭建python+requests+pytest+allure测试框架进行一级用例测试

4.接口怎么鉴权?

1.基于token,客户端请求服务端返回token,后续的客户端请求服务端,请求头上会带上token

2.session鉴权,通过cookie传递session-id请求服务器,判断是否是一个客户端

3.和其他公司合作项目,服务商会提供密钥(比如:aes对称加密),会将接口请求加密。测试可以模拟对方加密请求。

5.怎么做接口关联?

jmeter:可以使用json提取器或者正则表达式提取器,提取上一个接口返回中的字段值,用于下一个接口的请求参数

python:新建一个yaml文件,执行第一个接口之前清空该文件,将要提取的字段值存入yaml文件中,下一个接口去取

6.pytest怎么进行参数化?

一般是在测试用例函数上添加@pytest.mark.parametrize装饰。

@pytest.mark.parametrize("变量名", [{用例1}, {用例2}, {用例3}]),它会循环用例1,2,3赋值给变量。[]里面的用例可以从yaml文件里获取。

7.fixture中scope不同值的作用范围

从小到大:

@pytest.fixture(scope="function"),方法级别。将被修饰的函数当作形参传递给某个方法,执行该方法之前会执行一个被修饰的函数

@pytest.fixture(scope="class"),类级别。将被修饰的函数当作形参传递给类里的某个方法,执行该类之前会执行一个被修饰的函数(传入类中多个方法,也只会执行一次)

@pytest.fixture(scope="module"),文件级别。执行文件之前,会执行一次该修饰的函数

@pytest.fixture(scope="session"),多个文件级别。

8.requests中post请求里data传参和json传参的区别?

使用json传参,不管请求参数的类型是str还是dict,如果不指定类型,默认的content-type都是application/json;

使用data传参,请求参数的类型是str,如果不指定类型,默认的content-type都是application/json;如果请求参数的类型是dict,如果不指定类型,默认的content-type都是application/x-www-form-urlencoded

9.简单介绍一下你的接口自动化测试框架

接口自动化框架是使用python的requests库+pytest+allure,

common文件夹:封装了一些常用的工具类,比如数据库操作(pymysql),生成随机数据(faker),获取配置文件(configparser),获取yaml文件(yaml)等

config文件夹:config.ini配置文件,里面写入环境地址,数据库链接信息等

test-data文件夹:测试数据yaml文件

test-case文件夹:测试用例

report文件夹:allure生成的测试报告

conftest.py: 存放被fixture修饰的方法,用于前置步骤

run.py:运行文件

6.web自动化测试

1.定位元素的几种方式?

id,name,class_name,tag,css,xpath,link_text

2.xpath元素定位的方法?

/绝对路径

//相对路径

*通配符,匹配所有标签

比如定位一个id=a的元素,使用xpath定位://*[@id="a"]

3.selenium的三种等待

强制等待:time.sleep()

隐式等待:driver.implicitly_wait(2)
设置一个最长等待时间2s,如果该页面都加载完成后,进行下一步,否则将等待到时间结束

显式等待:WebDriverWait(driver, 5, 0.5).until(EC.element_to_be_clickable((By.ID, "su")))

5为最大等待时间,0.5为每隔0.5查询一次

4.元素无法定位的原因和解决方法?

1.元素未加载出来;解决方法:添加等待时间,最好使用显式等待

2.元素在iframe嵌套中;解决方法:需要先切换到iframe中,再进行定位

3.动态元素;解决方法:可以使用xpath从父类向下定位

4.隐藏元素;解决方法:操作js去定位

5.如何判断一个元素是否存在?

第一种方法:try.. except..

try如果定位到该元素,返回true,except报错则返回false

第二种方法:显式等待WebDriverWait配合expected_conditions使用

WebDriverWait(driver,5, 0.5).until(expected_conditions.presence_of_element_located())

6.如何提高web自动化的稳定性?

1.尽量使用相对路径的xpth定位元素

2.使用显式等待

3.测试结束后,要做数据恢复

4.用例之间不要产生依赖,要独立运行

7.如何通过子元素定位到父元素?

可以使用xpath的方法://*[@class=""]/..

/..可以返回上一级

8.如何定位iframe嵌套里的元素,多窗口的元素,下拉框的元素?

定位iframe嵌套里的元素:driver.switch_to.frame(driver.find_element())使用该方法进入嵌套页面后再定位,定位完之后记得退出driver.switch_to.default_content()

定位多窗口元素:先获取具柄driver_main.window_handles,一个窗口对应一个具柄,通过列表下表定位某个窗口的具柄,driver_main.window_handles[-1]最新的具柄。再切换到该窗口driver.switch_to.window(driver.window_handles[-1])

定位下拉框元素:可以使用Select方法。Select(driver.find_element()).select_by_index(1)

7.jmeter

1.如何简单的进行接口测试?

1.在测试计划下新建线程组,在线程组下取样器里新建http请求

2.在测试计划下配置元件新建http请求默认值和http信息头管理

3.在http请求默认值里设置协议,ip地址,端口号;在http信息头管理添加请求头

4.在http请求里添加路径和请求方式。如果是post请求,添加消息体数据

5.添加查看结果树,点击启动

你可能感兴趣的:(面试,python,功能测试)