当前位置:网站首页>软件测试-面试题分享
软件测试-面试题分享
2022-07-06 09:13:00 【As。】
1.对以下列表数据进行去重
L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3]
L1 = list(set(L))
print(L1) #[1, 2, 3, 5, 11]
2.下列表数据,如何使数据变成123456?
L = [1, 2, 3, 4, 5, 6]
s = ''
for i in L:
s = s + str(i)
print(s) #123456
print(type(s)) #<class 'str'>
3.等长的俩个列表要求合并到一个字典中
keys = ["A", "B", "C"]
values = ["1", "2", "3"]
print(dict(zip(keys, [int(x) for x in values]))) #{'A': 1, 'B': 2, 'C': 3}
4.将俩个列表进行合并,并消除重复值
list_1 = ['a', 'b', 'c', '1', 'A', 'winning']
list_2 = ['a', 'python', 'string']
print(set(list_1 + list_2))
5.小明有一百元,他想买一百本书,英语书5元一本,数学书3元一本,语文书0.5元一本,请问他有多少种买法?
问题分析:
100块钱,单独可以买20本英语书,33本数学书,200本语文书,但是也可以进行组合,可以通过for循环来实现,i=英语书,j=数学书,k=语文书
n = 0
for i in range(21):
for j in range(34):
for k in range(201):
if 5 * i + 3 * j + k * 0.5 <= 100 and i + j + k == 100:
n += 1
print(n) #129
6.九九乘法表,使用for循环和while循环
# for循环
for i in range(1, 10):
for j in range(1, i+1):
print("%d * %d = %d" % (j, i, (j*i)), end=" ")
print()
while循环
n = 1
while n <= 9:
j = 1
while j <= n:
print("%d * %d = %d" % (j, n, (j*n)), end=" ")
j += 1
print()
n += 1
7.冒泡排序
就是重复的比较相邻的俩个元素,如果顺序错误就交换位置(从大到小,或者从小到大),重复的进行,直到没有相邻的元素可交换,则表示完成。
值最大(值最小)的元素会通过交换到达元素列表的最顶端,就像冒泡一样,所以这就是冒泡排序
""" 冒泡排序 i:表示第几轮冒泡 j:表示走访到的元素索引,每一轮冒泡中,j需要从列表开头走访到len-i的位置 """
def bubble_sort(array):
for i in range(1, len(array)):
for j in range(0, len(array) - i):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
return array
if __name__ == '__main__':
array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
print(bubble_sort(array)) #[5, 7, 10, 15, 17, 21, 24, 27, 30, 36, 45, 50]
8.python中自定义的函数如何传递动态参数?
使用args或者*kwargs
9.什么是lambda函数,有什么好处?
lambda函数:匿名函数,没有函数名称;好处就是只做简单运算,接收任何多参数并返回值,没有复杂的函数体,可以作为回调函数,传递给某些应用
10.字典和列表的区别?
数据类型不一样,字典是通过键来获取数据,列表是通过下标索引来获取数据;其次是算法结构不一样,字典搜索速度更快
11.进程和线程的区别?
进程就相当于火车,线程就相当于车厢;一个进程下可以有多个线程,不同的进程之间数据很难共享,一个线程挂掉了,就会导致整个进程都挂掉
12.说出常用的linux命令
ll:查看该路径下的所有目录和文件
pwd:查看当前所在路径
tail -f :查看日志
cat:查看日志
sz xxx:下载文件
cd:切换目录路径
sudo su:切换到root权限
df:查看磁盘使用量
top:CPU查看
iostat:磁盘IO
13.说说接口测试的流程,介绍下request有哪些内容?
首先,要了解这个接口的作用,需要实现的功能;其次,根据接口文档设计用例,执行用例,通过请求方式,请求URL,请求参数,对接口发出请求,检查请求参数和返回参数是否符合预期。
request主要内容:封装了各种请求方法-get,post等,以关键字参数的方式封装了各种请求参数-Params,data,请求头-headers,封装了响应内容status_code,json(),cookie管理
14.如何做接口测试的
根据接口文档,设计有效性和无效性的测试用例,使用jmeter进行测试,通过断言判断用例是否通过;
请求成功后,检查数据库的入库情况;请求失败时,检查报错是否符合预期,如果和预期不一样,则检查自己的请求参数,检查数据在数据库中是否正常,
最后查看操作日志看报什么错,有些报错是其他依赖接口的异常,有些是服务超时导致,有些是因为没有更新数据库字段导致报错,有些删除接口,是因为索引的问题导致
15.怎么设计接口测试用例
请求方式的校验,请求url的校验,请求参数的校验,响应信息的校验
主要是请求参数的合法性校验,以及一些边界值的校验。为空,存在,不存在,参数格式,数据的校验
16.没有接口文档,如何做接口测试
首先,会找开发要文档,实在没有的情况下,会找开发要主要的信息,请求方式,url,请求参数,和响应参数
web端接口通过抓包获取请求参数,然后通过自己对项目的了解,先进行大致分析,将自己分析出来的情况和开发确认,是否是这样设计,如果是,则按这些整理用例,并要求开发尽快按此编写文档
17.在做接口测试或自动化测试过程中,上下游接口有数据依赖如何处理
jmeter,如果是同一个线程中的数据,则使用引用,通过提取器进行数据提取并引用,或者使用全局变量来控制,通过jmeter中一个自带的函数setproxy和proxy进行测试
python,不同的接口封装成不同的函数或者方法,需要的数据return出来,以及使用使用全局变量来管理
18.依赖于第三方数据的接口如何进行测试
通过mock,在日常测试中,这个主要是开发帮忙解决的,有些服务开发在本地mock的,有些涉及到大数据的,目前是写了个mock插件,直接mock数据,其他就不太了解
19.接口测试过程中有哪些bug?
测试原因:请求参数格式不对和请求参数以及环境不对,导致报错,以为是bug,其实是自己不仔细 开发原因:没有对枚举值进行有效性判断
20.如果分析接口异常
首先,请求方法,url,参数错误;参数格式错误,参数枚举值错误,其余项目的依赖接口异常导致;检查自己的请求参数,检查数据在数据库中是否正常,
最后查看操作日志看报什么错,有些报错是其他依赖接口的异常,有些是服务超时导致,有些是因为没有更新数据库字段导致报错,有些删除接口,是因为索引的问题导致
21.性能测试的过程
首先,策划和设计评审,了解需要满足的性能要求;
其次,了解这是什么类型的接口,http还是dubbo,是新接口还是旧接口优化,是浅层数据接口还是深层次长链路接口,该接口是否涉及第三方平台,该接口数据是否需要mock,如果是接口优化,历史的性能是多少
确定整体的计划排期,指定时间计划
其次,测试前准备,主要是环境准备,数据准备,了解线上目前的数据量情况,根据压测环境和线上环境的机器进行数据准备,并设计用例
其次,待该接口功能稳定后,进行压测。时间充分的情况下,先对以往版本进行压测,以便准确的分析数据,再对本版本优化后进行压测,通过对服务以及数据库的监控,对比吞吐量、TPS、响应时间、错误率等指标分析本次性能是否得到优化,通过是否满足本次需求
其次,有问题的情况下,及时和开发进行调试,及时改进并再进行验证 最后,测试完成后,编写性能测试报告
22.介绍一下在这个项目中如何使用jenkins
首先,确保项目代码能在本地运行成功
其次,在jenkins中创建项目,在项目中进行配置,配置项目的访问路径,然后进行构建,主要是在windows下进行,然后配置运行用例的命令;最后对jenkins进行配置,设置全局属性以及定时构建运行的配置后即可使用了
23.bug定位,分析
首先web端;如果是页面UI展示问题,这就是前端bug; 其次,如果是和服务端有交互的,先检查环境,数据是否正确,
如果是报错,看是报错信息是前端抛出还是服务端抛出,如果报错时没有请求接口,那这个报错就是前端,
如果报错时请求了接口,看下是不是response返回的报错信息,如果是,则就是服务端抛出的异常,此时检查数据的正常性
先检查前端的请求接口是否正常,再检查前端提交参数是否正常,如果无误,那此时基本是服务端的问题,如果有误,则就是前端问题
另外还有,数据提交成功,但是入库数据不对,比如某个枚举值前端提交1,但是数据库存的是0,此时就要和前后端进行确认,确认他们是不是各自做了判断等
接口测试,这里都是服务端bug,但是有些情况,我们很容易分析,比如,某个字段的枚举值只支持0,1,但是传入2也能成功且入库,这种情况就是服务端没做有效性的校验,对我们项目没影响,但是对下游就造成了脏数据。
24.测试策略和测试方案,测试计划的区别
测试策略:侧重需要分析,评估风险,定义测试范围,确定测试方法,制定测试启动、停完成标准和条件
测试方案:描述测试的特性、方法、环境的规划,测试工具的设计和选择,以及测试用例的设计方法
测试计划:描述了要进行的测试活动的范围、方法、资源和进度的文档,主要包括测试项,被测特性和各阶段的测试任务和时间进度安排,以及风险控制测试计划:主要是管理文件,强调做什么,主要是明确的测试目标和范围,执行计划的角色和职责,以及任务进度的安排和资源的分配,风险评估
测试方案:主要是技术文件,强调怎么做,主要是测试方法/策略和环境的规格,以及工具的设计和选择
25.http和https的区别
https需要SSL证书,相比更加安全 默认是端口号不一样,http一般默认是80,https一般默认是https
http是超文本传输协议,信息是明文传输;https是具有安全性的ssl加密传输协议
26.get和post的区别
get,大部分请求参数都是暴露在url中,相比post安全性更低,一般查询接口用的比较多 get请求时,没有长度限制,而post有长度限制
get只能进行url编码,post可以进行多种 get请求参数被被完整保留到浏览器历史记录中,post中请求参数不会被保留
27.cookie和session的区别
cookie相当于银行卡,存储在客户端 session相当于银行账号,存储在服务器
cookie数据存在客户端的浏览器上,而session存在服务器中
cookie安全性低于session,因为在客户端上,别人可以分析存放在本地的cookie并进行cookie欺骗
session会在一定时间内保存在服务器上,访问越多,就会导致性能越差
28.自动化使用的测试框架是什么?
python+request+unittest+ddt+openpyxl+pymysql+logging+HTMLTestRunner
python:主要语言 reqeust:接口调用,提供不同的http请求方法,get,post等
unittest:定义一个测试用例类,具体的方法来维护测试用例的生命周期,包含一些测试的场景行为,测试用例,预期结果,期望结果,断言等,fixture方法
ddt:数据驱动,ddt类装饰器,data测试方法装饰器
openpyxl:excel数据管理;使用openpyxl模块来进行excel数据的读写 pymysql:数据库交互,数据的校验
logging:日志处理,统一日志输出格式,便于定位问题 HTMLTestRunner:生成html格式的测试报告
29.UI自动化中,元素定位的类型有哪些?
一共是8种,都是静态方法
By.id;By.name;By.tagName;By.className;By.cssSelector;By.linkText;By.partialLinText;By.xpath
30.登录按钮处了使用click方法进行点击,还能使用什么方式?
还可以使用submit,前提需要input元素类型是submit
31.怎么验证复选按钮是不是被选中?
通过isSelected方法,返回true则是选中,false则是没有
32.如何处理alert弹窗?
先要跳转到alert上,然后点击确定或者取消按钮 Alert
alet=driver.switchTo().alert();//切换到alert alert.accept();//确定
alert.dismiss();//取消
33.测试的数据一般放在哪
具体问题具体分析,针对不同的数据应该放在不同的位置 管理全局的参数:例如账号密码,邮箱配置,可以写在配置文件种,(ini文件)
一次性的数据:例如注册,每次需要不一样的,则使用随机函数 一个接口多组测试数据:可以使用参数化,yaml,json,excel进行管理
反复使用的数:例如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用户再清理 全部独立的接口项目:用数据驱动,excel管理
34.接口产生的垃圾数据如何清理
使用python连接数据库,做增删改查的操作;使用setUp做前置操作,做数据准备;使用tearDown做后置操作,清理数据
35.怎么检查接口返回的数据是否正确
通过断言,判断返回值是否符合预期 对比接口返回的数据以我们从数据库种查询到的数据是否相符
36.python如何连接数据库
通过pymysql包,然后连接数据库,创建数据游标对象,进行sql编写,传输数据,最后释放资源
37.WebDriver的close()和quit()方法的区别?
close():只是关闭当前正在操作的窗口 quit():关闭了所有已经打开的窗口
38.selenium自动化,遇到iframe如何处理?
使用switch_to.frame切换金iframe当中后,再去定位其中的元素并操作
39.selenium自动化种,如果切换句柄?
先获取所有窗口句柄,然后使用switch_to.window()切换到指定窗口
40.什么是PO分层
业务流程与页面元素操作分离的模式;相当于每个页面下面都有一个配置class,用来维护页面元素或操作方法,可以提高用来的维护性和可读取性
基础层(BasePage):封装一些基础的selenium的原生api操作,打开浏览器,封装定位元素方法
PO层:元素定位、获取元素对象、页面操作 测试用例层:业务逻辑,数据驱动 三者关系:PO层集成基础层,测试用例层调用PO层
41.什么是相对并发?什么是绝对并发?
相对并发:是指在一个时间段内发生的事务(举例:jmeter中,设置线程属性,2s之内启动10个线程,相对并发则是5,线程数/启动时间)
绝对并发:是指在同一时刻发生的事情(举例:jmeter中,一般使用同步定时器,Synchronizing
Timer,也就是同一个时刻达到了某一集合点才发出请求)
41.什么是性能测试?
是指被测系统,在一定的负载下运行,监控系统的各项指标是否符合预期
42.负载测试?压力测试?并发测试?稳定性测试?
负载测试:通过在被测系统上不对给施加压力,直到系统的性能指标达到饱和状态
压力测试:在测试系统在一定饱和的状态下,进行施加压力,看是否出现异常以及错误,也就是资源的极限测试
并发测试:多个用户同时访问同一个程序是否存在死锁 基准测试:通过已有的数据进行对比
稳定性测试:通过给被测系统施加压力,让程序持续运行一段时间,关注整体的运行情况
43.性能测试方案包含哪些内容?
1.性能测试的目的
2.被测业务的架构
3.被测业务的调研(数据分析)
4.性能监控指标
5.测试排期和测试人员
44.性能指标有哪些?
吞吐量:在指定时间内处理的数据
响应时间:从发出请求到得到响应的时间
TPS:每秒事务数
QPS:每秒查询率
45.如何定义事务?
要么全做,要么全不做(举个例子,银行卡转账,A账号给B账号转500,要么A-500,B+500,要么都不变)
46.QPS和TPS的区别,哪个更合适?
TPS:每秒事务数,一个事务是指事务内第一个请求发送到接收到最后一个请求响应的过程,以此来计算使用的时间和完成的事务个数
举个例子(单接口):a.向服务器发送请求;b.服务器自己的内部处理;c.服务器返回结果给客户端;如果每秒能够完成N次这三个过程,tps就是N
QPS:每秒查询率,是一台服务器每秒能够响应的查询次数(数据库中的每秒执行查询sql的次数),但是不包括增删改,所以不够全面,不建议用qps描述系统整体的性能
区别:如果是对一个查询接口(单接口)压测,且这个接口不再请求其他接口,那么tps=qps,否则,tps≠qps,否则,tps≠qps
47.负载和cpu使用率的关系是?
CPU利用率:指的是程序在运行期间实时占用的CPU百分比,CPU使用率反映的是当前cpu的繁忙程序,忽高忽低的原因在于占用cpu处理时间的进程可能处理io等待状态但却还未释放进入wait
CPU负载:是指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒的进程,不包括处理wait状态进程
cpu利用率高并不意味着cpu的负载大,俩者之间没有必然的关系,无论cpu的利用率是高是低,跟后面有多少任务在排队没有必然关系
48.如何找到并发数、平均响应时间、tps的最佳平衡点?
1.尽可能多的做不同并发数下的压测,记录响应时间和最大的TPS
2.根据获取到的不同指标的数据,画出性能曲线模型,响应时间、吞吐量、资源利用率,关注他们的交叉点
49.内存泄露和内存溢出的区别?
内存泄露:指程序申请内存后,无法释放已申请的内存空间
内存溢出:指程序申请内存时,没有足够的内存空间供其使用
关系:内存泄露最终会导致内存溢出
边栏推荐
- Database middleware_ MYCAT summary
- Windows cannot start the MySQL service (located on the local computer) error 1067 the process terminated unexpectedly
- February 13, 2022 - Maximum subarray and
- IDEA 导入导出 settings 设置文件
- [BMZCTF-pwn] 12-csaw-ctf-2016-quals hungman
- Mysql24 index data structure
- [Thesis Writing] how to write function description of jsp online examination system
- Armv8-a programming guide MMU (2)
- A brief introduction to the microservice technology stack, the introduction and use of Eureka and ribbon
- CSDN问答标签技能树(一) —— 基本框架的构建
猜你喜欢
Csdn-nlp: difficulty level classification of blog posts based on skill tree and weak supervised learning (I)
CSDN blog summary (I) -- a simple first edition implementation
【博主推荐】C#生成好看的二维码(附源码)
Navicat 導出錶生成PDM文件
Mysql28 database design specification
LeetCode #461 汉明距离
CSDN问答模块标题推荐任务(一) —— 基本框架的搭建
Generate PDM file from Navicat export table
Mysql23 storage engine
[C language foundation] 04 judgment and circulation
随机推荐
February 13, 2022-3-middle order traversal of binary tree
Global and Chinese markets of static transfer switches (STS) 2022-2028: Research Report on technology, participants, trends, market size and share
1. Mx6u learning notes (VII): bare metal development (4) -- master frequency and clock configuration
Postman Interface Association
IDEA 导入导出 settings 设置文件
[recommended by bloggers] background management system of SSM framework (with source code)
Unicode decodeerror: 'UTF-8' codec can't decode byte 0xd0 in position 0 successfully resolved
Installation and use of MySQL under MySQL 19 Linux
MySQL的一些随笔记录
【博主推荐】asp.net WebService 后台数据API JSON(附源码)
Copie maître - esclave MySQL, séparation lecture - écriture
MySQL19-Linux下MySQL的安装与使用
导入 SQL 时出现 Invalid default value for ‘create_time‘ 报错解决方法
连接MySQL数据库出现错误:2059 - authentication plugin ‘caching_sha2_password‘的解决方法
Idea import / export settings file
February 13, 2022-2-climbing stairs
CSDN blog summary (I) -- a simple first edition implementation
Swagger, Yapi interface management service_ SE
CSDN markdown editor
Ansible practical Series III_ Task common commands