目的:excel中维护接口用例数据,通过python中requests库进行读取用例,并把运行结果与excel中的预期结果对比,最后把执行情况写入到excel中去。

excel维护数据:

具体的接口名跟参数名根据你实际的测试的接口决定。我这边自己维护的excel列分别是编号,用例名称、请求方式、请求地址、请求参数、请求头、预期结果、实际结果、是否通过。

代码展示:

import xlrd
import xlwt
import requests
import json
from xlutils.copy import copy

def xls_open(filename):
workBook = xlrd.open_workbook(filename, formatting_info=True) # 1、打开文件
return workBook

def xls_getRow(sheet, row):
data = {}
data["method"] = sheet.cell_value(row, 2)
data["url"] = sheet.cell_value(row, 3)
data["param"] = sheet.cell_value(row, 4)
data["header"] = sheet.cell_value(row, 5)
data["expect"] = sheet.cell_value(row, 6)
return data

def xls_request(data):
if data['method'] == 'get':
result = requests.get(data['url'], data['param'])
elif data['method'] == 'post':
# headers = {"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"}
# headers = {"Content-Type": "application/json; charset=utf8"}
response = requests.post(data['url'], data=json.loads(data["param"]), headers=json.loads(data["header"]))
result = response.text
else:
print("Unknown method " + data["method"])

return result

def xls_set(sheet, row, col, value, red=False):
style = "font:colour_index red;"
if not red:
sheet.write(row, col, value)
else:
sheet.write(row, col, value, xlwt.easyxf(style))

def xls_save(book, filepath):
book.save(filepath)

def doSheet(brd, bwt, sheetIndex):
brd_sheet = brd.sheets()[sheetIndex] # 获取excel单页
bwt_sheet = bwt.get_sheet(sheetIndex)
count_row = brd_sheet.nrows # 获取行数
for i in range(1, count_row):
data = xls_getRow(brd_sheet, i)
result = xls_request(data)

if data["expect"] == result:
xls_set(bwt_sheet, i, 8, 'pass', False)
xls_set(bwt_sheet, i, 7, result)
else:
xls_set(bwt_sheet, i, 8, 'fail', True)
xls_set(bwt_sheet, i, 7, result)

if __name__ == '__main__':
brd = xls_open(r'test_interface.xls') # 打开文件
bwt = copy(brd) # copy一份一样的excel文件
doSheet(brd, bwt, 0) # 执行文件
xls_save(bwt, 'test_result.xls') # 保存文件

转载:https://www.jianshu.com/p/0c2d66c4a892
总结:首先感谢这个作者的分享,我实际在操作过程中发现,excel中若维护的header类型不同,则这代码整体是有问题的,这个代码只适合接口的请求头是一致的,大家需要注意的是从excel读取出的是参数,预期结果都是字符串类型,根据实际需要来进行转化字典。

简单实现python接口自动化(一)的更多相关文章

  1. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  2. python接口自动化28-requests-html爬虫框架

    前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...

  3. python接口自动化20-requests获取响应时间(elapsed)与超时(timeout)

    前言 requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的. 如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 关于reques ...

  4. python接口自动化6-重定向(Location)

    前言 某屌丝男A鼓起勇气向女神B打电话表白,女神B是个心机婊觉得屌丝男A是好人,不想直接拒绝于是设置呼叫转移给闺蜜C了,最终屌丝男A和女神闺蜜C表白成功了,这种场景其实就是重定向了. 一.重定向 1. ...

  5. python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  6. python接口自动化10-token登录

    前言 有些登录不是用cookie来验证的,是用token参数来判断是否登录. token传参有两种一种是放在请求头里,本质上是跟cookie是一样的,只是换个单词而已:另外一种是在url请求参数里,这 ...

  7. python接口自动化22-签名(signature)鉴权(authentication)之加密(HEX、MD5、HMAC-SHA256)

    前言 开放的接口为了避免被别人乱调用,浪费服务器资源,这就涉及到签名(Signature)加密了 API 使用签名方法(Signature)对接口进行鉴权(Authentication).每一次请求都 ...

  8. Python接口自动化——soap协议传参的类型是ns0类型的要创建工厂方法纪要

    1:在Python接口自动化中,对于soap协议的xml的请求我们可以使用Suds Client来实现,其soap协议传参的类型基本上是有2种: 第一种是传参,不需要再创建啥, 第二种就是ns0类型的 ...

  9. python接口自动化-Cookie_绕过验证码登录

    前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...

随机推荐

  1. JS DOM简介

    1. 概述 文档对象模型(Document Object Model,简称 DOM),是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口.W3C 已经定义了一系列的 DOM 接口 ...

  2. python基础练习题(题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制)

    day11 --------------------------------------------------------------- 实例018:复读机相加 题目 求s=a+aa+aaa+aaa ...

  3. JavaScript函数中的arguments对象

    ECMAScript标准中,每个函数都有一个特殊的内置对象arguments.arguments对象是一个类Array对象(object),用以保存函数接收到的实参副本. 一.内置特性 说它是一个内置 ...

  4. 3D 沙盒游戏之人物的点击行走移动

    前言 在 3D 游戏中,都会有一个主人公.我们可以通过点击游戏中的其他位置,使游戏主人公向点击处移动. 那当我们想要实现一个"点击地面,人物移动到点击处"的功能,需要什么前置条件, ...

  5. 攻防世界-MISC:SimpleRAR

    这是攻防世界新手练习区的第十题,题目如下: 点击下载附件1,是一个RAR文件,解压一下,得到flag.txt文件,激动的点进去看一下 好吧,就知道没有这么简单,用010editor打开这个RAR文件, ...

  6. 推荐三个好用的TamperMonkey洛谷插件

    Part 1: TamperMonkey 插件 Part 1.1 什么是 Tampermonkey 在我们学习的过程中,往往想要更多功能,这时候可以使用 TamperMonkey 插件进行美化 官网介 ...

  7. Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析

    Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...

  8. Java 线程常用操作

    继Java线程生命周期继续学习Java线程其他常用操作 线程的常用操作 设置线程名字:setName() 获取线程名称:getName() 线程唯一Id:getId() // 自定义线程名称 Stri ...

  9. 【WPF】WPF开发用户控件、用户控件属性依赖DependencyProperty实现双向绑定、以及自定义实现Command双向绑定功能演示

    前言: Wpf开发过程中,最经常使用的功能之一,就是用户控件(UserControl)了.用户控件可以用于开发用户自己的控件进行使用,甚至可以用于打造一套属于自己的UI框架.依赖属性(Dependen ...

  10. 标注工具doccano导出数据为空的解决办法

    地址:https://github.com/taishan1994/doccano_export doccano_export 使用doccano标注工具同时导出实体和关系数据为空的解决办法.docc ...