自动化接口测试平台搭建之路

背景

工具选择

架构设计及技术实现

  参数设计

  断言

  持续集成

  测试集编写

总结

 

 

背景

1.目前公司发展比较迅速,还处于不停堆业务阶段,所以迭代比较频繁,导致人工回归的成本越来越大

2.在有限的测试资源情况下,开发自测的需求占比不低,后端频繁发布容易心里没底

3.该平台主要使用用户是测试同学,编写接口用例不能有太多的代码量

4.自动化是为了提高测试的效率,需要考虑投入产出比,维护成本要低

 

Ps:好的自动化项目,一定是需要关注ROI的,这也是贯穿我们整个设计的核心思想

 

 

 

 

 

 

 

 

 

工具选型

java和python对比:就接口自动化而言,两者从成熟度来说差不多;和公司语言保持一致,有利于后期的白盒测试;组内成员会java的更多

TestNg和Junit对比:TestNG包含了JUnit4的核心功能外,更加灵活、方便;

Jenkins:轻量级、成熟的持续集成工具,插件多,基本上要用到的功能都已能支持

 

所以我们最终确定的方案是通过Java+TestNg+jenkins去实现

 

架构设计及技术实现

3.1、参数设计

首先,接口参数非常多,有些是只要环境一样,值全部都是同一个;有些参数是有时效性或者执行一次后就不能再被执行的;而大部分是每个接口甚至同一个接口都是不同的值,所以为了接口的低维护成本和编写成本,我这里把所有的接口分成了三大类,全局参数(接口协议、域名、环境、请求头参数等)和非全局参数(接口路径、接口入参、请求方式等)、动态参数

 

3.1.1 全局参数

这类参数我们基本都是放在配置文件里,这样只要改一个地方就可以,而不需要每个地方去改下,重点说一下环境这个参数,因为我们整个是通过jenkins去集成的,所以在jenkins上会去传不同的环境入参,其他所有的全局参数基本都依赖这个值,以下是我的实现方式

首先在在testNg.xml文件中,接收jenkins中传过来的参数

 

 

 

然后在BeforeTest中先去获取这个参数,如下:

@Parameters({ "env" })

@BeforeTest

public void getEnv(String environment) {

...

...

}

 

 

3.1.2 非全局参数

为了接口参数更方便的管理、编写和维护,所以我们采用数据分离的方式;另外我们在我们的持续集成方案中,需要支持多个环境,所以我们在设计上需要区分环境;每个应用部署完后,我们只希望跑对应的接口用例,而不是全部都跑一遍,所以我们需要区分应用。

 

 

 

 

3.1.3 动态参数

为了我们接口用例的可维护性,所以我们需要尽可能缩短维护的时间,那很多接口的参数是有时效性的,比如token;也有些参数是用过后就不能再继续用的,比如库存,那有两个方案,一个是每次执行前都恢复下数据,但这样可能太重了,不仅要恢复数据库,可能缓存这些也要考虑;所以我们用了第二个方案,就是动态参数化,从而保证不用频繁的修改。

主要涉及两个方法,一是从上个接口的响应值中提取指定的参数;二是在后面的接口去用这个参数

 

 

 

3.2、断言

断言是自动化测试的重要组成部分,也就是实际值和预期值的比较,我这边也简单给它分成了二大类,静态断言、动态断言

动态断言:期望值从数据库/redis/es中,查出来后再去和实际值比较,适用范围(经常变的重要字段,如库存等)

静态断言:把期望值设为固定值,也是最常见的,适用范围(接口返回状态、接口的json格式等)

这里说下,我们这边实现静态断言的方式,静态断言也有好几种,一是直接通过响应值中是否包含你预期值中的字符串,这种优点就是编写比较快,但是会有偏差;所以我们用的是在响应值中,通过jsonpath,把值提取出来后再去比较,但是往往我们的一次断言中,需要断言的肯定不止一个字段,所以我们会把这些都塞到数组中,最后直接拿预期值数组和实际值数组去比较,以下是我们execl中的截图

 

 

 

Ps:因为我们需要考虑到维护成本,所以我们在断言选择上需要做一些取舍

 

3.3、持续集成

我们期望是在某个应用发布后,能自动触发执行我们对应模块的测试集,并且当有执行失败用例时能实现钉钉告警、卡点,并且发送报告,以下是我们的设计流程图

 

 

 

Ps:之所以用jenkins就是,jenkins已经集成了非常多的成熟插件,而且可以通过get/post接口,远程去通过参数化去执行jenkins中的任务,包括发送邮件及钉钉告警,这样在我们整个框架搭建上,就节省了很多编写代码的成本,而只需要去关注接口自动化本身的脚本编写上

 

3.4、测试集编写

基于以上的背景,所以要求代码量要尽可能的少,这里主要用到TestNg中的@DataProvider和@test,通过@DataProvider从execl中读取对应的参数,然后通过@test去执行对应的测试集,以下是我们一个测试集所有的代码量

 

 

 

 

总结

好的自动化项目,一定是为了解放更多的人力,但如果投入和产出不成正比,那注定是没有意义的,整个项目也还有很多不足的地方或待优化的地方。目前正在组内推广中,期望在质量保障上能带来更多的收益

 

原文地址:https://www.cnblogs.com/liyunfeng111/p/14495817.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


基础环境、流程图1)流程图jenkinspipeline发布应用2)、jenkins上安装kubectl#主节点上查看kubectl位置[root@k8s01~]#whichkubectl/usr/bin/kubectl#将k8s节点的kubectl文件cp至jenkinsscp10.0.0.101:/usr/bin/kubectl.cp./kubectl/usr/local/bin/kubectl
本节是建立在流水线入门内容的基础上,而且,应当被当作一个参考。对于在实际示例中如何使用流水线语法的更多信息,请参阅本章在流水线插件的2.5版本中的使用Jenkinsfile部分,流水线支持两种离散的语法,具体如下对于每种的优缺点,参见语法比较。正如本章开始讨论的,流水线最
Linuxcentos7安装Jenkins(jenkins-2.227-1.1.noarch.rpm)时遇到问题:1.出现问题1:安装jenkins一直失败,提示Nosuchfileordirectory[helen@linuxprobeJenkins]$sudorpm-ivhjenkins-2.227-1.1.noarch.rpmPreparing...####################
作为一个拥有很多账号的当代美少女,忘记用户名密码什么的是再正常不过的事了。“忘记密码”这一功能给我真的带来了很大的福音啊。但是最近重新使用Jenkins时,看到需要输入用户名密码,顿时脑子一片空白。经过一系列的查找,终于解决了问题,害,只有把方法记下来才是王道,以后妈妈再
Jenkins、GitLab和Maven(Nexus)完成自动构建迈向持续集成持续集成,毋庸置疑的是这是两部分要求,一个是持续一个是集成,那么持续和集成到底表示了什么要求和含义呢?其中的集成比较容易理解就是指开发人员将自己开发的代码不断地交付给全部系统的代码,在Git仓的概念之下也就是不断地
 下载文档https://www.jenkins.io/zh/download/  Debian下载1.下载安装keyhttps://pkg.jenkins.io/debian-stable/jenkins.io.key  
流水线建设从Jenkins部署开始Jenkins是一个独立的开源自动化服务器,可以用来自动化,例如构建、测试和部署软件等各种任务,是一个实现CI(持续集成)的很好的工具。Jenkins可以通过本地系统包、Docker安装,甚至可以在安装Java运行时环境的机器上独立运行。JenkCI/CD的概念谈到持
原因:这种情况是SSHServer中的RemoteDirectory路径不存在。解决方法:重新输入目标服务器中存在的路径。      
什么是持续集成持续集成(Continuousintegration,简称CI)指的是,频繁地(一天多次)将代码集成到主干。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。通过持续集成,团
Tomcat安装:1.下载Tomcat包:http:/omcat.apache.org/并解压2.启动:双击bin\startup.bat文件浏览器访问:http://localhost:8080/3.Tomcat配置登录:打开confomcat-users.xml文件添加如下代码:<rolerolename="manager-gui"/><userusername="admin"password=&q
文章目录jenkinscron笔记简介H符号(hash的简写)别名例子jenkinscron笔记简介jenkinscron遵循普通cron的语法,略有不同,每行包含五个字段可以使用Tab和空行分割分钟小时日月周0-590-231-311-120-7(0和7都表示周日)可以使用以下操作符为一个字段指定多个值(按照
1.nginx的配置location/jenkinsno{indexindex.htmlindex.htm;proxy_passhttp://127.0.0.1:8081;proxy_connect_timeout3000s;proxy_send_timeout3000s;proxy_read_timeout3000s;prox
1、下载安装插件下载地址:http://files.jetbrains.org.cn/aliyun-oss.hpi在Jenkins中安装插件,请到ManageJenkins->Advanced->Upload,上传插件(.hpi文件)安装完毕后请重新启动Jenkins2、搜索安装jenkins插件安装3、安装完成以后配置阿里云oss账号oss这边设置:(账号的权限也要
首先将构建历史清除Jenkins构建历史删除与重置然后进入Jenkins服务器工作目录oot/.jenkinstar-czvfjobs.tarjobs 将jobs打包将job.tar文件复制到新Jenkins服务器相同目录下解压tar包 tar-zxvfjob.tar登录新JenkinsJenkins-系统管理-读取配置,只有点击了读取配置,原
一、动态生成Slave1.1、简介之前我们都是在物理机或者虚拟机上部署jenkins,但是这种部署方式会有一些难点,如下:主Master发生单点故障时,整个流程都不可用了每个Slave的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来非常不方便,维护起来也是
from jenkins import Jenkins# 判断job是否运行结束def build():    job = 'branch-deploy-wap'    params = {        'server_ip': '10.160.30.XXX',        'server_username': 'root',        'server_userpass&#
背景client端执行webUI自动化测试时依赖操作系统上安装了对应的浏览器,并且浏览器与驱动要进行版本的对应——而selenium是可以部署集群,通过远程的方式执行对应的自动化用例,方便高效。原理1、通过代码可知,自动化运行的主类接收了任务id,获取到任务信息后根据任务类型判断进行接口
背景工具选择架构设计及技术实现参数设计断言持续集成测试集编写总结  一、背景1.目前公司发展比较迅速,还处于不停堆业务阶段,所以迭代比较频繁,导致人工回归的成本越来越大2.在有限的测试资源情况下,开发自测的需求占比不低,后端频繁发布容易心里没底
本地pycharm打开项目,运行自动化项目下载项目代码,并用pycharm打开项目gitclonehttps://gitee.com/iread9527/iInterface_python.git进入iInterface_python目录下,cdiInterface_python使用pip3install-rrequirements.txt命令,安装python项目依赖的第三方库使
Jenkins邮件设置一、简介最近有朋友问Jenkins邮件设置的问题,想起来当时也是碰到不少坑,网上看了很多博客说的解决办法根本没有用。最后我解决了这个问题,在此记录一下,希望能够帮助到在网上搜了半天仍然徒劳无功的朋友们,我懂那种失败了一次又一次的感觉,希望能帮到大家。二、配置步