前言

之前介绍了接口测试中需要关注得测试点,现在我们来看看如何进行接口测试,现在接口测试工具有很多种,例如:postman,soapui,jemter等等,对于简单接口而言,或者我们只想调试一下,使用工具是非常便捷而且快速得,但是对于更复杂得场景,这些工具虽然也能实现,但是难度要比写代码更大,而且定制化受到工具得功能影响,会

遇到一些障碍,当然我们还要实现自动化等等,鉴于以上因素,我们还是要学会使用代码进行接口测试,便于维护与扩展,或者算是我们知识得补充把~

requests库是python用来发起http/https请求得第三方库,支持get,post,put,delete等,requests特点是简单便捷、功能丰富,能够满足日常测试需求,所以我们选取requests库进行接口测试

运行环境:

系统:mac os 10.13.5

python:3.6.4

requests:2.19.1

接口为自己编写得测试接口,测试请使用自己得接口

第一部分:安装

2.安装requests(linux和mac os可能会遇到权限问题,sudo安装即可)

pip install -U requests

3.验证

localhost:~ mac$ python3

Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)

[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import requests

>>>

没有报错说明python与requests环境都没问题

第二部分:基础部分

以一个简单的get接口为例

import requests #导入requests模块

response=requests.get("http://localhost:5000/hello")#对hello接口进行get请求,并获取响应信息

1.响应信息(response)解析

print(response.text)

print(response.content)

##输出

你好

b'\xe4\xbd\xa0\xe5\xa5\xbd'

response.text是以str得形式返回得响应信息

response.content是以bytes形式返回

实际使用中根据自己得情况进行选择

2.获取状态码

print(response.status_code)

##输出

200

3.获取headers信息

print(response.headers)

##输出

{'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '6', 'Server': 'Werkzeug/0.14.1 Python/3.6.4', 'Date': 'Sun, 24 Jun 2018 02:55:27 GMT'}

4.获取cookies信息

print(response.cookies)

##输出

注意:这里与其他部分稍有不同,返回cookies的信息为cookies对象,而不是像前面部分返回得是字符串或者字典,cookies解析部分在后面会进行单独说明

5.获取请求url

print(response.url)

###输出

http://localhost:5000/hello

6.获取反序列化后的得信息:

print(response.json())

###输出:

{'name': 'john'}

注意:只有在返回信息为json格式时才能使用,否则会报json异常

7.获取响应时间

print(response.elapsed)

print(response.elapsed.microseconds)

print(response.elapsed.seconds)

print(response.elapsed.total_seconds())

##输出

0:00:00.003773

3773

0

0.003773

第三部分:进阶部分

通常我们要想获取正确得响应信息需要传递一些参数,针对不同得请求,传参方式稍有不通,下面我们来看一下

这里我部署了一个get接口和一个post接口,功能都是讲获取得请求参数返回回来,以便我们查看效果

1.get请求传递参数

params={"name":"john","age":17}

response=requests.get("http://localhost:5000/get_params",params=params)

print(response.text)

print(response.url)

##输出

{"name": "john", "age": "17"}

http://localhost:5000/get_params?name=john&age=17

说明:

这里做了三件事,先定义一个参数字典p,然后将参数字典以params参数传递给get方法,最后将响应信息打印出来,从响应信息可以看到参数被正确得传递进去,requests帮我们把参数组合到了url里面

2.post请求传递参数

post传递参数和get有所不同,根据服务端取值方式进行不同方式得传递

如果是传递得json格式得参数

p={"name":"john","age":17}

response=requests.post("http://localhost:5000/post_params",json=p)

print(response.text)

###输出:

{"name": "john", "age": 17}

如果是以html中form得形式传递参数,

response=requests.post("http://localhost:5000/post_params",data=p)

print(response.text)

如果form传递得是json格式需要以下面得方式

import json

response=requests.post("http://localhost:5000/post_params",data=json.dumps(p))

print(response.text)

说明:

需要将字典行驶得参数转换为json格式,再进行传递

根据服务端得情况选中一种方式进行传递参数,通常情况下这三种情况可以满足测试需求

第四部分:高级部分

1.操作cookies

有时候由于服务端需要取得cookies信息来进行用户身份验证, 或者另外一些用户信息来进行逻辑处理,这时候我们在测试接口时需要手动获取cookies信息和添加cookies信息到请求中

先看设置cookies信息

注:我这里部署了一个set_cookies接口,将cookies信息作为响应信息返回

my_cookies={"name":"john"}

response=requests.get("http://localhost:5000/set_cookies",cookies=my_cookies)

print(response.text)

##输出

{"name": "john"}

说明:

这段代码先定义了一个cookies字典,然后通过get方法,以cookies参数传入,最后打印出响应信息,可以看到cookies被成功种入请求中

我们再说说如何获取cookies并解析cookies信息

注:这里我部署了一个get_cookies接口,将{"name":"john"}作为cookies置入响应中

response=requests.get("http://localhost:5000/get_cookies")

cookies=response.cookies

print(cookies["name"])

##输出:

john

说明:

获取cookies对象得信息,我们只需要像获取字段得value一样即可,可以看到我们成功获取到了john

2.headers

看完了cookies之后,header就一目了然了,但是我还是同样部署两个接口(一个set_headers,一个get_headers)

#设置headers

my_headers={"name":"john"}

response=requests.get("http://localhost:5000/set_headers",headers=my_headers)

print(response.text)

#获取headers

response=requests.get("http://localhost:5000/get_headers")

print(response.headers.get("name"))

##输出:

{"name": "john"}

john

3.session

session可以理解为一段对话,而这段对话会纪录这次会话中得一些内容和状态,当中断这段对话,这些信息与状态就丢失了session对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能。所以如果你向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升

使用方法

注:我这里部署两个接口,一个hello接口(用来演示使用全局cookies,将请求cookies返回),一个world接口(用来演示使用全局headers,将请求headers返回)

#设置headers

my_info={"name":"john"}

#创建全局session对象

my_session=requests.session()

#设置全局cookies信息

my_session.cookies.set("name","john")

#设置全局headers信息

my_session.headers.update(my_info)

#演示全局cookies使用

response=my_session.get("http://localhost:5000/hello")

print(response.text)

#演示全局headers使用

response=my_session.get("http://localhost:5000/world")

print(response.text)

##输出

{"name": "john"}

{"Host": "localhost:5000", "User-Agent": "python-requests/2.19.1", "Accept-Encoding": "gzip, deflate", "Accept": "*/*", "Connection": "keep-alive", "Name": "john", "Cookie": "name=john"}

4.设置timeout

通常接口都是为上游服务得,由于上游不能够长时间等待接口返回信息,都会设置一个超时时间,超过了这个时间,会将这个结果丢弃,如果我们要监控线上接口有没有超时情况,这时候我们发起请求的时候就需要设置一个超时时间,如果超过这个时间,就会抛出一个异常

response=requests.get("http://www.baidu.com",timeout=5)

说明:

将5这个超时时间以timeout参数传入,这里得单位是秒

如果要想将连接(connect)与读取(read)都进行设置,则需要传入一个元组,第一个元素为connect超时事件,第二个元素为read超时时间

response=requests.get("http://www.baidu.com",timeout=(1,2))

5.hook

太晚了,先睡觉,明天补上~~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

python requests库api_python利用requests库进行接口测试的方法详解相关推荐

  1. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

  2. python画图软件是哪个_Python实现画图软件功能方法详解

    Python实现画图软件功能方法详解,按钮,事件,绑定,快捷键,直线 Python实现画图软件功能方法详解 易采站长站,站长之家为您整理了Python实现画图软件功能方法详解的相关内容. 概述 虽然P ...

  3. python修改文件内容_Python批量修改文本文件内容的方法详解

    这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...

  4. python语言的格式框架_django框架模板语言使用方法详解

    本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...

  5. 怎么打开python shell_Python之使用adb shell命令启动应用的方法详解

    一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分 具有重复性时,后面又发 ...

  6. 合法的python变量名import_python 环境变量和import模块导入方法(详解)

    1.定义 模块:本质就是.py结尾的文件(逻辑上组织python代码)模块的本质就是实现一个功能 文件名就是模块名称 包: 一个有__init__.py的文件夹:用来存放模块文件 2.导入模块 imp ...

  7. python process 函数_Python Process创建进程的2种方法详解

    前面介绍了使用 os.fork() 函数实现多进程编程,该方法最明显的缺陷就是不适用于 Windows 系统.本节将介绍一种支持 Python 在 Windows 平台上创建新进程的方法. Pytho ...

  8. python对文件的处理_python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块 ...

  9. python创建双链表_Python双链表原理与实现方法详解

    本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...

  10. 基于python的贝叶斯分类器_Python实现朴素贝叶斯分类器的方法详解

    本文实例讲述了Python实现朴素贝叶斯分类器的方法.分享给大家供大家参考,具体如下: 贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先 ...

最新文章

  1. Android使用Glide加载Gif.解决Glide加载Gif非常慢问题
  2. Python实现多进程的4种方式
  3. 【树莓派】小空间树莓派镜像系统备份方法img镜像文件压缩方法
  4. mysql 布尔型盲注,SQL注入之布尔型注入(MySQL)
  5. bootcss echarts_数据可视化插件使用(Echarts)
  6. 三种方式让你轻松监控 EntityFramework 中的 sql 流转
  7. ElasticNet算法解析
  8. kafka传递文件_是否可以使用Kafka传输文件?
  9. 如何调试JavaScript代码
  10. .net快速开发平台,learun敏捷开发框架
  11. 是指因计算机网络不安全导致的风险,网络安全知识竞赛题库
  12. linux网卡驱动模块名称,Linux下根据模块名查看网卡驱动版本
  13. simulink简介
  14. java ipc pgsql_[转]PostgreSQL源码结构
  15. Android视频录制,保存图片,视频到本地后本地相册或者视频库里面没有的解决方案
  16. Flutter 新一代图形渲染器 Impeller
  17. 中兴力维喜获“中国智慧城市创新应用金奖”
  18. 困惑了很久的函数D3DXCreateTextureFromFileInMemoryEx
  19. 网约车和社交融合靠不靠谱?
  20. JAVA体育用品在线商城系统-springboot【数据库设计、源码、开题报告】

热门文章

  1. springboot 接口文档 请求 enum_Spring Boot集成SpringFox 3:生成Swagger接口文档
  2. do...while循环
  3. blade php代码,Laravel 5框架学习之Blade 简介
  4. 中等职业学校计算机专业定位,中等职业学校计算机专业教学探讨
  5. signature=14a3e4f784cf9004647ea52bac22e550,维族老年慢性阻塞性肺疾病患者合并肺动脉高压的临床研究...
  6. java app退出登录_java – 通过从一个Activity调用一个函数,将退出按钮添加到Android App...
  7. Pycharm回车之后不能换行或不能缩进的解决方法
  8. usb3.0驱动linux,dwc3 linux usb3.0 driver架构
  9. andrew ng 机器学习笔记_机器学习笔记
  10. android 打包 混淆配置_玩转代码混淆工具:ProGuard