Python + requests + unittest + ddt 进行接口自动化测试的框架

使用分层思想进行接口自动化框架: python+requests+unittest+ddt
在pycharm中新建一个项目,然后新建7个项目包
【1】定义一个conf包(配置包)用来组建接口请求
【2】定义一个data包(数据包)用来存放测试用例表格的
【3】定义一个library包(外部函数 工具类)存放外部导入的工具函数
【4】定义一个report包(报告包)存放最终的测试报告
【5】定义一个run包(运行包)执行所有的测试用例并生成报告用的
【6】定义一个testcase包(用例包)在里面运行编写的测试用例
【7】定义一个utils包(工具类包)存放所有自己写的封装语句

首先在【7】utils包下新建一个head_path模块在里面编写项目与包的路径

在【1】conf包下新建一个conf.ini文件里面写入运行的系统基本信息和登录的账号密码(包括环境,域名,请求头,测试数据,数据库,邮件)

在【7】utils包下新建一个head_conf模块在里面编写处理ini文件的代码。
在utils包下新建一个head_requests模块在里面写入封装接口的工具类。
在utils包下新建一个head_excel模块在里面写入读取表格的代码,使用pip3 install openpyxl下载。

在【6】testcase包下新建一个test_login模块在里面写入数据驱动的代码,需要拿到ddt这个工具函数。

在windwos系统中新建一个表格,表格内写入id、接口名称、用例标题,、用例类型、url、要填写的信息、预期结果、是否通过空置。然后将表格导入项目包中的【2】data包内。

在【6】testcase包下新建一个test_login模块,用来写入运行表格用例的代码。

最后把HTML文件导入到项目包内的【3】library包下,然后在【5】run_allcase包下新建一个模块,里面写入运行所有用例的代码,和生成测试报告的代码。并将报告的存放路径放到【4】report包下。

【一】项目面试题 ==》6道题
【1】工作中有哪些项目相关的bug?

电商项目bug:
bug1:系统赠送的优惠券在用户在消息中心能看到通知,但在我的优惠券中没有出现优惠券。
bug原因:后端并没有进行同步,接口入参没有问题,但是接口的返回值没有返回数据,导致在我的优惠券模块没看到

bug2:下单商品时默认勾选了最大的优惠券,实际上不应该有默认勾选。
原因:前端样式被写死了
bug3:商品详情页图片下滑一直加载下不去等等
银行贷款项目bug:

【2】项目中测了哪些接口?
电商项目接口:搜索商品接口,查看商品详情页接口,商品加入购物车接口,领取优惠券接口,创建订单接口,商品评价接口
银行贷款项目接口:注册登录接口,借款信息查询接口,填写借款信息接口,点击提交待审核接口

【3】讲下项目中有哪些模块(功能)?模块的测试点都有哪些?
1)电商项目中的模块(功能):
我主要负责的有搜索商品,商品加入购物车,待支付订单,取消订单,新增收货地址,申请售后(退货退款,仅退款,换货,补发,商家拒绝),客服仲裁等
那我大概和您讲一下 取消订单 或者 优惠券 的测试点吧
取消订单测试点

点击取消订单的原因是否可以选择:价格贵,余额不足,款式拍错,暂时不需要了等选项

订单取消后点击查看订单是否显示交易关闭状态
订单取消后是否支持删除订单

取消订单后,原来使用的优惠券是否会返还
,返还的优惠券是否会及时到账
,显示在我的权益-优惠券中
优惠券测试点
使用满减优惠券,比如满100减10,金额满100,100.01,99.99是否可以使用,减10是否可以准确抵扣
使用折扣优惠券,是否可以成功打折
全场通用优惠券是否所有商品都可以用
指定商品优惠券,其他商品是否可用
有多张优惠券是否可以选择同时使用
使用优惠券下单,取消订单后优惠券是否返还

2)银行项目中的模块(功能):在之前的公司我主要负责的是贷前的业务,主要包括客户注册登录,个人信息采集
手机号码为10位,11位,12位验证,为空验证
客户姓名为空,包含英文,特殊字符是否可以
性别:男女选项唯一性验证
选择完贷款产品和填写完基本信息点击提交后是否跳转到审核界面

【4】项目流程 ==》H模型(一条测试线,一条开发线)
1)我们拿到需求后对需求进行评审
2)开发人员根据需求编写代码,测试人员根据需求编写测试用例,所有测试人员编写完测试用例之后开始进行用例评审,评审通过后确定最终的用例基线化文档,然后将用例导入到用例管理工具(禅道)
3)测试经理(或运维)搭建测试环境,部署项目包,开发将代码包进行提测。
4)然后首先进行冒烟测试,冒烟测试通过进行sit系统集成测试(冒烟测试不通过则重新打回给开发修复),测试过程中有bug让开发修复,开发修复完成后进入第二轮测试,第二轮测试测主体功能,还有上一轮出现bug的模块以及相关联的用例。
5)以此类推进行多轮测试直到bug为0,然后将产品封装上预发布环境进行回归测试,回归测试通过后发布到正式的线上服务器进行验收测试,验收测试通过后产品就可以正式上线了

项目阶段 ==》V模型(用户需求分析,概要设计阶段,详细设计阶段,编码,单元测试,系统集成测试,验收测试)
测试流程 ==》H模型中的测试部分
测试阶段 ==》冒烟测试阶段(主体功能),系统集成测试阶段(所有的功能,接口,UI,app),回归测试阶段(手工+UI自动化和接口自动化),验收测试阶段(阿尔法α验收--我们自己验收,贝塔β验收--客户方做验收)

【5】项目,版本的时间周期
1)先有项目(1-3年都有可能),后有版本(1-3个月迭代一个版本)
2)1个月迭代一次版本(大约24天,一个月30天减去休息)
需求评审+写测试计划+用例评审+环境搭建+上线 ==》8天
编写测试用例 ==》8天 ==》一天编写50-100条用例(看需求多少)
执行测试用例 ==》8天
冒烟测试 ==》5条用例 ==》半天执行完
系统集成测试 ==》500条用例 ==》4-5天执行完
回归测试 ==》500+条用例 ==》2天左右
验收测试阶段 ==》500条用例 ==》1天左右

【6】项目组成员比例
测试4个人
开发20多个人(前端开发html,css 7.8个人 后端开发Java 12.13个人 )
工作都是测试经理安排的,我主要负责采集,绑卡,审批等

【7】项目的难点有哪些?
1)造的数据经常会被其他同事或者后端开发当做脏数据给删除了 》解决办法:造完后及时去维护,测试前和其他同事打个招呼让他们别删
2)做常规版本的时候,经常会加入紧急版本,导致测试时间被压缩
》解决办法:提供工作效率,加班处理,然后给需求排优先级先处理紧急的需求,原本的10天测试时间,提前做好预期在7-8天内完成,剩余的时间可以更好的应对突发情况,做好风险评估
3)开发有的时候需求实现不了,然后和产品沟通好了说就按开发实现的去做,但是需求却没及时更改而且有时候也没及时告诉我们测试,导致我们信息滞后,用例白写了 ==》解决办法:在需求澄清的时候和产品说好,下次有需求改动点及时邮件发出来,及时同步

【二】bug面试题 ==》
【1】bug占比:bug占用例的10%左右 ==》大约600条用例有60个bug

【2】bug的4个等级/怎么去界定一个bug的严重程度
L1,P0,严重 》转账功能转账不了账
L2,P1,次严重
》转账成功了但是没有转账记录
L3,P2,一般》转账成功有记录但记录里少了1个字段,比如转账人
L4,P3,建议性
》转账时间没有精准到秒

【3】bug管理流程?
测试人员发现一个bug并把bug提交到管理工具,让开发进行修复(修复后bug状态为已修复),修复后测试人员复测,复测通过然后关闭bug,不通过则重新打开这个bug

【4】bug的生命周期
新建 new
拒绝 reject
已修复 fixed
待测试 pending
关闭bug closed
重新打开 reopen

【5】一个完整的bug包含哪些内容?
bug编号
bug所属项目,模块,产品
bug标题
bug的重现步骤
bug的预期结果和实际结果
bug的优先级,严重程度
bug的附件
bug的前置条件
bug的指派人

【6】怎么区分是前端bug还是后端的bug
首先用fiddler或者谷歌浏览器F12开发者工具进行抓包,如果接口的入参没有问题,接口的返回报文也没有问题,就属于前端的bug。
如果接口的入参没有问题,接口的返回值有问题,就属于后端的bug

【7】你们怎么去评估上线的质量?
1)bug为0
2)bug占用例的比例不能大于15%,不然会影响上线

【8】偶现bug怎么处理?
1)增加复现的次数,比如50次
2)等它复现的时候我会截图或者拍视频给到开发,并且把报错的日志也给到开发进行定位分析

【9】你认为这是一个bug,但开发认为不是一个bug的时候怎么处理?
我会和开发一起找产品经理对一下需求,看我和开发对需求的理解是否一致

【10】出现线上的bug你们是怎么跟踪和处理的?
首先看一下bug是属于什么级别的,如果是L1和L2级别的话我们会评估一下对其他模块是否会造成很大影响,如果不会的话,我们会在当前版本发布紧急版本进行修复或者打个紧急的补丁
如果是属于L3或者L4级别的bug,不对功能造成很大的影响的话,我们会和领导请示一下看是否可以放在下一个版本进行修复。

【11】你们之前出现过生产bug吗?
没有

【三】Python和数据库面试题 ==》 道题

【1】元组,列表,字典的区别?
1)字符串(不可变):str = ' '
2)元组(不可变):tuple = ( )用小括号表示 占用内存少,效率高(可以放任意数据类型)
3)列表(可变):list = [ ]用中括号表示 占用内存多,效率低(可以放任意数据类型)
4)字典(可变):dict = { }用大括号表示 以键值对的形式出现(键唯一不可变,值任意可变)
5)集合:{ } 分为可变集合set和不可变集合frozenset两种 ==》集合中的元素不允许重复,集合最大的功能就是去重

【2】Python中的基本数据类型分类?
1)有序序列和无序序列
有序序列:字符串,元组,列表(序列中的元素是有顺序的)
无序序列:字典,集合 (序列中的元素是没有顺序的)
2)可变数据和不可变数据
可变数据:列表,字典,可变集合 (允许对该数据类型中的元素进行修改)
不可变数据:字符串,元组,不可变集合 (不允许对该数据类型中的元素进行修改)
3)可迭代对象和不可迭代对象
可迭代对象:字符串,列表,元组,字典,集合
不可迭代对象:数值型(整数型,浮点型)

【3】Python的基本数据类型有哪些?
< class ' str ' > 字符串类型
< class ' list ' > 列表类型
< class ' tuple ' > 元组类型
< class ' dict ' > 字典类型
< class ' set ' > 集合类型
< class ' bool ' > 布尔值类型(true / false)
< class ' number ' > 数值型类型(包括int、float、complex复数)
< class ' int ' > 整数值类型
< class ' float ' > 浮点数类型(小数点数值)
< class ' complex ' > 复数类型
< class ' dict_items ' > 字典容器类型
< class ' zip ' > 解压类型

【4】Python中的深拷贝和浅拷贝的区别?
深拷贝会开辟新的内存地址、浅拷贝不会开辟新的内存地址

【5】你平时都是怎么去看日志的?
通过xshell连接服务器,然后用tail - f命令去查看实时的日志

【6】引号的用法(引号里面都不能使用本身)
单引号 ' ' 和双引号 '' '' 的作用一样,都是表示字符串
三引号 ''' ''' 一般用作多行注释,也可以表示字符串
1)单引号 ' ' 中不能使用单引号和三引号,但可以使用双引号
2)双引号 '' '' 中不能使用双引号 ,但可以使用单引号和三引号
3)三引号 ''' ''' 中不能使用三引号 ,但可以使用单引号和双引号

【7】Python的格式化输出
%s 传字符串
%c 传单个字符
%d 传十进制整数
%f 传浮点数
%% 传百分号

【8】Python中的索引,切片,步长值 ==》格式 [开始索引:结束索引:步长值 ]
1)索引:
正向索引从0开始,负向索引从-1开始
能取到开始索引,取不到结束索引
结束索引没写默认取俩边、取哪边看步长值、步长值为正往右取、为负往左取
2)切片: [开始索引:结束索引 ]
3)步长值:
步长值默认为1(步长值为2表示隔一个一取)
步长值为正从左往右取,步长值为负从右往左取

【四】ui自动化和接口面试题 ==》 道题

【1】功能和接口的区别?
功能测试:关注的是前端页面的功能实现
接口测试:关注前后端数据逻辑的交互

【2】测了接口为什么还要测接口自动化?
测接口是为了保证当前版本的接口正常场景和异常场景没有问题
接口自动化是测试之前发布过的老版本

【3】什么样的项目适合引入ui自动化测试?
1)稳定,周期比较长
2)需求变更不频繁
3)页面元素变更比较少
4)迭代周期长

【4】ui自动化的业务场景覆盖和用例条数覆盖情况,ui自动化用例条数覆盖
1)可以覆盖的场景:银行信贷信息采集,个人中心,授信,提交,审批,签约,绑定银行卡,添加商品,创建优惠券,加入购物车
2)不可以覆盖的场景:人脸识别,滑动认证,人机验证,发短信到手机端做H5的电子签名,跨平台的web跨app等等

【5】业务场景覆盖率大概50%—70%左右
用例条数覆盖情况大概10%—20%左右,一年写300—400条ui自动化用例》执行用例时间大概2个小时左右
500条功能测试用例 》10-20% 》50-100条》12个月*50》600条
》在公司实际上顶多300-400条

【6】做ui自动化的时候图形验证码怎么处理?
我们让开发设置一个万能验证码

【7】selenium工具里面的元素定位有哪些?
id,name,xpath,css,class,tag_name,link_text,partial_link_text,JavaScript等等

【8】UI自动化的等待方式有哪些?
1)强制等待:
当前页面在规定时间内加载完成,需要等到规定时间才能跳转到下一步
当前页面在规定时间内未加载完成,则等到规定时间到了会报错并且出现异常信息
使用方法:sleep(5)或者time.sleep(5)
2)隐式等待:
当前页面在规定时间内加载完成,不需要等到规定时间直接跳转到下一步
当前页面在规定时间内未加载完成,则等到规定时间到了会报错并且出现异常信息
3)显式等待

【9】脚本如何维护?有没有碰到什么bug?
1)通过po设计模式结合框架分层对脚本进行维护
2)在回归测试阶段,多去运行,通过Jenkins去持续集成

【10】做ui自动化的时候有没有碰到过什么bug?没有碰到bug做ui自动化的目的是什么?
没有,做UI自动化测试是为了对老版本的功能进行回归测试,不是为了找bug的

【11】做自动化遇到了什么问题?怎么解决?
1)有时候通过id,name,class动态元素定位不到,我会采用xpath或者css定位
2)有时候自动化脚本比较慢,我会尽量少用xpath绝对路径,并且尽量减少sleep.time的使用
3)有的时候想要测试的界面元素没有加载出来 ==》我会通过导入时间模块隐性等待和显性等待来解决

【12】什么叫po设计模式?po设计模式的作用
po设计模式:指的是所有当前页面的控件和元素都为类或者对象的属性,我们平时用PO设计模式,主要分了三层,最底层是元素定位层,就是把元素定位方法id,xpath,name,css等等和元素通过元组来接受,并且放在一个类当中,第二层是流程层只写我们的流程,第三层就是我们的用例也就是我们的代码层了,代码层会调用流程层,并且在需要元素定位的时候都是把底层已经封装好的元组也传进来就可以了,相当于就是不会把代码写死,起到了一个分离和解耦的作用,这个就是我理解的PO设计模式。
po设计模式的作用:就是为了防止代码写死

【13】面试官问:你之前是怎么怎么做的UI自动化?
答:我之前是用的python+selenium结合unittest来做的,我们刚开始都是用的线性脚本去写的,但是后面因为用例比较多,我采用了框架去进行了分层封装,需要跟您详细讲一下分层结构的代码吗?

【3】接口测试流程?
1)从开发那里拿到接口文档,分析需求并进行需求评审
2)根据接口文档编写测试用例,编写好之后进行测试用例的评审
3)然后将测试用例导入到测试工具
4)部署环境,使用接口测试工具进行接口测试,发现bug就通过bug管理工具提交给开发修改,开发进行修复
5)输出接口测试报告

【4】接口测试你一般用什么工具?
postman

【5】讲一个你具体做过的接口?
1)我用postman做的借款接口
2)打开postman,新建一个collections集合,添加一个接口请求,我一般选择的是post请求,填写接口的协议域名以及路径,可以直接通过网址中的开发者工具或者fiddler工具进行抓包接口,点击body选择接口的入参格式,将接口的请求体输入到body中的入参数值当中。
3)参数输入好以后,在test中进行断言,一般断言响应内容,响应时间和响应状态码
4)点击send发送,首先查看body响应体的内容,如果通过则显示请求成功否则就显示请求失败
test results中的断言结果(显示pass则表示断言通过)
5)最后将整个接口保存到新建的集合当中

【6】接口自动化是如何做的?
使用分层思想进行接口自动化框架: python+requests+unittest
第1层定义一个conf配置层,用来封装测试环境,域名,测试数据等基本信息以及登录的账号密码
第2层定义一个utils工具层,用来封装项目与包的路径,读取excel表格和一些工具函数
第3层定义一个data数据层,用来存放测试用例表格
第4层定义一个testcase用例层,定义一个类继承unittest.TestCase这个类,通过unittest单元测试框架来管理和运行编写的测试用例
第5层定义一个run运行层,用来执行所有的测试用例
第6层定义一个report报告层,通过将html导入然后生成最终的测试用例报告

==================================================

【五】其他类型面试题 ==》
【1】有哪些环境?
开发环境
测试环境(沙箱环境)
预发布环境(灰度环境)
生产环境(真实环境)

【2】你怎么保证你们的产品上线之后没有问题?你是怎么考虑到用例的覆盖率?(穷尽测试是不可能的,但是不能说)
1)首先我会对需求了解清楚,做好需求评审
2)我会从正常场景和异常场景的角度,以不同的用例设计方法,去编写测试用例,以保证测试用例的覆盖度比较全面。
3)在执行测试的时候多测试几遍,保证测试的覆盖度不会漏测
4)用用等价类,判定表,因果图等等各种用例设计方法从各方面去进行一个整体的考虑
5)上述步骤都执行到位的话,上线之后的产品基本上没有问题

【3】加入紧急需求导致测试时间被压缩怎么处理?
优先处理紧急需求,然后进行提高自己的工作效率,或者向上级请求同事支援

【六】测试岗位面试题 ==》
【1】测试计划内容?测试总结一般是由谁编写的?
1)测试的目的
2)测试的背景
3)测试的范围
4)测试的约束(准入和准出)
5)测试的人员安排
6)测试的风险评估
7)测试的软硬件环境
8)测试的资产归档
测试总结一般是由测试经理去写的

【2】测试小结的内容?每个测试阶段的每一天需要编写的测试小结报告?
1)测试的版本号
2)测试的人员,测试的阶段
3)测试的进度,测了多少条用例,找了多少条bug,bug比例是多少?
4)遗留的bug有多少?
5)bug清单
6)测试小结的结论
7)风险评估
8)明日的计划

=====================================================
【7】数据库多表查询有几种方法?各有什么不同?
1)内连接查询(查询两个表都符合条件的数据)关键字inner join
2)左连接查询(左边表中数据显示全部)关键字left join
左边表中显示全部,右边表符合条件的显示,不符合的以null填充
3)右连接查询(右边表中数据显示全部)关键字right join
右边表中显示全部,左边表符合条件的显示,不符合的以null填充
举例子:a表123 b表124
内连接:显示 左边12 右边12
左连接:显示左边123 右边12 4不显示
右连接:显示左边12 右边124 3不显示

测试流程?
测试计划(测试准入)与控制》测试分析与设计》测试实现与执行》测试报告(测试准出)》测试过程资产归档(测试总结)

冒烟测试和回归测试有什么区别?
冒烟测试:测试主要功能和流程的用例测试
回归测试:对之前已经测试过的用例进行测试

Linux怎么查看8080这个端口的使用情况?
ps -ef | grep 8080

怎么把xiaowang.txt这个文件打包成一个zip包?怎么把xiaowang.txt打包成一个tar.gz包?具体Linux命令是什么?
zip -cvf xiaowang.zip xiaowang.txt
tar -zxvf xiaowang.tar.gz xiaowang.txt

怎么对需求进行分析?
从需求的显性需求,隐形需求,特殊需求出发

你们数据库当中有多少张表?把user表中id=10的name字段的值改为多测师,怎么改?
200 - 500张表左右
update user set name = 'duoceshi' where id = 10

怎么查看创建好的索引?谈谈你对索引的理解?
show index from + 表名
索引是一种数据结构,约束字段,提高查询效率
一般有主键索引,唯一索引,普通索引

你们项目组进行数据库连接的客户端工具是什么?怎样去连接的?
Navicat,打开Navicat软件,点击工具栏中的连接,选择MySQL,进入到连接设置界面,填写连接名,主机名或IP地址,端口,安装MYSQL时设置的用户名,密码,然后点击确定。

单元测试阶段(UT):白盒测试
黑盒测试:又称功能测试,是一种从用户角度出发的测试。把被测程序当作一个黑盒子,测试人员完全不用考虑盒子里面的逻辑结构和具体运作,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。主要的测试方法有等价划分类,错误推测法等。
白盒测试:也称为结构测试。多用于单元测试阶段。它根据程序的控制结构设计测试用例,开发人员针对于自己编写好的代码包进行自测,用代码测试代码,是需要知道软件的内部逻辑,从而对逻辑进行测试,然后输出单元测试报告。
灰盒测试:又称接口测试,多用于集成测试阶段,是介于白盒测试与黑盒测试之间的一种测试,需要知道软件内部的部分逻辑,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑。
三者的区别:
从测试目标和依据来说:黑盒面对的是产品设计,白盒针对的是程序功能的实现,灰盒针对兼而有之,既要考虑产品设计要求,又考虑到功能实现的效果
从实现者而言:黑盒在意的是客户的角度,白盒测试针对的研发人员。
从测试模块颗粒度而言:白盒在意的是代码实现层面,而灰盒更加侧重模块之间,而黑盒更在于用户层面

数据库常见的约束有哪些?
1)非空约束:not null(当前字段id对应的值在表中不能为空)
2)默认值约束:default(当前字段如果没有插入指定的值,默认为153666777)
3)主键约束:primary key 简称:key(当前id这个字段对应的值是唯一的,不能重复的,比如身份证号码不能重复)
4)外键约束:foreign key 对表与表之间的约束(前三个约束是对表和字段之间的约束)
5)自增长约束:auto_increment(作用于主键上面的)

Mysql数据中的表怎么进行备份?
将表传到本地window上,利用rz或者rs或者xftp4

你们公司的测试环境是基于什么搭建的?
测试环境是基于Linux搭建的(服务器):云服务器

http和https是什么?各自的端口号是什么?
http是超文本传输协议,端口号8080
https是超文本安全传输协议,加密的,端口号443

你在公司用数据库来做什么?
对表数据进行增(insert into)删(drop table)改(update)查(select)

DDL和DML分别是指什么? 数据库中删除的方式有哪几种?分别有什么区别?
.SQL语言的分类

  • DQL:数据查询语言,对数据库进行查询(必须熟练掌握)
  • DML:数据操作语言,对数据进行增加,修改,删除(insert,update,delete)
  • DCL:数据控制语言,进行授权与权限回收(grant,revoke)
  • DDL:数据定义语言,进行数据库,数据表的管理(create,drop)
posted @   IT行业人员ZZ  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示