自动化测试面试题总结

1.json 和字典的区别?

json 本质上还是字符串,只是按 key:value 这种键值对的格式来的字符串,
json和python中的字典的相互转化可参考下边文章
json和字典的相互转化

2.测试的数据你放在哪?

自动化测试中,测试数据如何管理?

3.如何设计自动化框架?

首先要做好充分的调研,明确自动化的测试目标,以及他要解决的问题,在设计框架的时候主要关注以下几个因素,
1.合理模块化(是指我们需要合理的分层封装,常见的是我们的数据和业务的一个分离,提高代码的复用率)
2.低耦合(低耦合各个模块各个类之间的耦合度不要太高,方便后期维护)
3.可维护、可拓展、可移植(可扩展性是指在框架设计的过程当中,咱们要预留入口方便后期进行功能升级)
可移植性(是指我们在自动化设计时使用的语言,应该使用跨平台的语言方便部署)
可维护性是指要有合理的方案设计,完整的日志系统以及清晰的代码注释

4.如何做参数化?

参数化的意义就在于,当我们把用例代码编写完成之后,我们只需要设计用例相关的测试数据以及维护就可以了
我们可以准备非常多组的测试数据,但是我们的用例代码只需要一份,接口自动化测试中,excel管理我们的测试用例相关的数据
比如说用openpyxl来处理excel,那我们在python自动化测试中,如果你是unittest框架的话,可以使用ddt来获取我们的参数化,当然如果你是pytest框架,可以使用pytest本身自带的参数化方式

5.什么是反向代理服务器?

位于用户与目标服务器之间,用户直接访问反向代理服务器就可以获得目标服务器的资源,使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率

6.什么是可变类型和不可变类型?

变量引用的数据类型,如果在更改值的时候没有开辟新的内存,那么说明他是可变类型,反之如果在更改值的时候开辟了新的内存,那么说明他是不可变类型,在python常见数据类型当中比如像数字类型,字符串类型,布尔值类型都是不可变的类型,像列表,字典这种这种是可变类型

7.全局变量和局部变量的区别?

1.作用域不同,全局变量作用域是整个程序,而局部变量的作用域是函数内或者循环内部
2.生命周期的不同,全局变量的生命周期是跟主程序是一起的,主程序销毁呢全局变量也就销毁了,局部变量是函数退出或者循环退出的时候呢就不存在了
3.使用方式不同,全局变量在程序的各个部分都是可以直接使用的,而局部变量只能在函数内部或者说循环内部去使用,
在函数内部我们优先使用局部变量,然后再去使用全局变量

8.测试开发和自动化测试的区别?

自动化测试的目标还是在手工点点点以外去利用代码完成测试工作从而提高测试效率,而测试开发呢就是在自动化测试以外呢我们可能需要开发一些小工具、小平台来辅助功能测试以及自动化团队提升效率,可能还需要针对目前开源的平台做二次开发,测试开发相对于自动化测试而言需要掌握更高的编程能力以及需要掌握开发能力

9.with操作文件不需要手动关闭的原理是什么?

是因为文件对象实现了上下文管理协议,主要实现了两个方法,第一个是进入 _enter_(),第二个就是_exit_()退出_enter_方法主要是将with之后返回的对象绑定到as后的变量,那么_exit_()退出方法在这里主要实现的就是我们资源的关闭

10.Content-Type的编码格式有哪几种?

1.application/x-www-form-urlencoded
2.multipart/form-data
3.application/json
4.text/html
5.text/xml
6.text/plain
7.application/xml

11.说说你的自动化测试框架如何分层的?

框架的分层:

  1. 代码运行层:run_test.py作用:代码的入口,运行代码,收集测试用例,生成测试报告
  2. 测试逻辑层:test_case包,各个模块的测试用例方法,便于管理,便于维护
  3. 数据管理层: data,excel数据,csv数据,数据列表的保存
  4. 业务逻辑层:common
    通用(request_handler,excel_handler,yaml_handler,logger_handler,sql_handler),通用的,*logger日志的操作封装,数据库操作的封装,yaml操作的封装,excel操作的封装
  5. 配置文件:config 和项目相关联的,项目地址,数据库地址,logger级别
  6. 测试报告(输出)report

如下图所示:在这里插入图片描述
自动化测试面试题总结_第1张图片

自动化测试框架怎么去设计?
自动化测试框架比较多,接口、web、app都是,那么一般来讲在工作中都是根据分层设计思想来独立设计几个模块
第一个模块,主要是存放通用的框架代码,比如说excel操作,数据库操作,basepage封装,日志操作的封装等这些
第二个模块,主要是用来存放测试用例,和测试逻辑相关的代码
第三个模块,主要是用来存放测试数据
第四个模块,一般会有一个入口文件用来进行收集测试用例,执行测试用例和生成测试报告

12.Python中的setup,teardown 在自动化测试项目中起什么作用

前置条件, 测试用例执行之前都会执行的代码,主要是进行测试前的初始化工作,比如在接口测试前面做一些前置的参数赋值,数据库操作等等
后置条件,测试用例执行之后会执行的代码,是测试后的清除工作,比如参数还原或销毁,数据库的还原恢复等

13.你是如何用代码实现从excle 表中获取测试数据的

通过第三方库openpyxl来操作excel表,
代码的基本常用操作如下:

  1. 打开表单
  2. 读取标题 头部
  3. 读取所有的数据
  4. 指定单元格写入数据
    对处理excel的功能进行封装成模块,读取或者写入excel时直接调用即可
    excel处理以及封装,操作以及代码如下链接
    python第三方库openpyxl处理excel数据

14.findElement()和findElements的区别?

findElement,查找页面的某个元素,返回的是一个对象,
findElements他主要是在页面当中去查找符合条件的所有元素,他返回的一般是个列表,

15.什么是数据驱动(ddt)?

我们单独会去维护一个数据表,这个数据表的格式可以是excel或者是yaml或者是数据库,
然后我们通过这个数据表里面的数据和我们的测试代码的进行隔离,这样的话,我们可以
同时分开去维护测试数据和测试脚本,然后呢我们通过参数化的手段把这个数据和脚本连接到一块

16.在编写UI自动化测试用例过程中应该遵循的原则?

1.一个用例为一个完整的场景,从用户的登录到最后的退出,
2.就是一个用例呢验证一个功能点,不要试图在登录系统后把所有的功能点都验证完成
3.尽量少的编写逆向逻辑用例,主要是因为1.逆向逻辑用例会比较多,2.复杂的逆向逻辑用例它实现比较麻烦,而且容易出错
4.用例与用例之间尽量避免依赖
5.一条用例完成之后需要对测试场景进行还原以免影响其他用例的运行

17.pytest如何定义前置、后置方法?

是通过装饰器@pytest.fixture方式来实现,一般是定义一个函数,在这个函数内部呢,用过yield关键字来区分前置和后置

18.request有哪些内容?

主要是实现了http请求,在测试领域主要是用来做接口测试,request库首先它封装了各种请求像get、post、delete和put等,
以关键字参数的方式呢,封装了各种请求参数,像params是用来做get请求,那其他的像delete、post的这些呢就是在data字段里面
header字段呢代表的是请求头,response分装了响应内容,比如像status_code,它代表的是响应状态码,那text代表的是响应的响应体
最后request还有一个session对象,如果项目是cookies建成,那么你用session对象就会自动传递

19.元素无法定位会考虑哪些原因?

1.可能是元素还没有出现,页面加载过慢,所以呢需要加等待时间
2.是元素在iframe当中,需要切换到iframe再操作
3.元素是动态元素定位方式呢需要优化
4.识别到了元素但是不能够操作,比如说元素不可点击不可用等需要用js呢把前置的操作完成

20.如何推动自动化测试流程?

1.是要确认哪些业务功能可以拿出来做自动化测试
2.根据项目本身特色去选择对应的测试框架或者测试工具,并搭建对应的自动化测试环境
3.第三步呢就是着手编写自动化测试用例并且调试
4.就是执行测试用例并得到对应的一个结果当然这个时候我们需要确认断言的正确性
5.在编写到一定量的自动化用例之后我们需要考虑优化用例以及优化执行效率,加入持续集成,可以定时执行定时通知,定时生成报告

21.自动化测试方案,我该如何设计?

1.打算做哪些类型的自动化,是接口呢还是UI,为什么要做这个,可以解决什么问题
2.打算做多久分为几个阶段来做
3.几个人一起做,
4.选择什么样的技术来做或者工具,选择他的理由是什么
5.会遇到哪些问题或者风险需要什么样的协助或者资源
6.最终的成果是什么样的,可以达到一个什么样的效果

22.影响UI脚本稳定因素有哪些?

1.界面上无法预测的弹框,比如说版本更新消失这些
2.页面元素的动态变化这个问题可能是由于需求变更引起的,产品会根据当前用户状态去呈现不同的内容
3.随机页面延迟造成控件识别失败,这个可能由于网络环境以及设备状态等其他元素引起的
4.测试数据的变更,UI用例呢步骤差距是比较大的,如果我们的测试数据发生变化,而我们自动化脚本没有同步变更的话也是会造成问题

23.如何提高selenium脚本的执行效率与稳定性?

1.就是优化我们的测试用例,比如在等待方面的话,我们可以多用显性等待,少用sleep和隐性等待
2.减少不必要的操作步骤,比如要经过三四个页面才能到达 我们测试的页面,那我们直接可以通过网站直接访问到
3.中断页面加载,如果加载的内容不影响我们的测试呢,我们可以设置超时时间
在稳定性提升方面呢
1.就是要减少测试用例的复杂度和耦合度
2.就是在编写元素定位的时候呢尽可能用更加灵活的定位方式
3.我们在设计测试用例的时候,如果说是前置和后置,可以通过接口和数据库来处理的那么我们就用这样的方式

24.自动化测试用例如何编写?

自动化的本质还是测试不过是利用自动化的技术手段来代替部分手工的一个测试工作,
首先呢,自动化测试用例本质上是源于我们功能测试的用例,同样的包含了前置、后置 ,步骤以及断言
其次呢自动化测试用例在用例设计原则上与功能测试都是一样的,当然他们也有不一样的地方,自动化测试需要解决以下这些问题,
1.是环境依赖问题,比如手工测试的时候呢,如果我们的前置条件不满足,我们是可以手工去准备的,但是在自动化里面你需要用代码
或者其他手段去提前准备好,而不能等到执行的时候再去手工准备,
2.自动化的用例断言要非常明确,我们要将手工测试看到的期望结果转成代码来实现
3.自动化测试用例执行需要考虑重复执行的时候呢不受到其他环境数据或者用例的影响

25.当web自动化用例数量达到一定量级之后,如何去优化执行效率?

  1. 可以优化定位表达式可以使用css表达式代替xpath,因为css比xpath效率高一些
  2. 使用无头浏览器模式,这样速度也会更快
  3. 可以使用分布式或者多线程,这样可以将任务并发执行大大提高执行时间

26.pytest和unittest有什么区别?

Pytest是第三方库,unittest是内置的标准库,那pytest相对于unittest来讲呢他在使用上更高效更灵活,首先pytest的有丰富的插件其次pytest的夹具在处理前置后置的时候呢更加的灵活,最后呢pytest提供了mark,可以给用例打标记,那么在过滤用例也是很方便的

27.登录接口的token怎么传到查询接口或者接口数据依赖怎么做?

首先是从登录接口的响应结果当中提取token,提取的方式可以是jsonpath或者用正则表达式,其次提取出来之后,可以将token设置为全局变量可以用一个类来承载全局,也可以用一个文件(py文件)来承载全局变量,最后呢要看一下在查询接口当中token是放在请求头当中还是请求体当中,可以从全局变量当中读取进来,然后存放到对应的位置

28.你的接口自动化框架当中数据库校验是怎么做比对的?

在我的框架当中采用的是数据驱动模式,所有与测试用例相关的测试数据全部都是存放在excel当中,在excel当中呢,专门开辟了一系列用来做数据库断言比对,他是一个列表形式,在列表当中呢存储的主要就是字典,每个字典涵盖了3个key,一个是sql语句,第二个是切换结果,第三个是sql查询方式,在框架当中专门封装了一个数据库断言的方法,在这个方法里面呢会去建立一个列表,会将列表当中的每一个sql语句,去执行并且与期望结果相等,这样子的话既能够支持一条sql语句的比对也能支持多条sql语句的比对

29.web自动化前置数据怎么准备?

大体的原则就是减少实现的成本时间和复杂度,

  1. 就是手工提前准备好测试数据,这种比较适合在自动化的过程中不会频繁更改的数据,
  2. 通过调用接口获取,这种方式的优点就是,稳定性高,效率快
  3. 直接通过数据库获取,当接口调用不方便或者你有数据库权限的时候可以利用这种方式,在实际运用过程当中以上方式可以根据实现的难易程度来采取

30.接口测试的流程是怎样的?

  1. 要获取接口设计文档要了解接口本身的业务以及他的实现方式
  2. 就是设计接口测试用例,一般是根据接口文档当中入参的参数以及响应结果的各种类型来设计
  3. 利用工具或者接口自动化测试框架来完成接口测试工作,我们要重点关注一下响应断言以及数据库断言

31.什么项目才适合做自动化测试?

重复的 不变的 规范的

  1. 需求变动不频繁,
  2. 项目周期要足够长
  3. 脚本呢要可以重复使用
  4. 项目的开发要较为规范
  5. 手工测试没有办法完成的测试工作
  6. 自动化成本不高的

32.selenium中如何去滑动窗口页面?

在selenium中直接去调用 js 的scrollto 方法就可以实现窗口滚动了

33.接口自动化怎么做数据校验?

  1. 接口响应报文的校验,通常来说我们可以通过jsonpath或者正则表达式来提取响应报文当中的字段然后呢去校验这些数据是否和预期相符合,这种jsonpath的表达式呢可以直接写到代码里边,也可以通过一个表去维护,像excel表都是可以直接写进去的,
  2. 数据库校验,数据库校验是需要我们去确定你的业务会对数据库的那些表哪一些字段产生影响,然后再有针对性的去写对应的sql语句

34.接口返回多组数据怎么校验?(需要全部校验吗?)

一般不需要进行全部校验,只需要校验关键的参数就可以了

35.接口返回A数组下存在2个相同key怎么取值断言?

第一种方式可以通过json数据的路径一步一步的解析
第二种我们可以通过jsonpath这种表达方式去断言

36.遇到有功能依赖性的用例,中途中断了怎么保证用例成功?

在用例执行之前加前置条件然后呢通过异常捕获这种形式去进行处理

37.selenium中有哪些切换操作?

  1. 窗口切换,执行窗口切换的时候呢,我们首先可以去获取现在所有的窗口句柄,获取的方法可以通过driver.current_window_handle去获取所有的窗口句柄,然后执行switch to window这样一个方法 方法当中需要传的参数呢就是窗口的句柄
  2. iframe切换,iframe切换只需要执行switch_to.frame这个方法就可以了里面传的参数有很多种,你可以传入iframe的name属性也可以传入它的id或者干脆传入这个对象, 当我们进入iframe想退出来的话是要执行switch_to default_content这样的一个方法进入到主页面
  3. alert的切换, 执行switch_to.alter这个方法就可以了

38.error和exception有什么区别呢?

Error通常来说表示的是不期望程序能够处理的异常,像系统级的一些内存溢出这样的情况,程序是无法去处理的,而Exception主要表示的就是以期望或者是程序能够捕获的异常

39.selenium中quit和close的区别?

当我们一个浏览器里面打开了多个标签页的时候close这个方法表示关闭当前标签页,如果在浏览器整个执行过程当中只打开了一个标签页,那么close会把整个浏览器的窗口都关掉, 而quit方法是直接把这个浏览器都关掉,不管是存不存在多个标签

40.自动化测试什么阶段会带来效益?

前后端联调完成以后我们可以进行接口的手工测试,当进入了集成测试以后,我们可以进行接口自动化测试,当功能测试完成以后,产品结余稳定呢,我们就可以渐渐引入UI自动化测试,自动化测试主要是提升回归测试效率

38.接口自动化如何实现用例逻辑代码数据分离?

对于那些用例逻辑只有测试数据不一样的这些用例呢我们可以把所有的测试用例单独提取出来,存放到excel或者是yaml这样的文件中,然后通过参数化的方式去实现或者生成对应的测试用例,在python当中的unittest框架当中,我们可以使用DDT这个模块去实现数据驱动或者是参数化,在pytest的这个框架当中,它自带了一个实现参数化的装饰器,也可以用来实现数据驱动

39.requests模块发送请求的时候怎么传递参数?

首先你需要去确定在这个接口里面传递参数使用的是什么样的类型,如果参数传递是使用的查询字符串的方式的,那么我么可以通过params参数传递,如果在接口当中我们使用的是json格式传递数据,我们可以使用json关键字去传递参数,如果还有其他的方式,你需要上传文件,我们可以指定在files这样一个关键字里面去传递你的文件,另外我们可以去使用data 这个关键字传递,另外请求格式的数据比如说form表单当你使用form表单去传递数据的时候,我们默认是使用data参数,当然我们可以通过去指定contentype这样的类型,通过data参数也是可以传递json数据的

40. 要做自动化测试你要知道那些?

  1. 你需要完成你的功能测试,对应的这些业务呢你需要先去熟悉
  2. 可以针对性的去选择自己的自动化测试工具,搭建好自动化测试的环境
  3. 提取手工的测试用例,把他转换成自动化测试用例,
  4. 可以通过一些工具或者代码生成输入和输出去形成这一些断言的条件
  5. 输出自动化测试的报告,加入持续集成
  6. 持续的去优化你的自动化测试的脚本

你可能感兴趣的:(软件测试面试,软件测试,接口自动化测试)