当前位置:网站首页>测试--面试题总结
测试--面试题总结
2022-07-02 06:36:00 【迷途~知返】
软件测试常见问题汇总
- 自我介绍
- 测试理论
- 计算机网络与协议
- 自动化测试
- 接口自动化测试:
- 接口测试用例的设计:
- 接口测试都测试哪些
- get和post:
- 接口关联:
- 自动化的接口关联
- http:
- 接口自动化如何娇艳接口的正确性:
- 个人的职业规划
- 为什么从上一家公司离职
- 接受加班吗?
- 自动化测试框架设计:
- selenium工作原理:
- 动态元素的定位
- 元素定位失败的原因是什么
- 关键字驱动:
- PO模型--完成单一系统的测试覆盖率,降低手工执行的测试工作
- 提高selenium脚本的自动化执行效率
- 提高自动化执行的稳定性
- 如何设计高质量的自动化脚本
- 之前公司的ui自动户测试框架是如何实现的,接口自动化测试框架重新梳理
- 一个完整的请求过程是什么样子的
- UI自动化下的断言如何展开
- 多环境运行测试用例
- 日志模块在自动化测试中的用途是什么
- 持续集成在自动化测试中能起到什么样的用途
- 关键字驱动
- pom设计模式
- 接口自动化测试框架设计
- 接口测试框架实现整理
自我介绍
面试官你好,我叫XX,19年毕业后从事软件测试,有三年的软件测试经验,目前所做的项目是百度私有云项目,主要从事web端的功能测试,接口测试,接口自动化测试,功能这块熟练掌握软件测试理论知识,可以负责项目的测试任务,熟练使用linux的基本命令,熟练使用数据库的增删改查操作,接口方面的话,熟练使用postman进行接口测试,自动化测试也有涉及,主要使用的是python+pytest+request+allure进行接口自动化测试语言方面主要使用的是python,减少了40%的人力,业余时间的话,会跑跑步,对自动化测试相关知识进行深入性的学习,以上就是我的个人基本情况介绍,面试官还有什么想了解的吗?
测试理论
测试流程
需求评审(项目经理,开发人员,测试人员,产品经理)–>需求确定(产出一份明确的需求文档)–>开发设计–>测试计划(测试设计)输出测试用例–>用例评审(开发,测试经理)–>测试环境搭建–>执行测试用例(中间可能会补充用例)–>提交bug–>开发人员修改bug—>回归测试(按根据测试case在执行一边(可能会发现新的问题))
测试流程中各个阶段的时间分配
1、产品经理或者SR拿到产品需求书分发给开发和测试人员,
2、测试组长开始编写测试计划并分配测试任务给测试人员,同时间开发进行需求分析
3、需求评审,产品经理,进行需求讲解达到需求对齐,对于有不明确的需求产品找sr进行修改
4、需求对其后,测试人员进行测试用例的设计和测试场景的梳理,梳理完成,
5、测试用例评审(测试人员,开发,sr),对应模块的开发提出修改意见,测试人员用例修改,并补充测试案例
6、修改完成后再次评审(开会或者邮件的方式)
7、开始测试,测试环境搭建,提出bug等待开发修复后进行回归验证
bug卡片包括的内容:
测试环境,测试步骤,基本的定位信息,请求参数,响应题
测试用例的设计方法:
- 边界值
- 等价类
- 错误推断法
- 因果图
计算机网络与协议
http和https区别
http和https:
http:无状态的,端口号是80,对于事物的处理没有记忆,
https:http+ssl证书,蹲口号是443,https的站点上会多出来一把小锁
http的三次握手和四次挥手
第一次握手:客户端向服务端发送请求,我要和你建立连接,发送一个syn的包,并进入syn_sent状态
第二次握手,服务端收到请求,确认客户的syn包,会向客户端发送一个syn=1,ack=1的包进行链接,此时服务器进入syn_recv状态
第三次握手,客户端收到服务端的ack+syn的包,并向服务端发送确认包ack=1,和服务端建立连接,客户端和服务端进入ESTABLISHED状态,完成三次握手
四次挥手:
当数据发送完成后,客户端会去请求服务端端开连接
第一次挥手:客户端发送一个fin包,代表链接释放,并停止数据发送,客户端进入fin-wait-1状态
第二次挥手:服务器收到客户端发送的释放连接报文,发出确认包ack包,并且带上序列号seq=v,服务端进入close-wait状态,客户端收到确认请求后,进入fin-wait-2的状态
第三次挥手:服务端将最后的数据发送完成后,向客户端发送释放连接报文fin包,且由于服务器处于半关闭状态,服务器会想第二次挥手过程中一样,发送ack包,服务器就进入了last-ack状态,等待客户端确认
第四次挥手:客户端收到服务器的链接释放保温后,发出确认报文ack包,且带上序列号seq=u+1,发送完成后,客户端进入Time-wait状态,而服务器收到客户端发出的确认,立即进入closed状态
cookie和session的区别
cookie是由服务端生成存储在客户端的一个文本文件大小不超过4kb,包含用户名,密码,设置等,不安全,别人获取到你的cookie值时可以进行cookie欺骗
session:存储在服务端,第一次访问时,会生成一个sessionid返回给客户端
工作中如何分析定位bug
借助工具fiddler/f12开发者工具,抓取接口信息,如果是前段问题,通过前端输入数据和fiddler抓取到的请求数据肯定不一样,如果前端正常,相应数据有问题,则是后端的问题
后端bug定位:根据开发给的日志文件路径,和关键字信息去日志中找报错日志,然后进行分析,日志看不懂着开发分析排查
bug的来源:
- 开发修复bug引入的bug
- 新功能引发的bug
- 开发使用了依赖的第三方插件导致的bug
- 缓存导致的bug
项目介绍:
我们主要做的是私有云iass层的计算业务,私有云项目主要是为了满足客户的信息安全,自主化等方面需求的云平台,主要提供了计算,存储,网络等虚拟化服务,其中计算模块包含云服务器BCC,镜像,快照,部署集,autoscaling,cinder,bbc,ddc等相关服务,我在该项目中主要负责计算模块的功能测试,接口自动化的测试
对于接口自动化测试,在测试执行前,我们会使用接口自动化进行一个功能的回归,总共有总共有210条测试案例,可自动化的案例数是182条,全自动化的覆盖率case数量137已达到了67%,范自动化的测试案例数量150覆盖率已达到70%,极大节省了人工成本
进行功能测试时,首先会参与需求分析,对于自己不明确的点向产品经理提出疑问,达到需求对齐后,根据需求文档进行测试点的提取,设计测试case,那我们的快照模块来说,磁盘快照和实例快照,用户可以进行快照的创建,当发现某一个时刻的数据不对了,可以根据快照信息进行一个回滚操作,回滚快照成功后,需要验证快照数据的正确性,通常使用summd5,对于数据文件的验证,总结:这就是我的一个基本项目内容,在项目测试过程中总共提出了80个bug,有四个未修复,主要是依赖的组建未ready所产生的bug,
接口请求不通
ip或者端口url写错
服务器的防火墙拦截
服务端项目没有部署起来
客户服务端网络不通
服务端内部程序发生错误
token/cookie的鉴权问题
如何判断一个接口是否有bug
请求信息,响应信息,数据库
接口地址,url,参数,header,请求体参数是否正确
响应信息:是否和接口文档一致
数据库:数据信息是否正常
如何使用postman做接口测试
- 打开postman设置enviroment配置当前测试的项目,在这块可以将整个项目测试中通用的url信息设置成环境变量的形式,方便后续的调用,设置完成后记得保存
- 点击collections,选择配置好的测试环境,
- get请求
- 新建一个tab页面,选择接口当前接口的的一个请求方法,输入url信息,点击发送,查看相应数据的格式是否和接口问题提供的一致
- post请求
- 新建一个tab页面,选择请求方法是post,输入url信息
- 请求体内容配置,点击发送请求,获取相应数据,和接口文档进行比对,数据格式是否正确,内容是否正常
- 带有cookie/token的请求
- 新建一个tab页面,输入url请求方式为post,输入请求体内容,在header里面添加cookie信息,然后点击send
postman接口关联:
后续接口在测试过程中依赖前一个接口的返回信息,此时需要进行接口关联,对前一个接口的响应结果进行提取,相应格式是json的话通过json提取器,进行获取,将获得的参数通过set an global varit设置成一个全局变量,然后切入到待测接口,进行一个依赖数据的传入{ {key}},然后发送请求
提取关联值的方式,json提取器,正则表达式提取器
没有接口文档如何进行接口测试
- 当没有接口文档时首先和开发进行沟通,自己都需要哪些接口,然后进行整理,整理完成后在找开发进行对齐,
- 通过抓包工具进行接口信息的获取,看参数的传入和相应结果的输出是否符合预期
自动化测试
- 测试框架
目前的自动化测试是由整个组集体合作完成的,我们的自动化测试依赖于pytest+requests+allure实现的,我们的自动化结构主要
case:测试case,用例的执行
conf:放置环境的配置文件
common:公共处理文件
逻辑层:common.function:对测试的业务代码进行封装,便于上游case的调用
data:放置测试数据
comm.check:放置断言脚本,对于每个case执行完成的结果进行断言
case的执行:在case执行过程中通过,首先通过common配置文件中的config.py文件进行环境信息的读取,写入到conf中的ini文件中,接下来是执行case,
执行起停脚本:进行虚拟环境的配置,通过pytest收集测试case,在收集过程中首先通过common配置文件中的gen_config.py文件进行环境信息的读取,写入到conf中的ini文件中,然后进行测试case的运行,在执行过程中最后将得到的测试数据通过allure报告的形式展示出来
接口自动化关联
将上一个测试case执行完成的测试数据,作为下一个测试case的入参,可以通过setattr()函数将这个变量设置为一个类属性,在下一个case中去调用
python
dict和set区别
list和set的区别
list和tuple区别
接口自动化测试:
我们主要采用的是python+pytest+request+allure进行接口的自动化测试
接口自动化测试主要分为关键字驱动+数据驱动+结构的分层来实现,
数据层主要用来放置测试数据
用例层:放置测试用例,
逻辑层:封装一些公共的方法
接口测试用例的设计:
接口测试用例的设计从两个方面来考虑:单接口测试用例的设计,接口关联的用例设计
1、默认参数不传参,必填参数填参,切存在常规值,设置一条测试用例
2、接口是否存在前置条件,及依赖,例如我们在做接口测试时,bcc挂载磁盘,bccid必须传入/最为常见的是获取登录后的token值
3、填写必填参数和非必填参数,且存在常规值,正向用例一条
4、每个必填参数都设置一个为空的参数,共计n条测试用例
5、参数之间是否存在关联关系
6、参数数据类型:设置正确,每个参数都设置一个与类型不符的参数共计n条逆向用例
7、参数的数据长度设置,每个参数都设置一个与其参数长度不符的用例,共计n条
8、根据业务逻辑进行参数的设置
接口测试都测试哪些
- 接口的协议,方法,请求数据,响应结果
接口的功能是否正常实现
响应结果是否正确,数据类型是否正确
传入参数的边界值,例如整数类型的参数限制为500,输入501测试 - 安全性测试:
用户信息和密码是否加密
返回数据是否存在敏感数据, - 错误和异常处理测试
传入错误参数,接口能正常相应,且按需返回相应结果
输入一场数据(空串,数据长度过长),接口能正常响应,且按需返回结果
多输入参数,少输入参数
输入错误数据类型,如post需要传入json,但实际上传入了form类型的数据,接口能正常处理,且按需返回
接口的响应时间
多次提交,重复提交
chromedriver工作原理
https://www.csdn.net/tags/NtTaYgysMjc3MzMtYmxvZwO0O0OO0O0O.html
关键字驱动:
面向对象编程思维,将代码基于业务场景进行合理的独立封装在调用封装好的函数来实现业务逻辑,一般而言,封装都会考虑到代码的复用性
对于操作行为的封装,业务流程的封装等等
po模型:
po模型是自动化测试框架中专用俩ui自动化的一种设计模型,po模型中是以页面对象为基础,不是以实现业务流程的运行
如何提高自动化执行的稳定性:
合理化的使用各种类型的等待,确保元素在页面正常显示
做好异常处理机制
多用例开发时减少用例间的耦合性,避免在多线程执行过程中因为执行顺序的不可控导致异常
独立化测试环境,避免元素定位失败,
接口自动化测试用例设计
单接口的用例设计:
接口关联用例设计
get和post:
定义在接口文档中
get与post的应用场景:获取数据时用get,提交信息时使用post
区别:
在常规的请求应用中:
get的参数跟随在url中,post的参数放在body中
get有长度限制(本质,url本身有限制),post没有长度限制
get不安全,post安全
get数据流可以被缓存,post数据不能被缓存
在浏览器中可能会存在get只发送一次请求,post发送两次请求
接口关联:
两个接口之间实现了数据上的联系,
在应用服务接口中,完成一个业务功能时,有时候一个接口可能不满足业务的流程逻辑,需要多个接口配合使用,
两个接口中产生了实际应用上的联系,调用a接口后,获取a接口的返回数据,然后将返回数据设置为全局变量的形式,在b接口中进行调用a接口的响应值
自动化的接口关联
1、通过文件的形式,将用户的信息存储到文件中,从文件中获取要用的参数,
2、方式二,通过设置全局变量的形式进行设置
http:
http协议是超文本传输协议和服务器之间交互数据,交互氛围请求和响应两部分
请求分为两部分:
http无状态:多个请求之间没有关联,相互独立
例如:登录,搜索,下单,支付,评论之间是相互独立的
cookie的作用,解决http协议多个请求之间无连接的场景
什么是cookie:
服务器产生的保存在客户端的一小段文本文件,格式是字符串,键值对
cookie有两类:
1、会话集cookie保存在内存中,当前浏览器关闭会自动消失
2、持久话cookie,保存在硬盘,当浏览器关闭不会自动消失,取决于到期时间
查看所有的cookie:在右上角的设置中
3、cookie鉴权原理:
第一步:客户端第一次去访问服务器时生成cookie,会通过相应头中的setcookie传输到客户端,保存到客户端,设置中cookie
第二步:客户端第2-N次访问时,那么在请求头里面就会自动带上客户端保存的cookie,然后和服务器的cookie进行比对实现鉴权
postman会自动管理cookie,请求时无需关联,并不是所有的工具和代码都会自动关联
jmeter又一个cookie管理器来实现自动管理
cookie的特点:
服务器生成保存在客户端,不安全
敏感信息数据保存在服务端,不重要的数据保存在客户端session诞生了
session实现鉴权及实战
宕客户端登陆服务器的时候,服务器生成sessionid并且保存在服务器,然后在登陆请求的相应头中将seesionid通过cookie传输到客户端
后面所有的请求都会在请求头cookie里面带上sessionid,然后和服务器的sessionid进行对比鉴权实现,关闭浏览器后,sessionid消失,每登录一次sessionid都不同
sessionid默认的生命周期是半小时,半小时之后每登录一下sessionid不一样
每个用户都会生成一个sessionid,保存在服务器,暂用能存,降低服务器的性能,会导致服务器的崩溃
token
一般是登陆之后生一个token或者通过一个单独的接口来生成token,然后保存在服务器的硬盘,一般保存在数据库
第二步:后面的所有请求都必须要带上token(请求头)然后和服务器的token进行对比鉴权
加密
对称加密,des,aes
双向加密:aes
单项加密:md5,sha1
自定义加密规则,签名
应用:
接口测试:自动管理
jmeter:http cookie管理器
自动化测试:
接口自动化:token鉴权
借口自动化:request get(cookie=cookie)
接口自动化(requests session)
web自动化:通过token实现万能验证码
不同点:
1、cookie存储在客户端,session存储在服务器中,token存储在服务器硬盘,session和token的安全性比token高
cookie,seession,token的区别:
http无状态连接:超文本协议,
各接口之间的请求相互独立,
鉴权机制:用户登陆成功后,通过鉴权机制来实现后续的操作
cookie:服务器在处理请求后,在响应头中会包含setcookies这个字段以键值对的形式发送给数据段,在后续的请求中,在请求头中带上cookie信息,从而实现持续访问
session:开辟临时会话,session-id,跟随set-cookies返回给客户端,客户端二次访问时携待sessionid和服务端进行比较,实现鉴权,降低服务端的性能,
接口自动化如何娇艳接口的正确性:
通过断言机制,来实现,根据接口文档中返回的数据类型,进行断言函数或者类的设置,从而完成自动化测试的断言机制
assert
个人的职业规划
有幸进入公司后:我会先花费一到两个月的时间去熟悉业务流程,同时做好本职工作,熟悉公司现有的自动化测试体系,提升自己,同时结合自己所学融入到公司的自动化流程中,提高测试效率,并不断的去深入学习自动化技术,然后再去学习测试开发相关的知识和性能相关的知识体系
为什么从上一家公司离职
接受加班吗?
如果是因为个人原因造成的无效加班,这是我的本质工作,如果说有上线,或者临时提测
会去加班,
自动化测试框架设计:
自动化测试框架设计中采用的是:关键字驱动+数据驱动的形式来实现
我们的自动化是通过python+request+allure+pytest实现的自动化测试,主要通过关键字驱动+数据驱动来实现,我们的自动化测试主要分为以下几个层:
base层:放置我们关键字驱动类,
case层:放置我们的测试用例
conf:放置我们的配置文件
common中放置一些api,和一些公共的使用类,便于后续调用,逻辑层
data,放置测试数据
log文件:输出我们的测试日志,
report:测试报告输出
common中的api.py文件,实现对于请求接口的封装,同时对于业务逻辑的封装,case层中的用例调用common中的业务逻辑方法
关键字参数封装:对于使用使用重复率较高的关键字进行封装,如get/post的请求,
业务逻辑的关键字封装,将业务流程,及其依赖的接口封装起来,在测试case中进行调用
fixture和conftest.py
confitest.py文件在调用时不需要引入,conftest.py文件可以有一个也可以有多个,也可以有不同层级的
fixture中默认的是function
conftest.py用来管理fixture
fixture的作用域,进行测试数据的前置和清理,可以设置不同的作用域,session/class/module/function等等
selenium工作原理:
chromewebdriver.exe,类似于中间服务器,通过读取底层的web配置,执行command命令去驱动浏览器
selenium作为http协议的服务,在后端以进程状态存在,执行代码过程中,通过webdriver的库,去调用底层封装好的comman指令,来实现对浏览的控制,如,发送文本,点击按钮等等
动态元素的定位
所谓动态元素,每次加载过程中,部分的元素属性都会发生改变的元素,
通过父类元素进行定位,对于动态元素采用xpath,css selector进行定位,
1、页面元素没有重复通过不变的值,来应对刷新页面后发生改变的元素
2、页面元素有重复时,通过元素的绝对路径实现定位
元素定位失败的原因是什么
1、是否添加有等待时间页面加载时间不够
2、是否增加了新的句柄,没有切换句柄则handles没有发生切换,页面切换
3、iframe嵌套,iframe切换
4、页面的元素是否有被遮挡,解决方案,通过optiosn将页面最大化
5、元素定位语句是否正确,元素属性是否动态变化的引起是失败(元素定位到的是否是第一个)findelement元素定位时,默认返回定位到的第一个元素
6、selenium4中多了一个页面加载策略,
1、normal,等待所有元素加载完成,在执行相关操作
2、egar:修改完成后,是否有足够的等待,
关键字驱动:
关键字驱动是自动化测试框架设计中最为核心的底层逻辑,面向对象的设计模式的体现,
将代码基于业务的实现场景进行合理的封装,然后在基于已经封装好的函数进行调用,来实现业务的执行,操作行为的封装,业务流程的封装,测试数据的封装
操作行为封装:所有的操作行为进行封装,send,click,local常态化应用进行封装
业务流程的封装:
PO模型–完成单一系统的测试覆盖率,降低手工执行的测试工作
针对ui的体系进行设计
po的设计基于页面,进行的设计,将复杂的业务流程切割成一个又一个的页面,在运行过程中,通过调用页面对象,来实现自动化
po设计模型的分层
base,基类
关键字驱动类封装
page:页面对象类
将各个页面进行封装,同时在该页面对象中封装该页面所有的方法,
页面对象模版:
url
登陆页面所要执行的操作,将其元素抽取出来
封装操作函数,登陆
case,测试累,test_*.py文件
data:测试数据
report:测试报告
提高selenium脚本的自动化执行效率
1、从已有的脚本做优化,减少强制等待的时间,想用隐式等待和显示等待,提升运行效率
2、减少不必要的凑走步骤,简化与业务逻辑无关的内容,
3、基于实际情况,在不影响测试前提下,配置不同的加载策略,提升执行的效率(selenium4及其以上的版本有效)
4、合理化的设计与封装测试结构,简化人为介入操作的过程,降低自动化代码的维护
提高自动化执行的稳定性
1、合理使用等待时间,确保元素在页面中正常显示
2、做好异常处理机制,
3、减少用例见的耦合度,避免在多线程运行中因为执行顺行导致的不可控
4、独立化测试环境,避免环境告饶几数据干扰
5、元素正确性的娇艳,尽量避免元素定位失败导致的测试终止
如何设计高质量的自动化脚本
1、较低代码见的耦合度,代码的冗余,
2、应用合理的设计模式,结合业务需求,自动化执行目的,被测试项目情况进行合理化的测试框架结构设计
3、独立化测试场景,将不同的业务流程封装到不同函数中或者类中
4、使用分层结构来设计,确保在实际运行过程中,测试数据,测试代码,逻辑代码的完整分离
5、对于业务流程,核心是从业务的正向流程去分析与设计用例
6、各个函数的封装上,要考虑各个函数使用的灵活性,复用性
之前公司的ui自动户测试框架是如何实现的,接口自动化测试框架重新梳理
ui的自动化测试框架都有什么,基于该框架使用的原因
采用的框架结构,
框架设计思路
框架的执行步骤
一个完整的请求过程是什么样子的
UI自动化下的断言如何展开
断言机制的介入点
多维度的状态展示出登录成功,流程执行完成后,系统回馈给用户放的结果,ui的断言,一般都是在流程结束后的断言
一般来说,一个流程断言一次
对于流程执行结果,进行断言
多环境运行测试用例
通过conf中的config.ini文件进行配置,来完成,然后通过读取配置项,来完成环境的切换
日志模块在自动化测试中的用途是什么
1、记录测试执行过程中的测试行为
2、对于测试代码在执行过程中产生的异常全部记录下来,
3、根据异常结果进行分析,实现对自动化测试框架的调优
4、定义日志模块的等级
持续集成在自动化测试中能起到什么样的用途
jenkins的功能,
能够通过自动化脚本的执行,来定义执行的内容
触发换环境的自动部署,自动化测试的行为,实现自动化测试
通过定时方式,指定运行自动化脚本,查看运行结果,并将生成的测试报告,发送给指定的人员
关键字驱动
关键字驱动:
关键字驱动shizidonghua测试框架中最为底层的设计逻辑,将代码基于业务的使用场景,进行合理化的封装,对于复用性代码较高的代码,操作行为,操作步骤,进行封装,测试数据进行封装,在测试case中进行调用
关键字驱动的代码结构的封装,通过以下方面来实现:
base层:将操作行为封装起来,
case层:测试用例层,将我们的test_*测试文件放置在里面,
log,日志的输出
data:测试数据层,
测试cse的执行:通过写一个main函数,执行测试数据的读取,然后调用我们的测试函数,最后将测试结果输出到数据层对应的实际结果中,来实现我们测试用例的准确性
pom设计模式
python+pytest+selenium+allure,采用selenium的原因是在运行过程中结合浏览器驱动,进行人为的模拟操作,pytest可以快速的对测试case进行收集我们的测试case,最后将我们的测试结果以json的格式输出,通过allure generate -o ./result ./report --clean进行测试报告的输出将测试报告展示成html的格式
pom测试框架:基于关键字驱动+结构分层+数据驱动的方式,这样设计代码的可维护性高,结构清晰,代码的阅读性高,便于后期新增功能的,这样就实现了代码的可维护性,可延展性,可阅读性
pom主要是以页面对象的模型进行进行设计的web自动化测试框架,
po的设计模式主要是针对于webui自动化测试的设计方法:
pom的分层结构如下:
base:放置测试的基类,最底层的,内部放置关键字驱动类,实现对于浏览器类型的封装,和操作行为的封装
package_conf:放置我们的页面对向,将每一个页面写成一个页面对象,对该页面上所实现的功能进行封装,页面层写定位元素的方法,和页面操作的方法,实现脚本的page和真实页面map起来,如:实现个人用户信息的修改,调用登陆页面->个人信息页面->个人信息修改页面
case:放置测试case,用于调用封装好的页面对象类,通过pytest.mark.paramries方法进行测试数据的传入
data:测试数据,采用yaml的方式存储测试数据
report:测试报告,
main.py文件中,main函数作为函数入口,然后通过pytest.main()去运行测试case,最终将测试过程中得到的测试结果输出到测试报告中
case执行:
接口自动化测试框架设计
我们做接口自动化时主要采用的是:pytest+request+ini+logging+configparser+yaml实现对于接口自动化测试基于这个框架完成的原因是,场内环境的升级,全组都使用的是pytets+requests,框架能够快速便捷的对于测试case进行收集, 便于后期的维护和管理
logging:进行日志的处理,统一输出测试日志,进行问题的定位和测试代码的优化工作,因为自动化测试代码需要应对多环境的问题,如测试环境,客户生产环境,不同环境下的域名是不一样的,因此我们通过configparser配置项从所属环境上环境的信息进行拉去,写入到ini文件中,在测试过程中进行调用,最后会生成一个测试报告,该份测试报告用pytesr+allure进行测试结结果的收集,最后将测试结果以html的格式呈现给用户,
框架的设计思路,基于关键字驱动+结构分层,代码可维护性高,结构清晰化后,代码阅读性高,对于后续增加新的功能方便,以满足可维护性,可阅读性,和可拓展性
测试case的运行逻辑
我们是基于pytest去编写我们的测试用例,测试用例会根据yaml中的数据类容传入到我们的测试case中,最终生成的结果由allure生成测试报告,logging对于测试case所产生的所有信息进行记录
base:关键字驱动,实现对于请求方法的封装
case:用例层
conf:配置文件,对于测试环境的信息收集
common:公共方法层
common中的config.py文件对于conf中环境配置信息进行一个写入操作
common.api,对于请求的api接口进行封装,其中包括logic层,open-api层,nova层接口的封装
common.function:对于业务逻辑的封装
common.check,对于测试断言的封装
data:测试数据层
保存yaml格式的数据文件
测试执行:
接口测试框架实现整理
我们的接口自动化采用的是python+pytest+ini+configparase+yaml+logging+allure进行的测试框架的搭建
python作为行业内目前测试人员最为主流的语言,pytest也是最为主流应用的框架,数据驱动是通过yaml来完成的,在执行过程中通过pytest.mark.paragramis的方式进行数据的传入操作,在整个的测试过程中我们采用logging的日志模块,对于测试日志进行记录,便于后续问题的分析和代码的优化工作,我们在测试过程中包含有线上生产环境,测试环境,不同环境上的数据信息和配置信息不同,我们通过固有的配置项进行管理,因此通过configparase完成配置项的记录,在完成测试后,我们需要测试报告的输出,采用的allure的测试报告形式,将测试过程中生成的测试数据,通过allure的命令生成测试报告
整个测试框架的设计是通过关键字驱动+数据驱动+结构分层来实现的,我们主要是针对于公司内部的某一个产品实现自动化测试框架的设计,
使用这样的设计方式可以确保代码的维护性高,阅读性强,对于后续兴增功能拓展性性强,这样就很好的满足了测试框架设计的可维护性,可阅读性,可拓展性
case的执行的逻辑:
我们是基于pytest来编写我们的测试用例,我们每个测试包都会有自己的起停脚本,测试过程中,通过命令行sh的方式去启动测试,测试用例在执行过程中,yaml会将读取到的测试数据,传入我们的测试用例中,最终生成的测试结果都会由allure的测试报告进行输出,测试过程中的产生的日志信息都会有logging模块进行记录
边栏推荐
- Error reporting on the first day of work (incomplete awvs unloading)
- 【Unity3D】无法正确获取RectTransform的属性值导致计算出错
- Judging right triangle in C language
- This monitoring system makes workers tremble: turnover intention and fishing can be monitored. After the dispute, the product page has 404
- Basic notes of illusory AI blueprint (10000 words)
- Ctrip starts mixed office. How can small and medium-sized enterprises achieve mixed office?
- Illusion -- Animation blueprint, state machine production, character walking, running and jumping action
- The primary market project galaxy will conduct public offering on coinlist on February 17
- 2837xd code generation module learning (3) -- IIC, ECAN, SCI, watchdog, ECAP modules
- go语言入门
猜你喜欢
Following nym, the new project Galaxy token announced by coinlist is gal
It is the most difficult to teach AI to play iron fist frame by frame. Now arcade game lovers have something
UE illusory engine programmed plant generator setup -- how to quickly generate large forests
Skywalking理论与实践
Tee command usage example
Sil/pil test of matlab code generation
Alibaba cloud Prometheus monitoring service
Network real-time video streaming based on OpenCV
【UE5】蓝图制作简单地雷教程
Junit4运行mvn test 测试套件升级方案
随机推荐
The primary market project galaxy will conduct public offering on coinlist on February 17
[ue5] blueprint making simple mine tutorial
Share a blog (water blog)
[leetcode] sword finger offer 53 - I. find the number I in the sorted array
Large neural networks may be beginning to realize: the chief scientist of openai leads to controversy, and everyone quarrels
Zlib download and use
Ue5 - AI pursuit (blueprint, behavior tree)
Junit5 supports suite methods
Blender模型导入ue、碰撞设置
Alibaba cloud Prometheus monitoring service
UE5——AI追逐(藍圖、行為樹)
【虚幻4】从U3D到UE4的转型之路
Is the C language too fat
Mobile mall app solution: how much is it to make an app? Detailed explanation of APP mall development content
Alibaba cloud SLS log service
MySQL index
2.14 is it Valentine's day or Valentine's day when the mainstream market continues to fluctuate and wait for changes?
Introduction et prévention des essais de pénétration
Bookmark collection management software suspension reading and data migration between knowledge base and browser bookmarks
Database -- acid of transaction -- introduction / explanation