2023自动化测试岗位面试题分享(不包括答案,持续更新中。。。)

2023自动化测试岗位面试题分享(部分给出答案,持续更新中。。。)

技术类问题-linux

  1. 常用的liunx命令
  2. 查看日志文件的最后100行(tail -n 100)
  3. 查看网卡ip地址(ipconfig)
  4. 查看剩余内存(free)
  5. 查看磁盘剩余容量(df -h)
  6. 查看文件大小(du -sh)
  7. 日志存放的位置(/var/log/)
  8. bin目录和sbin目录的区别
  9. core dump file是什么?(核心转储,当程序运行过程中发生异常退出时,由操作系统把程序当前的内存情况存储在core文件中叫做core dump)
  10. 755的分别是什么权限
  11. vi怎么查找文件内容
    和less&tail一样 用/ ?去加上关键字搜索,N向上搜索,n向下搜索;分页展示log内容用more
  12. find 查找不同类型的文件(find -typef)
  13. 用grep拿取文件中第一行的数据(grep -m1
    tail -n 1
    awk/sed)
  14. liunx如何部署环境
  15. 如何在看日志的时候筛选关键字;筛选文件
  16. 查看主机端口占用情况(netstat)
  17. 查看cpu(top)
  18. 查看进程(ps)
  19. 查看文件第六行(sed -n ‘6p’ filename)

技术类问题-sql

  1. 常见的sql命令
  2. 缓慢查询的问题怎么去定位
    如何进行慢查询
  3. 多表查询用哪些命令
  4. 左连接和右连接的区别
  5. 将表的前十条展示(limit)
  6. union和union all的区别
    UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
    1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。
    2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
  7. 去重有几种方式(group by;distinct;union)
  8. 数据库迁移怎么写
  9. sql查询第八大数据
    select * from table order by sales desc limit 7,1
  10. 怎么把重复的数据筛选出来(having)

技术类问题-python(UI&API)

python常见问题

1、什么是列表什么是元组

2、什么是可变什么是不可变

3、列表和元组的区别

4、before class和before method的区别

5、@的作用

6、/和//的区别(前者是浮点数结果 后者是整数结果)
/就是正常除
//是取整
%是取余数
7、 _和__和__name__的区别
(1)单下划线用于定义私有属性和方法,可以用类名.get_privatemethod()进行调用
(2)双下划线用于定义类的实例,类变量,全局变量等,用来防止父类的方法被子类的方法覆盖;可以使用对象.类名__方法名(),在外部调用它
(3)前后下划线用于python内部定义的方法可以被重写比如__init

8、装饰器的作用
装饰器的解释与使用
(1)增强函数的功能,确切的说,可以装饰函数,也可以装饰类;可以在原有的逻辑上新增功能而不需要修改源代码
(2)使代码更加的简洁 便于维护不冗余
9、init方法和new方法的区别
(1)首先new是创建对象,而init是初始化对象,所以new方法会在init方法之前运行;
(2)其次new创建完对象会return这个对象给init方法,也就是self;而init方法没有返回值
10. 实例方法和静态方法的区别

11、python命名规则
命名规则为:
(1)可以包含字母数字下划线但是不可以以数字开头且不能包含空格;
(2)不可以是python关键字但是可以包含python关键字
12、基本数据类型
基本数据类型分为 数值,字符串,列表, 字典, 集合,元组,
其中只有列表字典集合可以进行修改
13、进程和线程的区别
进程是操作系统进行资源分配和调度的基本单位,多个进程之间相互独立不影响
稳定性好但是进程消耗资源大,开启的进程数量有限
线程是进程的一部分,是由cpu进行资源分配和调度的基本单位,多个线程共享一个进程的所有资源,缺点是如果一个线程崩溃都会造成进程的崩溃
14、对字符串去重并从小到大输出
set去重;sorted排序
15、从D盘下面创建文件并输入内容

16、打印斐波那切数列

17、Flask作用
flask框架是一个后端服务框架,能够部署服务,比如接口测试的时候,第三方接口调不通,我们可以使用它去写mockserver。
一般我们会
第一步:先用pip install安装flask框架。
第二步:模块中导入flask,并且创建服务对象,
第三步,在我们写的接口上指定路由,并且运行该服务。
这样我们的接口就可以通过http请求来调用了。
18、python如何实现拷贝对象
copy模块实现
19、元组可以作为字典的键嘛?
可以
在 Python 中,元组是可以作为字典的键的,前提是元组中的元素必须是不可变的。字典中的键必须是不可变类型,这是因为字典使用哈希表来实现键-值对的存储和查找。
不可变类型包括数字、字符串和元组。其中,元组是一种有序的、不可变的数据类型,可以包含多个元素,可以作为字典的键使用。
20、冒泡排序怎么写

21、用python随机生成身份证怎么做

22、python如何遍历json对象

23、json模块怎么使用
常用的是
使用自带的json官方库的json.dumps()和json.loads()可以把字典数据格式转json,或把json数据格式转字典。使用json.dump()和json.load()可以处理文件流数据的json格式对字典格式正逆向转换。
24、浅拷贝和深拷贝的区别
两者都是用的copy模块
区别是
(1)浅拷贝是对对象的内存地址进行复制只能够复制到对象的第一层;而深拷贝是递归的去对所有子对象进行复制,相当于完全创建一个新的对象不会被原来的对象影响;
(2)除此之外,深拷贝会比浅拷贝占用更多的内存的时间
25、输出奇数的列表利用列表推导式
list(map(lamda x: x if x%2 != 0 , seq))
26、python处理文件文本,该文件大于本机的内存,该如何进行处理

27、类方法和实例方法的区别
(1)类方法用@classmethod修饰且第一个参数是cls类本身;可以直接通过类名或者实例来调用
(2)实例方法的第一个参数是self实例本身;;并且只能通过势力来调用
28、break和conntinue的区别

29、迭代器、可迭代对象、生成器的区别
(1)可迭代对象即 可迭代的对象 例如list tuple dict str等
(2)迭代器是访问集合元素的一种方式;而生成器是用于生成元素的
(3)迭代器的创建需要iter()和next()两个函数,并且在可迭代对象被输出结束后会报一个stopiteration的异常
(4)生成器的创建可以用推导式或者函数加上yeild进行创建,生成器可以在生成器内定义方法;而迭代器不可以;生成器可以理解为是一种特殊的迭代器
附:一般当数据量较大的时候用生成器,数据量较少的时候用迭代器
30、python中的值传递和引用传递怎么实现的
值传递: 传递的是变量的值而非变量本身,变量的值不会被改变
引用传递: 传递的是变量本身,被传递的变量的值会被改变

在python里边
(1)可变类型(list/dict/set为可变类型)用的是 引用传递
(2)不可变类型(number/str/tuple)用的是 值传递
31、python里面的内存管理如何实现,什么样的内存可以释放?什么时候释放?

32、遍历文件夹找某个文件如何实现(os模块)

33、去重但是不改变原有顺序怎么实现(for循环/set+sort(key=))

34、dict中的key或者value怎么排序
(1)直接用sort排序
(2)sort搭配lamda函数进行排序
35、类方法和实例方法的区别

36、a is b和a= =b区别
is是比较两个对象的内存地址是否一致,而a==b是比较对象的值是否一致
37、json和dict的区别
1 首先json是js的一种数据格式;而dict是python的一种数据结构
2 dict里面的key是唯一的且无序的,而json的key是有序排列的而且是可以重复的,但是只能用字符串
3 最后是格式,dict中可以用单引号也可以用双引号,但是json只能用双引号
4 取值的话,json只能用第三方库jsonpath去取值,dict可以用python自带的方法,dict.get/dict.value等
38、对字符串翻转有几种方法
for循环;reverse;sorted
39、mock怎么使用的?
40、*args和kwargs的区别
前者表示不定长参数;后者表示关键字参数;在传入参数的时候,*args会将参数打包成tuple传给函数使用;而
kwargs是打包成字典

自动化

1、CI的流程
2、功能测试&自动化测试的流程
3、自动化的好处
4、一般在项目中什么时候跑自动化
5、实现自动化中最大的挑战是什么,又在这次的事情中提出了什么建议
6、自动化框架是什么
7、用什么工具管理自动化的脚本
8、自动化在工作中的占比是多少
9、自动化实现的场景举例
10、ui和接口框架且常用到的库
11、说明对敏捷思想的了解
12、说明对PO设计模式的理解
13、 python+unittest+selenuim该框架的优势
方便重构代码;方便二次封装维护
会把每个模块,业务逻辑层的code,公共模块会放在另外一层;避免代码的冗余
14、框架中用例设计和数据驱动是怎么做的

15、Jenkins怎么用的

16、多进程,多线程,多协程怎么做
进程:mutipleprocessing
线程:threading
协程:asyncio+threading)
17、死锁怎么处理

18.、pytest和unittest的区别

19、为什么要做自动化

20、自动化实现的效果以及覆盖率

21、会用到unittest里面的哪些组件
testfixture
setupclass/ teardownclass
testcase
是最小的测试单元,具有独立性,主要检测输出结果是否满足期望值
testsuit
放testcase;可以简单理解为testcase的集合,主要用于对于集成管理要在一起执行的测试用例
testrunner
用于输出测试报告
22、公共模块层都放了什么东西

23、用什么方法能够提高自动化脚本的稳定性
保证自动化测试环境的稳定
专门的环境做自动化,不可以让别人破坏这个环境
UI里面元素的定位方法
竟可能保证xpath要短
如果一次定位不到竟可以能不变的元素去定位我们需要的元素
多元素的话多用find elements去返回元素集合用下标去取
加入脚本异常处理
比如如果失败了就重新跑一次;在except里面定义;try用于捕获正常代码,except用于遇到异常的操作+重新触发
sum
避免使用固定数据;降低用例耦合性;提升依赖环境稳定性,可以采用mock的形式屏蔽第三方环境的影响;脚本的异常处理;考虑可能出现的异常情况,尽量对每种可能出现的异常情况都有对应的处理方法,避免失败后程序的退出
note:
什么是BDD
BDD思想详解
BDD(behavior driven development)也叫行为驱动开发,行为驱动说白了就是框架的使用,更多的是为了项目相关的比如说需求提出方服务;目的是为了在业务和开发之间达成共识。
什么是TDD?
TDD也叫测试驱动开发
测试驱动是针对敏捷开发思想,实际实现是像微软那样 测试就坐在开发旁边看 测试和开发同步写代码,开发进代码之前要自动化测试通过
从解决问题分析:TDD是用于解决开发和测试之间脱节问题;BDD是用于解决需求和开发之间脱节问题。 从使用人群分析:TDD是开发人员和测试人员;BDD是客户和开发者。 从侧重点分析:TDD是侧重测试;BDD是侧重引导关注行为和规范。
怎么理解CICD?
CICD是持续集成,平时工作中自动化脚本结合Jenkins去跑 开发去定时的打包

UI自动化

  1. 元素无法定位可能的原因
  2. 如何进行断言?断言什么内容
  3. 动态元素怎么定位
  4. testrunner原理
  5. 怎么写xpath
  6. 某一个节点定位下一节点怎么写
  7. 子节点定位父节点怎么写
  8. 兄弟节点怎么定位(xpath/css/following-sibling&preceding-sibling)
  9. 写UI自动化某个case的步骤
  10. click某个button之前需要做什么步骤
  11. 定位到button但是没有反应,会怎么去分析问题
  12. 如果等待时间给的够还是无法定位到元素(click by js)
  13. alert怎么定位
    首先确认是弹窗,然后利用自带的方法切换到 alert = driver.switch_to.alert
    接下来就可以正常的对该弹窗进行操作:
    #点击弹窗中的确认
    alert.accept()
    #点击弹窗中的取消
    alert.dismiss()
    #获取弹出框的信息内容
    alert.text
  14. APP的自动化如何实现
  15. 手机端自动化测试用例和PC端的难点
  16. 看到手机端的对象无法识别怎么去处理
  17. 不同页面的元素怎么去进行管理的
  18. 如何测试图形验证码
  19. selenuim定位元素的几种方式
  20. app常用的定位方式
  21. app自动化测试要准备哪些数据
  22. APP测试和web测试自动化有哪些区别?
  23. app启动一个应用怎么写
  24. 包名或者activity怎么获取(adb命令获取)
  25. 用哪些方法做的自动化
    元素定位
    元素操作
    click/sendkeys()/弹窗处理/下拉框
    数据驱动(数据被打包到指定的文件里面)
    ddt(python第三方的库)的形式:dataprovider/主要用的是ddt这个库
    页面的验证;
    断言
    比如说assert
  26. selenuim常用的方法
    元素定位&元素操作
  27. 弹窗如何处理
  28. Selenium如何模拟鼠标键盘的操作(利用actionchains进行操作)

接口自动化

  1. http请求有哪些方法

  2. post和get的区别

  3. post和put的区别

  4. 常见的http状态码

  5. cookie和session的区别
    cookie是存储在本地客户端的,而session是存储在服务端,这两者都是用于记录用户的状态,且都是由服务器端生成;
    两者之间存在的联系是session会话保持需要依赖cookie,因为session id是存储在cookie中的

  6. 加密的接口如何测试

  7. response怎么去断言

  8. 文件上传和文件下载用什么类型去判断

  9. 如何做用例设计,会从哪些点进行考虑

  10. request中的json和data的内容区别

  11. request写一个请求需要的参数

  12. 如何保持会话
    构造一个全局的session对象
    S = request.session()#构造一个全局的session对象
    S.get =(url,headers).text #直接用session.method进行接口调用即可

  13. dict如果没有给默认值怎么取值
    dict.setdefault(key,default=None)

技术类问题-git

  1. 常用的git命令
  2. git reset和git hard的区别
  3. git rebase什么情况下会用到
  4. git版本回退怎么操作
  5. git拉取指定分支的命令是什么?(git checkout)
  6. 提交代码怎么做用哪些命令
  7. 遇到冲突怎么解决
  8. 有一个文件,别人修改了,你本地也修改了,你想保留本地版本不让他去更新别的文件怎么做
  9. git共有几个分区
  10. git的子模块常用命令

性能测试

  1. Jemter平时用来做什么
  2. jmeter如何实现参数化
  3. 性能测试的流程
  4. 登陆接口,创建订单的接口,登录接口会返回一个object的数据,里面有一个字段是token,需要放到创建订单的接口中去使用,创建订单的接口还需要有两个字段,一个是订单号,一个是订单时间,订单号需要随机生成一个十位数字,时间需要生成当前时间
  5. jmeter怎么做断言
  6. 怎么做关联接口的处理(jmeter数据如何存储的)
  7. 一般哪些接口会去做性能测试
  8. 压测和负载测试的区别
  9. 稳定性测试的目的
  10. 响应时间过长是什么原因
  11. 数据库性能问题怎么解决
  12. 内存泄露怎么解决
  13. 如何判断是内存泄漏
  14. 性能测试关注指标
  15. 如何生成性能测试报告

其他问题

  1. 在上家公司最自豪的事情是什么,主要职责是什么,遇到的最大挑战是什么
  2. 时间紧张的情况下怎么处理手上的任务
  3. 自己导致项目延期如何处理
  4. 如何完美地完成领导派发的任务
  5. 离职原因
  6. 你觉得是个bug开发不觉得是个bug怎么处理
  7. 个人职业发展规划
  8. 如何进行自我学习
  9. 怎么判断是前段还是后端的bug
  10. 团队合作方面有什么沟通技巧
  11. 个人的优势和劣势

编程题

将一个字符串中重复最多次的字符找出并打印出重复的次数
使用unittest框架验证两个变量之和是否等于2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值