python 接口自动化面试宝典
python 基础语法掌握
好东西都整理在网.盘了喜欢看韩国差边剧情
迅.雷搜索 【小秦宝库】口令
就会自动弹出了
记得保存后完整查看
1、 python 中的tuple list set dict 在测试中的应用
1. Tuple(元组):元组是不可变的序列,这使得它非常适合在测试中表示固定的、不会改变的数据集
2. List(列表):列表是可以修改的序列,因此它是进行各种算法和数据操作的好工具
3. Set(集合):集合是无序且不重复元素的集合。在测试中,集合常常用于检查数据的不重复性或验证集合操作
4. Dict(字典):字典可以用来存储键值对,这在处理具有键值对的测试数据(如配置或输入/输出对)时非常有用
2、 Python进阶语法
(一) python 函数参数使用(位置参数、关键字参数、默认参数、不定长参数)
1. 形参、实参、传参
一、 形参(形式参数):定义函数的时候,写在括号里面的参数
二、 实参(实际参数):调用函数的时候,写在括号里面的参数
三、 传参:调用函数的时候,将实际参数值传递给形参的过程
2. 不定长参数
一、 *args:可以接收0个或者N个值,这些值会存在一个元祖中,在调用函数的时候只能用位置方式传值
二、 **kwargs:可以接收0个或者N个值,这些值会存在一个字典中,在调用函数的时候只能用位置方式传值
(二) python 的返回值 return的作用和注意事项
1. return 语句用于从一个函数中返回值。它是函数的输出方式。调用一个具有返回值的函数将执行函数体中的代码,直到遇到 return 语句。当 return 语句被执行时,函数将停止执行,并将控制权返回给调用方,同时返回指定的值
(三) python 在测试中常见的内置函数
1. isinstance:这个内置函数可以用来检查一个对象是否是一个已知的类型。这在测试中很有用,可以用来验证函数的输入是否符合预期的类型。
2. range:这个内置函数可以用来创建一个数字序列,通常用于测试循环或其他需要序列化输入的函数。
3. len:这个内置函数可以返回一个对象的长度(或包含的元素数量)。这在测试序列(如列表、元组、字符串等)的长度时很有用。
4. min 和 max:这两个内置函数可以返回一个可迭代对象中的最小值或最大值,也可以用来测试集合中的最大或最小元素。
(四) python 函数作用域
1. 函数的作用域指的是函数内部变量和外部变量之间的关系。根据作用域的不同,可以将变量分为全局变量和局部变量。
2. 全局变量是在函数之外定义的变量,可以在整个程序中访问。
3. 局部变量是在函数内部定义的变量,只能在函数内部访问。
3、 python 高阶语法
(一) python 面向对象编程 init 和self的使用
1. __init__ 是用于初始化新创建的对象的方法,而 self 是一个指向实例本身的引用,用于访问实例的属性和方法。
(二) 面向对象编程(类属性、实例属性)
(三) 面向对象编程(类方法、实例方法、静态方法)
(四) 面向对象编程(反射、属性动态获取、属性动态设置)
(五) 面向对象编程(继承、多重继承、封装)
4、pytest的数据驱动【 data deriven test,是- -种设计思想】
@pytest.mark.parametrize 是个装饰器,里面两个数据: data 和data_ all意思就是:将data_all里每个成员传递给data这个变量接收;
data注意要加引号,虽然是个变量但是要加引号
后面的用例里的参数data都是必须要要跟这个装饰器里的data保持一致。

数据驱动作用:
1、简化代码: - 一个方法执行多条测试的用例
2、测试数据集中管理
3、注意:并不是所有都适合数据驱动,只有方法固定数据不同结果不同的用例方法才适合[接口适合],但是UI适合么?
-UI自动化因为每个用例的页面和操作步骤都不一样的所以不太适合数据驱动。
-接口非常适合,接口基本都会使用数据驱动。
5、test的前置后置-夹具fixture
- 有些内容是在每个用例我执行之前都要运行操作: .
- 接口:购物车模块先登录--登录结果
- UI: 每次用例打开浏览器--driver有些内容再每个用例之后都要运行操作:
- 接口:数据清除
- UI:关闭浏览器
叫做用例的前置和后置。pytest测试框架 统- -叫做夹具。fixture。
6、夹具的conftest共享
如果要直接实现多个模块共享夹具,可以用conftest。
1、创建一个conftest.py文件, 把夹具代码复制进去
注意文件名不能改,只能是这个名字conftest
2、调用conftest里的夹具,不需要导入conftest.py模块, 可以自动查找fixture。
另外一个Python文件的测试用例直接调用这个夹具,不需要导入,直接调用可以运行
3、conftest.py的作用范围: conftest.py所在 文件夹下面的所有用例。
一般放在根目录下或者testcases目录下都可以。
也有可能在同-一个项目中不同的目录下创建conftest.py文件这也是可以的;那么也是在它目录下生效
超出了范围就会报错: E fixture 'class_ setup_ teardown' not found
注意:当用例的模块也有夹具和conftest优先会用哪个夹具? -就近原则
1、名字不一样,按照名字区分
2、名字一样,就近原则,优先用自己的夹具。
1)如果用例所在的测试文件中找fixture, 找到了就用
2)如果1)中没有找到,就去当前文件所在目录下contest.py找, 找到了就用
3)如果2)中没有找到,就去[当前文件所在目录的上一级目录]下contest.py找, 找到了就用
python 接口测试基础
1、你理解的接口是什么? /接口测试的原理/接口测试的关注点?
接口概念:传输数据的通道,每个功能都是接口
原理:工具或代码直接调用接口,发送请求,得到响应消息,验证功能的是否正常
关注点:参数(请求头和请求体) +响应消息+数据库数据
2、为什么要做接口测试? /说说接口测试的理解?
1、一般后端先于前端开发出来,测试尽早接入项目,就能越早发现bug,可以降低bug的修复成本, 缩短项目周期
2、防止有人绕过前端限制,直接发送数据传到后端,接口需要有处理异常的能力,保证接口的健壮性,安全性
[比如我们之前的公司的项目有一个接口. 比如注册接口手机号码注册的;接口发送格式异常的数据, 接口能检测并提示友好]
3、说一下你们的接口测试流程? /说说你们是怎么做接口测试?
1、分析接口需求,会依据开发的接口文档或者自己抓包获取接口信息
2、分析需求编写接口测试用例并完成用例评审
3、选择工具执行接口测试(Postman或者Jmeter或者Python代码)
4、发现bug记录跟踪bug
4、接口测试用的什么工具? jmeter怎 么做的接口测试?
1、Jmeter添加线程组
2、添加http请求取样器
3、配置IP端口接口地址,以及请求参数
4、添加http请求管理器配置请求头信息
5、添加查看结果树,用来确认响应消息结果
6、也会同步检查数据数据确认接口测试结果。
5、你们主要做的单接口测试还是多接口串联也会做?怎么【结合项目讲故事】处理接口关联的?
Jmeter工具:
1)我们肯定是多接口关联也会做的。
2)怎么处理接口关联:结合项目举例子比如:登录+添加购物车接口,购物车接口需要用登录后的token做鉴权:
1、先登录得到登录接口的返回结果
2、Jmeter添加后置处理器,我们用的json提取器提取的数据(也可以用正则提取器),赋值给变量
再后面购物车接口 添加购物车的接口去调用这个变量${token}
http协议相关的面试题
1、get、post请求方式区别
http的请求方法有get post put delete patch等,用的最多是get和post吗,他们区别:
Get
a.一般对于从服务器取数据的请求可以设置为get方式
b.Get方式在传递参数的时候,一般都会把参数直接拼接在url上(例如:http://xxx?id=1&type=2)
c.Get请求方法可以传递的参数数据量是有限的(因为一般参数是拼接在url上,而浏览器对于url的长度是有限制的)--是浏览器本身的限制
d.Get请求因为是直接将数据拼接在ur上,所以安全性不如post强(相对),但是get的执行效率要快于post
Post:
a.一般往服务器提交数据的请求会设置为post方式
b.Post方式传递参数一般都会把参数放在请求体,而不会拼接在url
c.Post请求方法可以提交的数据量不受限制
d.Post请求传参相对于get要安全(相对不是绝对),但是post的执行效率不如get!
2、session,cookies,token的概念和区别
它们都是常用于身份验证和状态管理的机制。
1、Session(会话):Session是服务器端保存用户状态的一种机制。当用户第一次访问服务器时,服务器会为该用户创建一个唯-的SessionID,并将该ID存储在服务器上。同时,将SessionID通过Cookie或URL参数的方式发送给客户端,以便在后续的请求中进行识别和验证。服务器根据SessionID来查找对应的Session数据,从而获取用户的状态信息。Session数据通常存储在服务器的内存或数据库中,可以保存用户的登录状态、权限信息等。Session机制相对安全,但会占用服务器资源。
2、Cookies(cookie):cookie是存储在客户端浏览器中的一小段文本信息。服务器在响应客户端请求时,通过Set-Cookie头部将Cookie信息发送给客户端,客户端浏览器会将Cookie保存起来。当客户端再次请求同一服务器时,会自动将Cookie信息附加在请求头中发送给服务器。Cookie通常用于记录用户的身份认证、会话跟踪等信息。Cookie机制相对简单,但安全性较差,因为Cookie信息可以被篡改或盗取。
3、Token(令牌):Token是一种无状态的身份验证机制。在用户登录成功后,服务器会生成一个Token并返回给客户端。客户端将Token保存在本地,每次向服务器发送请求时,都需要在请求头/请求体中携带Token进行身份验证。服务器通过验证Token的合法性来判断用户的身份和权限。Token通常使用加密算法进行签名,以保证安全性。相比于Session和Cookies,Token机制更加灵活,适用于分布式系统和跨域请求。
它们的区别:
-存储位置:Session数据存储在服务器端,Cookies存储在客户端浏览器Token也存储在客户端。
-安全性:Session相对较安全,Cookies安全性较差,Token通过加密算法保证安全性。
-机制特点:Session需要在服务器端存储和管理Session数据,Cookies需要在客户端浏览器保存和发送Cookie信息,Token通过签名验证实现无状态身份验公
3、tcp协议和udp协议的区别?--四层协议,底层协议
1、tcp是可靠的传输协议,需要建立连接了才能传输数据,不丢包,按顺序传输(如http,FTP),但是速度会慢些,是一个可靠的面向连接协议【建立链接-三次握手 断开链接-四次挥手】
对信息可靠性 完整性要求很高 用TCP协议,比如http协议、ftp协议等
2、UDP协议不可靠,不面向连接,但是速度更快(代表:IP电话,流媒体);存在丢包的 也不会确认消息,是一种不可靠协议,但是速度很快
4、你能描述一下TCP三次握手 四次挥手过程?
三次握手:TCP协议要建立连接的时候,需要经历三次握手的过程:
第一次握手: 是客户端向服务器发起的,用来申请建立连接的,这个报文中的SYN标志位标记为1,所以我们也叫作SYN包;
第二次握手:是服务器回复客户端的,用来确认并接受连接请求的,这个报文中的SYN位和ACK位都标记为1,所以叫做SYN-ACK报文;
第三次握手:仍然是客户端发给服务器的,用来确认服务器的回复消息,这个报文中的ACK标志位标记为1,所以我们也叫作ACK包。这就是TCP协议的三次握手过程
四次挥手:TCP协议完成了数据建发送之后,就会断开连接,此时就需要经历四次挥手的过程:【发送 接受义务】
第一次挥手:是客户端向服务器发起的,用来申请断开连接的,这个报文中的FIN标志位标记为1,所以我们也叫作FIN包;【停止发送状态 但是可以接收】
第二次挥手:是服务器回复客户端的,用来确认客户端的上一个断开连接请求的,所以是一个ACK报文;【服务器停止接收 但是可以发送】
第三次挥手:仍然是服务器发给客户端的,用来告知客户端服务器的数据发送也完毕了,也需要断开连接;这个报文中的FIN标志位标记为1,所以也是一个FIN包。【服务器停止发送+停止接收】第四次挥手:是客户端回复服务器的,确认服务器的上一个断开连接请求的所以也是一个ACK报文;【停止发送+停止接收】
这就是TCP协议的四次挥手过程。
5、http协议组成部分?
包括请求消息和响应消息两个部分。
请求消息:请求行,请求头和请求体三个部分。
响应消息: 响应行,响应头和响应体三个部分。
6、HTTP协议的常见状态码有哪些?
1xx:比较少见,继续发送后续:
2xx:最常见,200 ==表示服务器收到并处理回复了你的请求(不意味着请求2xx:处理结果是通过)
3xx:重定向,返回新的资料
4xx: 客户端问题,地址错了 路径错了 等
5xx:服务器错误(服务器异常+服务器开小差+内部错误)
200(正常):表示一切正常,到了服务器,并且服务器响应了你的请求
302(临时重定向):指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。
304(未修改):表示客户机缓存的版本是最新的,客户机应该继续使用它,比如说前端js --缓存 节省资源
客户端的问题:
403(禁止):服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致。
404(找不到)服务器上不存在客户机所请求的资源。--客户端地址给错了服务器的问题:
500(内部服务器错误):服务器端的CGI、ASP、JSP等程序发生错误。
504: 超时
7、你是怎么设计接口测试用例的?
1)接口测试用例设计和系统测试用例设计思路和方法是一样的,测试思维样的;
2)熟悉业务,梳理项目业务逻辑 和流程 == 场景法 每个接口之间的业务关联
3)针对具体接口细化分析和梳理测试点,针对参数使用等价类边界值的方法设计,正常用例和异常用例;也要关注业务的异常流程。
测试思维:输入项(参数)+业务
4)举例子(项目某个接口讲故事)描述接口有哪些参数+针对这些参数等价类边界值设计+业务异常【购物车】
8、接口文档不详细的 怎么做接口测试?
考察点:抓包,fiddler F12
抓包获取接口测试需要的信息: 地址 方法 参数 头部 端口 响应消息。以及不确认的跟开发沟通一下,还有参考数据库的表字段的设计一起综合考虑编写测试用例。
然后选择工具执行接口测试即可。
9、怎么分析接口测试结果?如果跟接口文档不一致怎么定位问题?--定位问题能力
1)响应消息vs 接口文档 或者抓包结果 对比 【响应结果断言】
2)检查数据库 确认结果 【数据库断言】
。如果有前端,结合前端抓包分析
3)有问题的时候,后端分析日志 查看根本原因- Linux命令获取日志【实时日志 tail -f,; 看日志文件-- cat more less】
4)开发沟通 确认
10、怎么定位前端和后端bug?结合项目bug系例讲定位过程 【定位问题能力】
1)页面显示,js问题--前端的bug;
2)抓包前后端交互的报文进行分析【物业项目:添加一个条目 但是页面不显
示
- 1、前端没有发出请求,就是前端的问题。【对比页面输入信息 跟请求一致
- 的】
- 2、前端发出了请求,但是请求的参数有错误,就是前端的问题
- 3、前端发出了请求,参数没有问题,后端返回数据有问题,就是后端的问题。
- 4、前端发出了请求,参数没有问题,后端没有响应,就是后端的问题
- 5、后端返回了 也是正确的;前端没有正确显示的 就是前端问题
3)数据库检查,确认测试结果【看是否存入数据到表里: 入库 和没有入库 -数据库问题】
4)linux日志查看,定位根本原因,因为日志会有具体代码错误信息。【Linux服务器 - tail -f查看实时日志】
11、Llnux项自里什么时候会用Llnux?【使用场景】
搭建维护过测试环境
定位项目问题
12、linux 常用命令你用过哪些?举例说明?
常用命令结合 项目 讲出来【不要讲太简单】
ps -ef kill -9
top
netstat -apn
tail -f
vim vi chmod 等也会经常用
Python的接口框架面试题
1、自动化用的是什么语言,什么框架?
我们用的是Python语言
框架:Python+requests+Pytest+allure+loguru 搭建接口自动化测试框架【主要的技术栈要讲出来】
2、你的接口自动化测试框架怎么搭建的?用例是怎么写的?--100%
前期准备工作-- 中间搭建的过程--最后框架效果-- 问题分析根据--框架扩展维护。
1)首先拿到API接口说明文档。结合需求分析接口自动化的可行性分析(是否前后端分离,是否迭代频繁 是否稳定接口)用jmeter或者postman先跑一遍接口冒烟,看能否通过
2)然后先设计接口用例,考虑参数的正常,异常:边界值,参数个数不对应参数交叉,参数互斥,数据类型,是否必填等设计好用例,准备测试数据
3)写代码实现自动化: Python+requests+Pytest+logurutallure+pymysql我们用的Python语言实现的自动化框架的搭建,使用requests库发送接口测试,用pytest测试框架编写测试用例和执行测试用例,然后实现参数化和数据驱动
涉及到数据库的数据构造和提取以及断言都会使用pymysql处理数据库相关操作,接口关联用isonpath实现关联数据提取等,再做接口的断言,有响应断言和数据库断言等
框架过程中loguru记录项目的日志,发现问题定位分析;并用alure生成可视化的html的测试报告。
4)所以最终的测试框架基本上就包括如下部分:基础方法封装【tools】、测试用例【testcases】,测试数据,日志、报告,入口文件(run.py)
5)自动化执行过程中发现问题,会记录日志,确认BUG是脚本问题还是真的是BUG,如果是BUG,就提BUG。
6)当有新接口迭代出来后,首选在data下准备好新接口的测试数据,然后在testcases下去创建新的python文件来进行接口用例的实现,维护和扩展测试用例0本印可
3、你的项目结构是什么样子的?哪些文件夹?分别用来存档那些东西?
我写的接口自动化框架的目录结构是这样的:
1、tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言 数据库断言 前置sql等方法;
2、data目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据 图片数据等;
3、testcases目录用来存放测试用例,一个python文件对应一个接口块的测试用例,不同接口分别别多个不同的python文件:
4、outputs里有reports和logs,report目录用来存放测试报告,报告是HTML格式的;logs是存放框架日志的;
5、run.py是用来执行所有接口用例的入口文件;
4、你们的自动化测试如何执行的?自动化测试执行的策略有哪些【构建触发器】?你能解释一下什么是持续集成测试?
我们是通过Jenkins平台定时构建执行
执行的策略:
1、开发和测试任务依赖执行:如果是需要回归测试的用例,有在回归的时候必须要执行,在Jenkins平台接入开发的构建任务,自动化任务也会同步触发执行;比如冒烟测试用例,在开发构建打包部署的任务完成之后,可以通过关联任务触发我们的自动化测试任务构建
2、定时构建执行,边缘化的用例或者特殊情况也会采用手动的形式构建执行;比如每天固定设置一个时间,定时执行我们的自动化测试任务;
3、如果是日常监控接口是否可用:会定期构建执行,比如每间隔一小时来检测我们的接口是不是可用;Jenkins定时器轮询。
持续集成是一种开发实践,它倡导团队成员频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、打包、部署、自动化测试)来验证,从而尽快地发现集成中的错误。让产品可以快速迭代,同时还能保持高质量。实现无人值守的测试和开发和部署任务。【频繁自动构建 无人值守】
5、你们在搭建这个框架过程中有没有遇到过什么问题?你是怎么解决的?【问题+解决方案】
体现出来我们解决问题能力 技术性问题--具体问题
我们搭建框架过程中肯定是遇到过跟很多得到问题,一步一步的解决和推进的 比如我印象深刻的一个问题是xxx/比如最近的遇到的一个问题是xxx
举例1: 最开始搭建这个框架的时候 我们用的一条一条用例用不同的方法执行的,也可以帮助实现自动化脚本的执行,但是费时间效率很低;所以想要去优化一下;我就自己去查咨询 ddt来数据驱动测试;学习pytest的ddt用于项目里,一个方法实现了多个测试数据的执行,大大提高了用例自动化的效率。
举例2:我们在封装接口自动化框架的时候,开始就是使用pytest一个个模块写用例,然后遇到了有前置接口的,就用pytest夹具编写,但是后来发现有些接口的前置特别多,比如我们的前端下单的接口,就需要有4-5个接口的前置(后台登录,上传图片,添加商品,前端登录),全部写在夹具里就很麻烦不好维护;所以,我们就优化一下方案,把前置接口都放到exce用例维护,执行这个下单接口的用例的时候,就会直接先执行用例里的前面的几条用例,接口的提取和关联都会放在excel维护,这样就不需要写那么多的夹具了。方便了很多。
案例3:注册接口的时候,发现比较麻烦的问题就是手机号码和用户名不能重复使用,所以后面我们想参考iMeter 工具随机数据生成 替换掉。faker生成随机数据,所以好需要数据库进行确认。循环去生成和查询的操作。频繁使用,而且进行后续的扩展其他的数据生成,所以我们封装成为类和类的方法。同样也放在excel表格里维护。读取和替换 执行函数得到随机生成的可以数据。
案例4:unittest框架,发现执行的用例模块很多,把模块进行分类划到不同文件夹下: uniutest 发现用用例 不在自动,不能存在文件夹;unittest框架迁移到pytest。
你们的自动化框架搭建完成之后,实例了多少了测试用例覆盖?为你们的手工测试提高了多少效率?总共执行需要多长时间?
核心模块功能100%用例【测试用例本身有多少(5000),接口自动化-般都是覆盖回归测试-90%以上(4500多条),具体是多少用例--算出来】
提高效率30-40%。(执行同样的用例 同样的人所花的时间)
需要的时间:每个接口几十ms -几百ms不等,根据接口数量来算:比如5000个接口*200ms=15分钟左右【分钟-小时都ok】
6、接口自动化框架在做回归测试过程中有没有发现什么bug?取得了怎么样的效果和收益?
比如开发改动了代码影响到了接口结构,能快速的验证出来否有问题。【我们发现了回归的bug,比如项目的一个项目举例子 提前准备1-2个项目的回归测试bug 】
参考电商项目的购物车bug
比如:--自动化框架对项目产生的价值,你的项目价值和成就。
1.自动化覆盖率:自动化覆盖了多少接口功能用例 -90%
2.自动化通过率,从测试报告里面拿到数据 --项目质量 没有标准答案
3.节省了多少人力/时间:之前需要手动回归的功能现在变成自动回归了 -- 提高效率30-40%
7、pytest运行完所有case之后如何清理数据库 --了解
fixture-夹具,定义一个session级别的fixture,在yield关键字后面写上对应清理数据库操作(pymysql)==后置
8、接口测试中的加密参数是怎么处理的
解决思路:找到项目开发确认加密的算法md5、aes、rsa,找他索要加密的代码,打一个jar包
工具解决方案:Jmeter当中通过引入jar包,使用里面的加密方法进行数据加密
代码解决方案:
1、找到对应的加密算法的对应的库处理这个加密的算法,比如RSA我们用的crypto这个库,找开发要对应的公钥,然后加载公钥用对应的方法进行加密。
2、Python当中引入jar包,通过Python执行jar包中的加密方法
9、requests库是如何传参的,如果是json数据怎么写?
通过requests库的requests方法
方法参数是如json数据,json来传递:o
如果是form data数据就用data传参
是get请求赢params传参
是文件参数就用files传参
10、Python接口自动化怎么处理接口的鉴权的?用什么实现接口依赖?--常见
1、我们项目用的token 鉴权;比如我们会先执行登录接口,然后把响应结果里的token 提取出来,我传递给下一个接口去使用
2、提取的方式我们用的isonpath提取的,因为我们的接口都是json的格式返回值。如果不是ison格式,可以用正则提取,比如Python里有用一个re的库,可以使用正则进行匹配提取。
11、自动化测试中用例依赖的数据如何构造?--概率比较低
1、接口调用构造测试数据,比如登录接口执行完后用jsonpath提取数据传递给下个接口使用。【我们项目的是怎么做的】
2、通过操作数据库
3、通过前置sql查询数据 得到数据库的数据 用于后续的接口;在测试用例前置里面通过SQL语句初始化测试数据【sql脚本 数据库编程 存储过程】
4、在测试之前提前准备好一套测试数据,将其数据库进行备份,在每次测试之前将备份好的测试数据进行恢复,测试完了之后再恢复原有的数据
12、接口自动化测试怎么校验结果?
1、响应断言
http响应状态码
响应体数据,确定要做断言的业务字段,获取对应字段值(jsonpath)再通过测试框架pytest所提供的断言方法assert
2、数据库断言,因为通过接口的层面不能保证业务数据的正确落到了数据库中,还需要通过查询数据库进行验证
13、你的目前接口自动化测试有哪些可以优化的地方--待优化?
1、用例量大的情况,执行效率,后面可以考虑通过并行的方式-多线程执行
2、目前主要通过代码编写方式实现自动化,对于业务测试人员不够友好,后期可以考虑基于现有的框架开发测试平台-测试开发(前端技术VUE+后端技术Django)
14、什么是装饰器?装饰器怎么用的?
python装饰器是一种用于拓展函数功能的方法,它可以封装旧函数并返回一个新函数,从而简化装饰器代码。
装饰器的作用是对函数进行包装、验证、缓存、等操作,增强函数的功能。具体来说,装饰器可以将函数包装成闭包函数,并在不修改原函数及其调用方法的情况下对其进行扩展。
我们框架里也有用,比如pytest的数据驱动就是用了一个pytest的装饰器进行传参的【@pytest.mark.parametrize("data",all cases)】;然后夹具也是用装饰器进行申明的【@pytest.fixture()】。
15、说一下你们的自动化测试的流程?
1.分析测试需求
2.制定测试计划
3.设计测试用例
4.搭建测试环境
5.自动化的脚本编写和框架搭建
6.脚本调试和验证
7.执行测试
8.生成测试报告和结果分析
9.记录测试问题个跟踪bug
10.持续集成和持续交付
11.自动化框架的维护和更新
16、请简单说一下unittest和pytest的区别??
1、uninttest是python的官方库,兼容性稍好。 pytest在安装时可能会出现和python版本不匹配的问题
2、uninttest在编写用例时是以类的形式编写的,并且都要继承testCase, pytest当中支持函数和类两种编写形式,并且pytest有conftest.py这个文件来支持全局的共享前置后置
3、在用例收集上,uninttest要利用testloader和testsuite来主动收集和加载用例,而pytest能够自动识别用例
4、在用例分类筛选上uninttest稍显麻烦,而python可以通过打标签轻松筛选用例
5、如果运行失败的话,uninttest官方没有提供失败重启的机制,而pytest自带失败重启的机制。
6、在运行结构方面,uninttest没有支持插件,而pytest中有700多个插件可以支持
17、当一个接口出现异常时候,你是如何分析异常的?
先抓包,用fiddler(charles)工具抓包,或者浏览器上F12调试工具;APP上的话,那就用Fiddler做代理,通过手机设置代理去看请求和返回报文;
查看后端日志,如Linux系统通过xhell连上服务器,查看接口日志,查看是否有报错信息(命令:tail -f 日志文件)
18、接口自动化中的关联怎么处理?
把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使用setattr()函数),下一个请求去调用这个类属性
Python基础面试题
1、python的pass语句作用
pass就是一个空语句,它没有任何实际上的意义和作用。它一般是用做占位语句,可以保持程序结构的完整性
2、python的异常处理?
python中的异常处理语句主要有try和except关键字来实现,当程序执行try语句时,如果发生了异常,程序会跳转到对应的except语句进行处理。在except语句中,我们可以使用不同方式来处理异常,比如打印出错误信息、重新抛出异常或者添加修复代码。
3、向列表增加数据,怎么操作?
(1)通过append方法可以向列表中添加元素
(2)通过extend方法可以将另一个列表中的元素逐一添加到列表中
(3)通过insert(index,object)方法在指定位置index前插入元素object
4、Python的常用数据类型有哪些?元组和字符串的区别?元组和列表的区别?
常用数据类型有: 整形、浮点型、列表、字符串、元组和字典等;
元组和字符串区别:
1、字符串str、元组tuple,都是不可变的数据类型。
2、元组中可以包含字符串,但字符串只能包含字符
5、python有哪种是可变量类型,那些是不可变量类型?
- 可变: 列表 字典 集合,掌握里面的增删改方法
- 不可变:
- 单一数据类型:int float bool
- 复合数据类型:元组,字符串
元组和列表的区别:
1、列表可修改,元组不可修改
2、列表是可变类型,元组是一种不可变类型
3、在数据量非常大的情况下,元组运算速度比列表快
4、只包含一个元素时,元组的定义和列表定义不一致,元组需要加一个逗号。
6、能否解释-下 *args 和 **kwargs
他们都是函数的不定长参数:不确认有还没有,也不确定长度个数
*args:等前面的参数接受完,剩下的所有的参数都会被这个不定长参数接受
- 并以元组格式保存。
- 不一定要放在最后,放的位置在哪里 前面的参数接受完 剩下的都归他。
- 位置传参的方式传递参数
**kwargs:等前面的参数接受完,剩下的所有的参数都会被这个不定长参数接受
- 并以字典格式保存。
- 关键字的传参的方式传递参数
- 一定要放在最后的位置。否则会语法错误。
7、函数参数定义的类型
1)位置传参:关注参数定义的顺顺序
2)关键字传参:指定参数名字进行传参,不关心位置和顺序
注意:如果要混合使用两种传参,位置传参必须放在关键字传参的前面!!
8、python中你用过哪些内置函数?
input()函数,print()函数,int()函数,str()函数,list()函数,dict()函数,len()函数,eval()函数,range(),setattr getattr hasattr zip()
注意:要能讲出来每个内置函数的作用和主要场景。讲在框架里使用过的内置函数
9、类型转换函数常用的有哪些?
str()转化为字符串
int()转化为整型
foat()转化浮点型
bool()转化布尔值
list()转化列表
tuple()转化元组
dict()转化字典
10、Python循环体中break和 continue的区别?
break和continue都是用来控制循环结构的;
break是用来结束整个循环,跳出循环体执行循环后面的语句,是跳出大循环。
continue是跳出本次循环,不执行continue后面的语句,是跳出小循环。
11、基于python做接口测试时,你是怎么读取测试用例的?
1、导入openpyxl库
2、打开工作簿(即excel地址)-- workbook
3、选择一个表单sheet,通过表单名获取数据
4、按单元格读取数据
5、将以上操作封装成函数,需要时再调用
12、有接口工具实现接口自动化测试〖meter,Metersphere,RF等】为什么还需要使用代码做接口自动化?
- 框架和接口测试的工具比,有什么优势,为什么要用代码做自动化,工具也可以实现自动化,这个问题怎么说呀
因为接口测试工具是别人写好的现成的工具,有很多限制和不足:
1、要按照工具的规则的语法来是使用,受限,不能自己定义
2、工具的维护和扩展都依赖工具发布者,如果对方不更新不维护,就没有办法使用;比如RF就是经常有问题 由维护不及时
3、很多的工具要使用一些高级的功能还是要自己写代码去扩展,比如imeter要处理加密 也要结合代码来做。JMeter java 编写,使用java编码写。难度更大
所以综合以上,还是自己的写代码做框架更加方便和灵活,也可以针对自己的项目做定制。
【所以公司更加看重代码自动化测试能力!学习成本 比工具高的 更加有价值!--为什么公司任何代码 ?】
13、要多久能把他们公司项目的接口自动化测试框架搭建起来? 框架搭建需要多久?
- 2周左右可以搭建一个框架【熟练自动化的人 速度 全职搭建项目框架】
- 不绝对,根据项目的复杂程度+人员对项目的熟悉程度 +设计熟练程度+时间,会上下浮动。
- 我们去面试: 熟练框架搭建和代码语法设计的角色:
1、这个时间不能说很绝对,不定因素比较多,因为我现在不熟悉你们项目业务,不太能精准的评估出来这个时间。
2、但是我拿我们之前公司的项目来说:因为之前测试过功能和接口,对业务很熟,搭建框架不间断的时间 大概花了1个月左右。在项目的间隙搭建的框架。

浙公网安备 33010602011771号