自动化测试与持续集成方案

目录

前言:

传统接口测试

接口测试自动化

接口自动化的持续集成


前言:

自动化测试和持续集成是软件开发过程中非常重要的环节。自动化测试可以提高测试效率和准确性,而持续集成则可以确保代码的稳定性和可靠性。

传统接口测试


不知道别人家的接口测试是怎么做的。这边是用 postman 这个 google 插件。测试人员按照接口开发人员的 wiki,设计测试用例,然后 post/get 一下。查看返回 json 的状态或者字段。


弱点是不便于管理 case 和不方便统计结果,执行要一个一个手工去点,效率低下。

接口测试自动化


我用 python 写了个脚本,将 case 写在 excel 里,然后读取 excel 来实现这个过程,并自动判断和统计结果,生成报告。
case 这么设计的。


脚本这么写的:

#encoding:utf-8import ConfigParser
import os
import xlrd
import re
import httplib
import urllib
from urlparse import urlparse
import json
import time
import unittest
import pdfcurrentdir=os.path.split(os.path.realpath(__file__))[0]
class test_class():def getexcel(self):casefile=currentdir + '/case.xls'if ((os.path.exists(casefile))==False):print "当前路径下没有case.xls,请检查!"data=xlrd.open_workbook(casefile)table = data.sheet_by_name('login')nrows = table.nrows #行数ncols = table.ncols #列数#colnames = table.row_values(1) #某一行数据for rownum in range(1,nrows):for col in range (3, ncols):value=table.cell(rownum,col).valueif (col==3):method=valueif (col==4):url=valuereturn table,nrows,ncolsdef getexceldetail(self,table,row,ncols):#rownum = table.row_values(row) #某一行数据for col in range (0, ncols):value=table.cell(row,col).valueif (col==0):caseid=valueprint caseidif (col==3):method=valueprint methodif (col==4):url=valuereturn method,url,caseiddef httpget(self,url):httpClient = Noneconn = urlparse(url)url=url.encode('utf-8')try:httpClient = httplib.HTTPConnection(conn.netloc, timeout=10)httpClient.request('GET', url)# response是HTTPResponse对象response = httpClient.getresponse()print responsed0=response.read()d0=d0.decode('unicode_escape')except Exception, e:print efinally:if httpClient:httpClient.close()return response.status,d0def httppost(self,url):httpClient = Noneconn = urlparse(url)url=url.encode('utf-8')try:header = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}httpClient = httplib.HTTPConnection(conn.netloc, timeout=30)httpClient.request("POST", url)response1 = httpClient.getresponse()d1=response1.read()d1=d1.decode('unicode_escape')except Exception, e:print efinally:if httpClient:httpClient.close()return response1.status,d1

代码太多了点,没写下。其实就是一个读 excel,一个 post,一个 get 的过程。
后面还有一个对 json 的解析过程。开始以为是一个字典就搞定了,后面发现有些{}里面嵌套了好几层。
最后用了个递归搞定。

#! /usr/bin/env python
#coding=utf-8
import urllib2
import jsonclass readjson():def read(self,obj,key):collect = list()for k in obj:v = obj[k]if isinstance(v,str) or isinstance(v,unicode):if key== ' ':collect.append({k:v})else:collect.append({str(key)+"."+k:v})elif isinstance(v,int):if key== ' ':collect.append({k:v})else:collect.append({str(key)+"."+k:v})elif isinstance(v,bool):if key== ' ':collect.append({k:v})else:collect.append({str(key)+"."+k:v})elif isinstance(v,dict):collect.extend(read(v,k))elif isinstance(v,list):collect.extend(readList(v,key))return collectdef readList(self,obj,key):collect = list()for index,item in enumerate(obj):for k in item:v = item[k]if isinstance(v,str) or isinstance(v,unicode):collect.append({key+"["+str(index)+"]"+"."+k:v})elif isinstance(v,int):collect.append({key+"["+str(index)+"]"+"."+k:v})elif isinstance(v,bool):collect.append({key+"["+str(index)+"]"+"."+k:v})elif isinstance(v,dict):collect.extend(read(v,key+"["+str(index)+"]"))elif isinstance(v,list):collect.extend(readList(v,key+"["+str(index)+"]"))return collect#ojt=test_data1#print read(ojt,' ')

最后是结果:


是用 python 写图表,生成 pdf.

from reportlab.graphics.shapes import Drawing  
from reportlab.graphics.charts.barcharts import VerticalBarChart  
from urllib import urlopen    
from reportlab.graphics.shapes import *    
from reportlab.graphics.charts.lineplots import LinePlot    
from reportlab.graphics.charts.textlabels import Label    
from reportlab.graphics import renderPDF  
class pdfreport():def createpdf(self,datas):drawing = Drawing(400, 200)#data = [(13, 5, 20),(14, 6, 21)]data=datasbc = VerticalBarChart()bc.x = 50bc.y = 50bc.height = 125bc.width = 300bc.data = databc.strokeColor = colors.blackbc.valueAxis.valueMin = 0bc.valueAxis.valueMax = 50bc.valueAxis.valueStep = 10bc.categoryAxis.labels.boxAnchor ='ne'bc.categoryAxis.labels.dx = 8bc.categoryAxis.labels.dy = -2bc.categoryAxis.labels.angle = 30bc.categoryAxis.categoryNames = ['Jan-99','Feb-99','Mar-99']#bc.categoryAxis.categoryNames =ytypedrawing.add(bc)drawing.add(String(250,150,"ss", fontSize=14,fillColor=colors.red))#drawing.add(String(250,150,des, fontSize=14,fillColor=colors.red))renderPDF.drawToFile(drawing,'report1.pdf','API')#renderPDF.drawToFile(drawing,'APIReport.pdf','API')datas=[(0,20),(0,25)]
f=pdfreport()
f.createpdf(datas)

接口自动化的持续集成


配置到 jenkins 上也很简单,这里就不过多描述。现在问题是,生成的报告是 pdf。Jenkins 里面不太好展现出来。

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等)

相信能使你更好的进步!

点击下方小卡片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21642.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据分析 - 基础入门之pandas篇①】- pandas介绍

文章目录 前言一、pandas介绍二、pandas优势2.1 强大的数据结构支撑2.2 优点 三、pandas学习路线结语相关导读 前言 一、pandas介绍 pandas 是 Python 的 核心数据分析支持库 ,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据…

【仲裁器】轮询仲裁round-robin,rr

起因:在多主单从的设计中,当多个源端同时发起传输请求时,需要仲裁器根据优先级来判断响应哪一个源端。轮询仲裁:各个源端优先级相同,当其同时发起请求时,依次进行响应。 电路图 代码 module rr_arb(input…

前端:运用html+css+js模仿京东上商品图片区域放大特效

前端:运用htmlcssjs模仿京东上商品图片区域放大特效 1. 前言2. 前端界面3. js实现鼠标移入效果4. 实现代码 1. 前言 最近在网页端浏览京东上的商品时,觉得上面的那张gif图片上实现的特效不错,于是自己打算使用htmlcssjs技术来实现一下上述特效效果&#…

【GitOps系列】K8s极简实战

文章目录 示例应用介绍部署应用到k8s 如何使用命名空间隔离团队及应用环境?如何为业务选择最适合的工作负载类型?如何解决服务发现问题?如何迁移应用配置?如何将集群的业务服务暴露外网访问?如何保障业务资源需求和自动…

ME GO小车

ME GO小车 ⚫ 体积小巧 ⚫ 集成多种传感器和执行器 ⚫ Mixly图形化编程 避障检测、自动巡线、灯光显示、 声音报警、自动测距、物联遥控等 ME GO小车——俯视图 ME GO小车——车底 ME GO CE 以上选自芯”向未来 元控智联挑战赛(小学组)赛事介绍资料二…

easy rule 学习记录

总体: 使用方面除了官网的wiki外,推荐阅读 作者:夜尽天明_ 链接:https://juejin.cn/post/7048917724126248967 来源:稀土掘金 非annotation 方式,执行不是jdk proxy模式annotation 方式,和ru…

家政小程序开发-H5+小程序

移动互联网的发展,微信小程序逐渐成为商家拓展线上业务的重要手段。家政服务作为日常生活中不可或缺的一部分,也开始尝试通过小程序来提高服务质量和效率。 下面是一篇关于家政小程序开发的H5小程序的文章,希望对您有所帮助。 家政服…

java并发编程 10:AQS

目录 什么是AQS原理 什么是AQS juc包的结构如下图: AQS就是AbstractQueuedSynchronizer,是个抽象类,实现了自己的一些方法。它是阻塞式锁和相关的同步器工具的框架。很多并发类都是基于它实现的,如:ReentrantLock、Co…

【计算机视觉】简述对EQ-Net的理解

最近又看了一些点云分割的文章,近两年点云分割的文章是真的少,不知道是不是点云分割算法接近了末端。这篇文章主要提出了一个基于查询方法的统一范式,它解决了一些不仅仅是点云分割的问题,还解决了三维点云分类和三维目标检测的问…

牧云·云原生安全平台v2.0.0正式上线,云上想不安全都难!

**前言:**牧云云原生安全平台是长亭牧云团队以开源社区为生态载体技术积累为驱动所打造的云原生安全平台。首创双模探针架构,可选用 Agentless/Agent 多种方案进行部署,覆盖制品、运行时、集群全流程安全,开箱即用、快速实施、成本…

设计模式——观察者模式

观察者模式(世界线的观测者) 定义 观察者模式(Observer Partern)也叫做发布/订阅模式(Publish/Subscribe),一种以监听为核心的设计模式。 定义对象间一种一对多的依赖关系,使得每…

UG\NX二次开发 获取对象的边界包容盒 UF_MODL_ask_bounding_box

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: 获取对象的边界包容盒 UF_MODL_ask_bounding_box,只能得到绝对坐标系下的边界包容盒,速度快,结果不精确。 效果: 代码: //UF_MODL_ask_bounding_box #include "me.hpp" #include &…