好久没写博客了。、最近忙着工作以及新工作的事。、

看了下以前写的简单接口自动化,拿出来总结下,也算记录下学习成果

先来贴一下最后的结果,结果是写在原来的excel中

执行完毕后,会将结果写入到“状态”列;

执行通过的话,如果返回的json有message写入“response”列,如果执行失败,则会将返回的json也写入其中

前期准备:

在excel中依次填上接口、请求类型、需要传的数据、期望返回的状态码以及该接口的说明

代码如下,写的很简陋,甚至都没定义方法什么的,姑且称之为V0.1   后面学有所得再深入修改

#coding:utf-8
import requests
import json
import xlrd
import os
from xlutils.copy import copy excel = 'apidemo.xls' #定义存放用例的excel路径,当前路径下
data = xlrd.open_workbook(excel)
host = 'http://xxxxxxx/api'#测试服,这个自己写吧
headers = {'Accept-Version':'v2','content-type': 'application/json'} #定义headers result = [] #用来存放验证结果
responseValue = [] #存放返回的数据
table = data.sheet_by_index(0)
nrow = table.nrows #获取行数
for i in range(1,nrow): #循环获取每行中的数据
requestMethod = table.cell(i,2).value #方法,post、get、delete
url = host + table.cell(i,1).value #拼接url
payload = table.cell(i,3).value #定义要传的值
ex = table.cell(i,4).value #获取期望的返回值,目前是用status_code来判断
if requestMethod == 'get': #不同的方法发不同的请求
r = requests.get(url,headers = headers)
elif requestMethod == 'post':
r = requests.post(url,data = payload,headers = headers)
elif requestMethod == 'delete':
r = requests.delete(url,data = payload,headers = headers)
if r.status_code == ex: #如果和期望值一样,case通过
result.append('true')
if 'message' in r.json().keys(): #这个看情况而定吧,这边例如账号密码错误也是在message里的
responseValue.append(r.json()['message']) #将message先存入response
else:
responseValue.append('')
else:
result.append('false') #如果结果不对的话,如果有message就写,没有就全部写入
if 'message' in r.json().keys():
responseValue.append(r.json()['message'])
else:
responseValue.append(json.dumps(r.json(),ensure_ascii=False))
r.close()
print('共有%d个url,当第%d个执行完毕'%(nrow-1,i))
book = copy(data)
sheet1 = book.get_sheet(0) #copy原来的excel
for j in range(1,nrow):#将结果写入到对应的表格中 #将结果和response都写入到复制的工作表中
sheet1.write(j,5,result[j-1])
sheet1.write(j,6,responseValue[j-1])
os.remove(excel)
book.save(excel) #移除原来的excel,保存新的excel

代码中获取返回的message,要看实际情况,我这边是开发将错误都通过message返回,比如请求的数据不存在,请求注册的手机号已经注册过等等

代码中存在很多不足,比如没有捕获异常,如果有异常出现就完蛋了。、

另外只对返回的状态码进行了判断,感觉还有很多可以做的事,比如对返回的json的结构进行判断,对数据库进行查询,比如delete的请求,接口返回成功,但是不一定数据库真的已经删除了

还有之前用appium时用到的unittest和HTMLTestRunner,感觉都可以和这个一起使用;

如果那样的话,感觉可以定制case,针对每个接口的不同功能,做针对性的判断

增加下遇到的小问题:

1.对返回的json进行判断,json返回是中文时的问题

json.dumps(r.json(),ensure_ascii=False)

2.最后的excel报告的样式没有了

data = xlrd.open_workbook(excel,formatting_info=True)

Python+excel实现的简单接口自动化 V0.1的更多相关文章

  1. Python+Pytest+Allure+Git+Jenkins接口自动化框架

    Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...

  2. excel+requests管理测试用例接口自动化框架

    背景: 某项目有多个接口,之前使用的unittest框架来管理测试用例,将每个接口的用例封装成一个py文件,接口有数据或者字段变动后,需要去每个py文件中找出变动的接口测试用例,维护起来不方便,为了便 ...

  3. Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架

    整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport  多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...

  4. python requests简单接口自动化

    get方法 url:显而易见,就是接口的地址url啦 headers:定制请求头(headers),例如:content-type = application/x-www-form-urlencode ...

  5. Jmeter 5.1 从excel读取数据执行接口自动化

    思路:数据在excel文件中进行维护,然后转换成csv格式,jme中读取数据执行: 1.将接口各数据在excel文件中进行维护,然后存为csv格式,我的数据如下: 2.jmeter脚本,配置csv文件 ...

  6. python(pytest)+allure+jenkins 实现接口自动化的思路

    效果图镇楼: 上述各模块作用: python(pytest): 1:用于读测试用例(本次用例写在csv文件中) 2:环境配置相关 3:提取1中的测试数据,组成请求体 4:发送请求 5:获取结果 6:断 ...

  7. 简单的python http接口自动化脚本

    今天给大家分享一个简单的Python脚本,使用python进行http的接口测试,脚本很简单,逻辑是:读取excel写好的测试用例,然后根据excel中的用例内容进行调用,判断预期结果中的返回值是否和 ...

  8. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)

    可以参考 python+requests接口自动化完整项目设计源码(一)https://www.cnblogs.com/111testing/p/9612671.html 原文地址https://ww ...

  9. python接口自动化21-下载excel文件(Content-Type:octets/stream)

    前言 Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 抓下载接口 1.下载的场景如 ...

随机推荐

  1. SharePoint2013的头像显示和读取

      前言 有个时候SP的二次开发,需要用代码获取头像显示,如SP基于AD验证,AD有头像属性,做为头像数据来源(因为Exchange和lync的头像也来自AD),说道这里大家都知道有2种办法,一种从A ...

  2. 使用mac 终端利用alias设置快捷命令

    在终端中输入快捷命令可以提高工作效率,同时可以少记很多命令 如何做: 首先在~/目录下编辑 .bash_profile这个隐藏文件,如果你想直接双击此文件打开编辑的话请在终端输入 Mac 显示隐藏文件 ...

  3. iOS Apple Pay

    iOS 苹果支付 需要证书支持支付功能 targets 打开支付功能按钮 //ApplePay#import <PassKit/PassKit.h>                     ...

  4. iOS 单例传值遇见问题

    单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...

  5. iOS关于启动页自定义特殊处理

    平常开发中对于启动页可能会有一些特别的要求,比如在启动页加动画或加一些按键可以响应事件等,最近项目中要在启动页增加版本号,因为版本号是不断的改变,所以要动态实现把它加到启动页上:在XCode上面配置的 ...

  6. 【代码笔记】iOS-钢琴小游戏

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> //加入头文件 #import <AudioTool ...

  7. Android按键事件处理流程 -- KeyEvent

    刚接触Android开发的时候,对touch.key事件的处理总是一知半解,一会是Activity里的方法,一会是各种View 中的,自己始终不清楚到底哪个在先哪个在后,总之对整个处理流程没能很好的把 ...

  8. maven编译java代码报“非法字符: \65279 ”错误的解决方法

    前段时间开发一个项目,使用maven进行编译时报“非法字符: \65279 ”,但是眼睛看怎么都正确的,文件转成utf-8编码还是报错. 最后没办法,暴力解决了这个问,步骤如下 1.把文件内容复制出来 ...

  9. Photo Shop切图

    切图之前 哪些是需要切出来的? 修饰性的 (一般用在background属性) 图标.logo 有特殊效果的按钮  文字等 非纯色的背景 内容性的 (一般用在img标签) Banner.广告图片 文章 ...

  10. 软件开发与UML的关系

    今天,我们上<统一建模语言UML>.课上老师给我们讲解了软件开发与UML之间的关系:UML常用于建立软件系统的模型,适用于系统开发的不同阶段.UML的应用贯穿于系统开发的不同阶段.1.需求 ...