UI自动化测试/API自动化测试 面试题汇总

1、自动化测试的流程是什么?

1)首先和主管领导开会讨论有哪些模块可以做自动化测试

2)和主管领导对一下场景是否考虑周全

3)梳理出可做的模块之后开始编写测试计划

4)   编写测试用例,搭建测试环境

5)执行测试用例

6)分析测试结果

2、UI自动化测试与API自动化测试的区别?

UI自动化测试是单元测试,是针对函数最小颗粒度的测试,就是可以看见业务代码,它对应的是白盒测试

UI测试是最接近软件真实用户使用行为的测试类型。通常是模拟真实用户使用软件的行为,即模拟用户在软件界面上的各种操作,并验证这些操作对应的结果是否正确。

API自动化测试是接口测试,它测试的是模块与模块之间的接口,对应的是黑盒和白盒结合的方法,灰盒测试

3、怎么理解数据驱动?

在自动化测试中(工具&代码),把共有的数据分离出来,这个思想就是数据驱动的思想。

postman:通过集合的的edit下的variable(tests)可以把请求地址分离出来,后续使用用{{}}调用即可;

jmeter:通过添加配置元件中的HTTP请求默认值,可以把请求地址分离出来。也可以通过配置元件中用户定义的变量,例如用户名和密码,将共有的参数分离出来,后续通过${}调用。

4、怎么理解参数化,在unittest中是怎么使用的,在JMeter中是怎么使用的?

参数化可以简单的理解为:我们一个测试点,需要多次操作,每次操作的数据不同但测试步骤一致,此时可以用参数化思想来解决。

unittest:首先需要安装一个第三方的库parameterized,测试的思想是针对列表进行循环,对每个元素进行赋值

jmeter:通过添加配置原件中的csv数据文件设置(csv data set cofing)来实现,先创建储存参数的文件,文件格式可以是csv或者txt(XX,XX),然后导入到csv配置元件中,有几个用户线程组的线程数就修改为几。

 

5、常用元素定位有几种,xpath与css的区别?

常用的元素定位有8种:

1.id   2.name   3.class-name   4.tag-name   5.css   6.xpath   7.link-text   8.partial-link-text

xpath与css的区别:

css选择 是依据页面的数据样式定位的, 有标签选择, 类选择, id选择, 或者他们的交并集, 除此之外没有其他的辅助元素了

xpath 是路径表达式,所有元素和内容都可以成为路径的一部分. 两种定位方式功能基本一致, 但是xpath明显更强大, 只是xpath写起来较复杂,css写起来容易些


6、 你是怎么理解单个元素定位与多个元素定位?

单个元素定位和多个元素定位的思想其实都是一样的,都是定位到元素的属性,但是多个元素定位返回的是一个列表

举例说明,我想要用tag_name定位一个标签为input的输入框,如果被定为的框架中input有且仅有一个,那么我们就是使用单个元素定位,如果出现大于一个的input,我们就需要使用多个元素定位了。

7、你是怎么做UI自动化测试的?

所有的自动化测试都是回归测试,自动化测试的流程:

1)梳理出可以做自动化测试的模块;

2)然后找领导对一下考虑的场景是否合理;

3)写自动化测试的case;技术:语言用的是Python语言,设计模式是页面对象设计模式,用到的测试框架是unittest单元测试框架和seleniumWEB测试框架,第三方的库:HTMLtestrunner

4)然后开会评审,看代码写的有没有问题,断言写的对不对;

5)评审后根据其他人的意见修改没问题后,就可以把这个自动化测试的代码整合到jenkins持续集成平台上,等到版本下个迭代就可以直接拿来使用。


8、你是怎么做API自动化测试的?

1)梳理可以做自动化测试的模块;

2)然后找领导看一下考虑的场景是否合理;

(3)引入测试工具,常用的自动化测试工具有postman和jmeter,也可以使用requests接口自动化测试框架

(4)获取到我们所需要的请求地址,请求方法,请求参数,请求头

(5)编写API测试脚本,编写完成和领导核对一下,看代码、断言是否有不合理的

(6)开始执行,然后把这个自动化测试的代码整合到jenkins持续集成平台上,等到版本下个迭代就可以直接拿来使用。

9、怎么理解序列化与反序列化?

字符串的序列化:

1)序列化(dumps):把内存里的数据类型转为字符串的数据类型,使能够存储到硬盘或通过网络传输到远程,因为硬盘或者网络传输时只接受bytes的数据类型。简单的说就是把Python的数据类型(字典,元组,列表)转为字符串的数据类型的过程。

2)反序列化(loads),就是把字符串的数据类型转为Python对象的过程。

文件的序列化:

1)序列化(dump):就是将文件写入的过程。

2)反序列化(load):读取文件内容的过程。

10、字典怎么排序?

使用sorted可以对字典进行排序,首先对字典循环输出,结合lambda自定义函数,索引为0是对key值进行排序,索引为1 就是对value值进行排序。

11、使用那个关键字可以实现字典的有序?

使用的是orderedDict

 

12、Python常用的库有哪些,具体说下?

1.time/date_time针对时间的处理,date_time更加直观

2.json库针对文件的序列化和反序列化

3.OS库针对路径的处理,可以处理路径拼接

4.hashlib:针对字符串的加密

测试相关的库:

1.unittest:unittest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件

2.selunium:是用于WEB应用程序的自动化测试工具,它直接运行在浏览器中,selenium支持IE,Google,Firefox等主流浏览器,它支持python,java,php等语言

3.requests,接口测试框架

4.pyMySQL,操作MySQL的


13、如果让你进来做自动化测试,你怎么开展工作?

(1)进来先熟悉业务,熟悉流程

(2)熟悉业务需求,融入团队

(3)流程部分:

1.梳理出可以做自动化测试的模块;

2.然后找主管领导对一下考虑的场景是否合理;

3.编写测试计划和测试脚本;

4.然后开会评审,看用例设计是否合理,断言写的对不对;

5.评审后根据其他人的意见修改没问题后,就可以把这个自动化测试的代码整合到jenkins持续集成平台上,等到版本下个迭代就可以直接拿来使用。


14、 你是怎么理解测试的?

我个人对测试理解主要有两个方面:

1.是对质量的管理,测试人员要具备需求分析的能力,编写测试计划的能力,编写测试用例的能力,提交bug的能力,汇总测试报告的能力,

在工作过程中要有良好的沟通能力,积极的推动测试工作的进行;

2.是测试效率提升,测试人员应该不断的提高自己的测试技术从而提高工作效率。


15、你的职业规划是怎么思考的?

对于我来讲,我对自动化测试不是特别精通,我想成为测试领域的专业人士,针对测试框架的开发,测试工具的使用,性能测试的学习,服务端的稳定性测试进行加强学习

在未来的五年里,我会分为2个阶段来提升自己的价值

1.学习阶段:
在接下来的3年内完成初级测试到中级测试的转变,需要多学习基本知识,设计用例,测试工具的学习和使用,把基础打牢。

2.升级阶段:
在后续的第4-5年里,向管理层或者技术层做进一步的升级。

16、如果没有接口文档,你怎么做接口测试

1.如果没有接口文档我们可以通过浏览器右键点击检查,点击network获取我们想要的测试地址、请求方法,请求头和请求参数等数据

2.使用charles抓包工具获取我们所需要的数据

17、如果前端已开发好,后端没开发好,此时你会?

现在都是前后端分离的模式,但是我们需要测试,有两种方案:

1.自己造数据

2.使用moke server自己模拟一个后端的服务


18、你们之前接口文档是在哪里写的?

YAPI


19、常用的抓包工具有哪些?

常用的抓包工具有:fiddler抓包工具、Charles抓包工具、Wireshark抓包工具、Firebug抓包工具、httpwatch抓包工具、、SmartSniff 抓包工具。

但我只用过charles

20、编写测试用例需要注意什么?

1.测试用例都应该以test_开头

2.每个测试用例最好有注释,

3.每个测试用例都得有断言

4.设计到业务逻辑的,要把业务逻辑的判断放在断言前面,这样不会因为断言的失败导致业务逻辑判断也失败

5.每个测试用例都是独立的,业务场景之间可以关联,但是每个测试用例之间都是独立分开的

21、你期望薪资是多少?

8000

22、LoadRunner进行测试的流程?

 LoadRunner 惠普公司研发的工具,主要在工业级的性能测试中具备非常大得优势,但它是收费的,我们主要是用Jmeter、locust进行性能测试的,那我就以jmeter为例说一下。

测试流程:

1.首先梳理出测试目标(可以参考之前的目标数据)

2.引入测试工具和包含场景等一系列测试相关需要

3.编写测试脚本,然后和领导对一下,测试用例是否编写正确,场景是否考虑周全

4.执行测试脚本,关注系统各项性能指标

5.获取数据,重点关注系统CPU,内存,并发用户数,响应时间,吞吐量

6.分析数据,编写测试报告

23.Beta测试与Alpha测试的区别?

 

 

24.简述负载测试与压力测试的区别?

负载测试:在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态,负载测试更多地体现了一种方法或一种技术,它的核心是查看系统处理极限。

例如以测试西安一码通为例,在测试过程中模拟逐渐增加用户数向服务端发送请求,以检测系统可能存在的问题。

压力测试:该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut超时,OOM内存泄漏,OverStackExpection(堆栈异常)它一般用于测试系统稳定性。

25.WEB测试与APP测试有什么不同?

1、系统架构方面:

web项目,一般都是b/s架构,基于浏览器的。app项目,则是c/s的,必须要有客户端,用户需要安装客户端。web测试只要更新了服务器端,客户端就会同步会更新。App项目则需要客户端和服务器都更新。

2、性能方面:web页面主要会关注响而app则还需要关心流量、电量、CPU、GPU、Memory这些。它们服务端的性能没区别,都是一台服务器

3、兼容方面:web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容。app测试则要看分辨率,屏幕尺寸,还要看设备系统。web测试是基于浏览器的所以不必考虑安装卸载。

4.app需要测试稳定性,

26.Jmeter如何做接口测试?

1.获取到接口信息,请求地址,请求头,请求方法,请求参数

2.添加测试计划,添加线程组,再线程组下添加一个http请求

3.build.xml整合ant,生成测试报告

4.集成到jenkins持续集成平台,下个版本迭代直接引用

 

27.什么是兼容性测试?

web:页面展示,交互展示,样式展示

 

28.jmeter中常用的组件?

先添加一个测试计划,计划下添加线程组,HTTP请求,

断言:json断言,响应断言

分离公共数据:HTTP请求默认值,用户定义的变量

存放请求头:HTTP请求头默认值

获取动态参数:Json提取器,正则表达式提取器

参数化:csv数据文件设置

查看结果树,响应时间图,聚合报告,汇总报告



API知识:

 

1、HTTP的完整请求流程

1)客户端和服务端建立TCP连接;

2)客户端向服务端发送request请求;

3)服务端response回复响应客户端;

4)客户端和服务端连接断开。

2、怎么理解get和post请求

postpost请求是客户端向服务端请求向服务端添加新的资源。

get:get请求是客户端向服务端请求获取服务端已有的资源。


3、在postman中写断言的地方为?

postman是在tests中书写断言的,一般我们写完一个测试用例之后,发送请求后,

responsebody中查看响应数据,然后就可以根据响应数据在tests中写断言了


4、怎么理解postman里面的collections

postman中的collection是测试用例的集合,主要是用来解决动态参数,当测试用例中有动态参数时,只有在集合中才可以运行。

postman中的集合相当于jmeter中的线程组。

5、动态参数在postman里面的解决思路,请使用步骤的方式描述出来

这里以登录为例:

 

1.登录成功后,在登录接口的tests中定义一个变量来获取响应数据中的动态参数token

 

2.在下个接口(比如首页等等)中,调用定义的变量,调用的方法是{{变量名}}

 

3.那么这个过程,需要把登录接口和引用登录接口的变量的接口都需要添加到collection中,它的顺序是登录接口在前

 

4.然后执行Collection,这样就能够实现动态参数的关联

 

6、在postman中,怎么调用变量

pastman中通过两个{{}}调用,jemter通过${}调用。


7、接口断言需要是那方面

接口测试需要从三个维度做断言,分别是协议状态码、响应数据、业务状态码。


8、怎么理解协议状态码:404

404是指请求的资源不存在,即请求地址错误,所以遇到404的错误我们需要检查我们的请求地址是否填写错误。


9、如果一个接口访问时400,排查思路时什么?

400会报bad request的错误,也就是服务端请求错误,遇到这种错误,就是我们的请求头或者请求参数填写的不对,所以我们首先需要检查的就是我们的请求头和请求参数是不是填写错误了。


10、怎么理解同步通信

同步通信也可以理解为请求——响应的模式,即客户端发送的请求服务端必须响应。同步通信的缺点是容易超时,即服务端迟迟没有响应客户端的请求,而且如果请求存在大量计算和逻辑问题,就会很容易造成堵塞,使得后面的请求都积压。


11、怎么理解异步通信

异步通信也可以理解为生产者——消费者模式,异步通信主要是通过MQ消息中间件来传递消息进行交互的,即客户端和服务端双方都不需要关注对方的存在,只需要关注对应的MQ的消息即可,异步通信遵循队列的先进先出规则,即先进来的先出去。


12、怎么理解cookie,session,token

cookie的数据是储存在客户端的,因此是不安全的,而session的数据是储存在服务端的,相对来说安全一些,token是基于session原理,我们可以把它理解为一个令牌,每次获取到的token令牌都是一个随机的字符串,我们把它定义为一个变量,后面使用的时候直接进行调用即可。


13、请按步骤的方式描述session的请求流程

1)客户端通过用户名和密码登录成功;

2)服务端生成一个session ID/cookie ID通过set cookie将生成session ID/cookie ID返回给客户端,并将session id储存在服务端(cookie ID是储存在本地的);

3)客户端后续访问主页(如个人主页),就会通过请求头的cookiesession ID带上,发送给服务端;

4)服务端把客户端发送的session ID和储存在本地session ID进行对比,一致则继续访问,不一致则回到登录界面。


14、如果发送请求,协议状态码返回500的错误,怎么解决?

500是服务端内部错误,如果遇到这个错误,我们带着错误截图找开发处理即可。


15、怎么理解协议状态码和业务状态码

协议状态码是基于 HTTP 协议的工程实现的,如果服务器端的实现不符合协议的规定,我们可以认为服务器的 HTTP 实现是错误的。业务状态码是开发给出的关于业务描述的码,用于客户端明确得知本次请求的资源的状态情况,有业务状态码输出表明当次 HTTP 请求是通的。


16、按步骤的方式描述token的请求流程

token流程:

1)客户端通过用户名和密码登录成功;

2)会在服务端本地生成一个token通过set-cookie将生成token返回给客户端,并将token储存在服务端;

3)客户端后续访问(如个人主页),就在请求头中把token带上,发送给服务端;

4)服务端把客户端发送的token和储存的token进行对比,一致则继续访问,不一致则回到登录界面。


17、按步骤的方式描述cookie的请求流程

 cookie流程:

1)客户端通过用户名和密码登录成功;

2)服务端生成一个cookie ID通过set cookie将生成cookie ID返回给客户端,客户端将 cookie ID储存在本地;

3)客户端后续访问主页(如个人主页),就会通过请求头的cookiecookie ID带上,发送给服务端;

4)服务端把客户端发送的cookie ID和储存的cookie ID进行对比,一致则继续访问,不一致则回到登录界面。


18、怎么理解Requets里面的post请求方法的data和json

data是表单的数据格式,如果我们想要用data处理json的数据格式,我们就需要先对data数据进行序列化的处理。

json是处理json的数据格式。


19、怎么理解序列化和反序列化

字符串的序列化:

1)序列化(dumps):把内存里的数据类型转为字符串的数据类型,使能够存储到硬盘或通过网络传输到远程,因为硬盘或者网络传输时只接受bytes的数据类型。简单的说就是把Python的数据类型(字典,元组,列表)转为str的数据类型过程。

2)反序列化(loads),就是str的数据类型转为Python对象的过程。

文件的序列化:

1)序列化(dump):就是文件的写,也就是把内容写入文件的过程。

2)反序列化(load):读取文件内容的过程。

20、在Python中,接口测试的库是那个?

python中接口测试的库是requests。


21、在get请求里面,如果有请求参数,使用的参数是那个的?params http://localhost:5000/login?name=wuya&age=18

get中如果有请求参数是在postman中是在query params下的params里填写的。postman中是直接带在路径中的,在自动化接口测试中是在params变量中填写的。params http://localhost:5000/login?name=wuya&age=18中的参数是namewuya,age18。


22、postman里面在哪里填写请求参数

postman中的请求参数是在body里填写的,如果是表单的数据格式就填写在X-www-form中,如果是json/数据格式就填写在raw下的json中。

jemter中,如果是表单的数据格式就填写在参数中,json数据格式就填写在消息体数据中。


23、参数之间的关联在代码里面怎么解决?

通过函数的返回值解决。


24、怎么理解session会话对象

 

session 对象能够帮我们跨请求保持某些参数,让所有的请求之间session/cookie能够共享,这样的话底层TCP就只需要建立一次,帮我们节约了请求的时间。


25、详细描述下API自动化测试的流程

(1)梳理可以做自动化测试的模块;

(2)然后找领导看一下考虑的场景是否合理;

(3)引入测试工具,常用的自动化测试工具有postman和jmeter,也可以使用requests接口自动化测试框架

(4)获取到我们所需要的请求地址,请求方法,请求参数,请求头

(5)编写API测试脚本,编写完成和领导核对一下,看代码、断言是否有不合理的

(6)开始执行,然后把这个自动化测试的代码整合到jenkins持续集成平台上,等到版本下个迭代就可以直接拿来使用。


26、详细描述下你使用ant是怎么做API的测试的

ant结合jmeter,结合build.xml自动发送邮件生成测试报告


27、怎么理解HTTP COOKIE管理器,HTTP信息头管理器

HTTP COOKIE管理器jmeter中用来处理cookie/session请求中获取cookie id/sessionid的配置元件,

HTTP信息头管理器是jmeter中用来写请求头的配置元件。


28、接口测试中有哪些异常信息

400 请求头请求参数错误
401 无权访问
403 有权 禁止访问
404 请求资源不存在
405 请求方法错误
415 请求头不对
500 服务器内部错误

29、给你一个服务你会从哪些方面测试它

服务就是后端的 其实测服务就是测接口
正常逻辑和异常逻辑(参数、类型、长度)

30、如果没有接口文档,你是怎么做接口测试的?

1.点击检查 net work获取我们需要的请求地址,请求方法,请求头,请求参数,

2.使用chales 抓包工具获取数据


31、在接口测试中,需要参考哪些信息和文档作为接口预期结果

响应数据,协议状态码,业务状态码


32、是否使用过JMeter做过接口测试?用到过JMeter哪些组件?

使用过,

1、存放公共数据的组件:配置元件下的HTTP请求默认值、HTTP信息头管理器、用户定义的变量,csv数据文件设置

2、获取动态参数的:后置处理器下的JSON提取器,正则表达式提取器

3、断言下的 json断言,响应断言

4、监听器下的查看结果树

posted @ 2022-05-31 09:48  lm970418  阅读(739)  评论(0编辑  收藏  举报