python接⼝⾃动化⾯试问题,接⼝⾃动化⾯试题
1.能够⼤致讲⼀下你们接⼝⾃动化框架是怎么搭建的吗?
好的,我们采⽤unittest和ddt数据驱动思想搭建测试框架,(对数据excel读取、yaml配置、Requests接⼝请求、Re参数化、Pymysql数据库效验、⽇志等模块实现封装),其中,⽤
1.Openpyxl来处理excel,存储测试数据(⽤例数据)
2.pyyaml来配置⽂件(configparse,pyyaml)
3. Pymysql来连接mysql数据库,执⾏sql数据,进⾏数据效验
4.Requests请求库,来向接⼝发起请求
5.使⽤logging模块来创建⽇志器,记录项⽬中的⽇志信息
6.使⽤HttpTestRunner来⽣成HTML测试报告
7.使⽤re模块来实现参数化(正则匹配)
8.使⽤动态创建属性(类属性)的机制来实现接⼝之间的依赖 (setattr getattr)
黄页号码⽐如:我们项⽬中客服指派订单的时候,需要上⼀个接⼝订单ID,⾸先要对上⼀个接⼝发送请求,获取订单id,通过实例化对象,创建属性名,获取属性值,从⽽实现指派订单接⼝的成功请求。
分层设计
为了提升接⼝⾃动化测试框架的拓展性、稳定性、完整性,进⽽提升测试效率,往往会将测试框架⼯程化,
整个流程会分为不同的层级,每个层级之间保持相对独⽴
cases
测试执⾏逻辑层,⽤于存放所有的测试⽤例类
configs
配置层,⽤于存放当前框架中的所有配置信息(使⽤不频繁,修改不频繁的数据)
datas
测试数据层,⽤于存放所有的测试数据,测试参数(可以使⽤excel,json,yaml,数据库来存储)
libs
⾃定义库⽂件层,⽤于存放⾃定义或者⼆次开发的库⽂件
logs
⽇志层,⽤于保存运⾏框架过程中产⽣的所有有效⽇志信息
mysql面试题常问reports
报告层,⽤于保存所有的测试报告⽂件(⼀般为html报告)
scripts
脚本封装层,⽤于保存所有的操作封装模块(yaml,sql,requests,参数化等)
run.py
⽤例启动⽂件,使⽤套件加载⽤例,批量执⾏并⽣成报告
9.使⽤Jenkins来实现持续集成
a.Jenkins如何配置定时任务?
cmd表白代码雨1.⾸先构建触发器
2.勾选Build peroidically
3.输⼊框中配置触发时间
00 12 ** 3 每周三 12点
⽐如 我们周三中午的时候运⾏⾃动化脚本,发送测试报告
2.接⼝⾃动化的流程?
a.需求 --需求⽂档、接⼝⽂档
b.评审
c.⽤例
d.编写⾃动化脚本
e.jenkins持续集成--定时执⾏脚本,⽣成报告
f.报告
g.发送邮件
h.提bug
3.你的项⽬中接⼝⽤例有多少?每次⼤概执⾏多长时间?
我们项⽬有65个接⼝;⼤概1200条⽤例,执⾏时间⼤概半个⼩时
4.Get和post区别?
1. get是不安全的,因为在传输过程,数据被放在请求的URL中,
post的所有操作对⽤户来说都是不可见的 (安全性)
2.Get传送的数据量较⼩,这主要是因为受URL长度限制
Post传送的数据量较⼤,⼀般被默认认为不收限制 (传输量)
2. get执⾏效率却⽐post⽅法好,get是form提交默认⽅法 (效率性)
1. cookie数据存放在客户的浏览器上,session数据放在服务器上
2. cookie不是很安全,别⼈可以分析存放在本地的cookie并进⾏cookie欺骗考虑到安全应当使⽤session
3. session会在⼀定时间内保存在服务器上,当访问增多,会⽐较占⽤你服务器的性能考虑到轻服务器性能⽅⾯,应当使⽤cookie
4. 单个cookie保存的数据不能超过4K,很多浏览器都限制⼀个站点最多保存20个cookie
5. 所以个⼈建议:
将登陆信息等重要信息存放为session
其他信息如果需要保留,可以放在cookie中
6.Http和https区别?
https协议需要到CA申请证书,⼀般免费证书较少,因⽽需要⼀定费⽤。http是超⽂本传输协议,信息是明⽂传输,https则是具有安全性的ssl/tls加密传输协议。
7.在接⼝⾃动化中,如何让token不失效?
1.调⽤登录接⼝,拿到获取的token
2.将拿到的token放在header中,调⽤确认登录接⼝
3.确认登录接⼝调⽤成功,接⼝返回信息正常
8.下个接⼝请求参数依赖上个接⼝的返回数据?
不同的接⼝封装不同的函数或⽅法,需要的数据return出来,⽤⼀个中间变量a去接收,
后⾯的接⼝传a就可以了
9.接⼝测试中依赖登录状态下的接⼝如何测试?
本质是:在每次发送请求时需要带上session或cookie才能发送成功,在构建post
请求时添加必要的session或者cookie
iasl编译器下载10.依赖于登录的接⼝如何处理?
登录接⼝依赖token的,可以先登录后,token存到⼀个yaml或者json或者ini的配置⽂件⾥⾯
后⾯所有的请求去拿这个数据就可以全局使⽤了
如果是cookies的参数,可以⽤session⾃动关联
11.依赖第三⽅的接⼝如何处理?
这个需要⾃⼰去搭建⼀个Mock服务、模拟接⼝返回数据
mock可以⽤在单元测试过程中,还有⼀个⽤途,当前端开发在开发页⾯的时候,需要服务端提供API接⼝,此时服务端还没开发完成,或者说没搭建测试环境,这时候前端开发会⾃⼰mock⼀个api服务端,⾃⼰给⾃⼰提供调⽤接⼝的返回数据。
12.接⼝产⽣的垃圾数据如何清理?
造数据的数据清理,需要python连接数据库,做增删改查操作
测试⽤例前置,setUp做数据准备
后置操作,tearDown做数据清理
14.不可逆操作,如何处理,⽐如删除⼀个订单这种接⼝如何测试?
主要靠⼿⼯测试造数据,直接在数据库改字段状态。⾃动化也⼀样,造数据可以⽤python连接数据库,做增删改查的操作
测试⽤例前置,setUp做数据准备
后置操作,tearDown做数据清理
15.你的项⽬中接⼝⽤例有多少?每次⼤概执⾏多长时间?
我们项⽬有65个接⼝,⼤概1200条⽤例,执⾏时间⼤概半⼩时左右。
16.接⼝⾃动化的参数你是如何实现的?说说你的想法?
我会⽤python中Re模块中的sub⽅法去替换
17.如何使你的接⼝⾃动化测试⽤例直接跳过前⾯⼏条,直接执⾏第 7 条?
throw和exception可以在 Excel 创建⼀列,指定是否跳过,然后在⽤例时,过滤掉这些⽤例
使⽤条件判断,通过 case_id==7 来决定是否执⾏
18.如何使你的接⼝⾃动化脚本,对于同⼀个请求让同⼀个⽤户请求多次?
在 Excel 中设置相关执⾏次数的字段,在 ddt 数据驱动时,使⽤代码来控
制执⾏次数。
params和data区别
由于get请求⽆请求体,post请求有请求体
使⽤params参数时,默认会把参数附加到url后⾯,所以发送get请求时应使⽤params参数
使⽤data参数时,参数会存放到请求体中,所以发送post请求时不能使⽤params,应使⽤data,除⾮接⼝及⽀持get⼜⽀持post,同样get请求也不能使⽤data参数
为什么要对requests进⾏封装?
1.通过封装,我可以直接把所有的请求参数统⼀使⽤字典来传递
⽐如,我们接⼝需要的数据也就是测试数据往往会保存在excel表⾥⾯,那么我们取到后是字符串类型,字符串类型是⽆法作为请求参数传递的,所有我每次都要做数据转换,再传递给接⼝,为了节省这个过程,我只需要把这个过程封装到我的requests⾥即可,每次取数据后会⾃动给我处理
第⼆,当我想保持某个状态时,不想每次都初始化⼀个session对象,那么我可以把它封装到我的reuqests⾥⾯,以后直接调⽤即可
如何使⽤Seesion解决接⼝保持状态?
初始化Session实例,通过这个实例调⽤request()⽅法发送请求
说说接⼝测试的流程,介绍⼀下request有哪些内容?
1.流程:获取接⼝⽂档,依据⽂档设计接⼝参数,获取响应,解析响应,校验结果,判断测试是否通过
封装了各种请求类型,get,post等;
以关键字参数的⽅式,封装了各种请求参数,params,data,headers,token等
封装了响应内容,status_code,json(),cookies,url
session会话对象,可以跨请求smart原则具体案例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论