• 12
  • 12
分享

  前言

  接口测试是我们在测试工作中经常见到的,我们工作中常用到的接口工具有jmeter,postman,soupUI等工具,那么在通过代码做接口测试呢?或者通过代码的方式做接口自动化呢?

  requests

  requests属于python的第三方库,通常用来发送http和https的请求,既然能向http和https发送请求,那么就能来做接口测试。

  安装

pip install requests

  官方文档

  https://requests.readthedocs.io/en/master/

  requests使用方法

  了解requests是如何安装的了,也知道了requests的安装方法了,那么接下来就开始进行实际操作了。

  get请求

  都知道https请求方式有很多种,如何通过requests来发送get请求呢?这里安静通过模仿百度搜索内容进行发送请求。

  其中get方法中存在3个参数:url和params,其中url表示我们请求的地址,params表示请求参数(get方式的请求存在url地址中),headers表示请求头信息内容。

import requests
url = 'http://www.baidu.com/s'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
}
params = {
    "wd": "测试-安静"
}
r = requests.get(url=url, params=params,headers=headers)
print(r)
print(r.url)
if '测试-安静' in r.content.decode('utf-8'):
    print('请求成功!')

  通过执行结果是成功的。

1-1.png

  其中requests的返回内容还有很多种,上面介绍的url,和content只是其中两种。

r.status_code     #响应状态码
r.content           #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.headers          # 请求头信息
r.json()             # Requests中SON
r.url                  # 获取url
r.encoding         # 编码格式
r.cookies           # 获取cookie
r.text               #字符串方式的响应体

  post请求

  post请求和get请求类似。post的参数主要有url、data(json)、headers。

  · url:请求接口地址

  · data:post请求参数类型

  · json:post请求参数类型

  · headers:请求头信息

  这里安静通过请求查询天气的接口来模拟post请求。

  data请求

import requests
# 登录请求地址
url = 'http://apis.juhe.cn/simpleWeather/query'
# 请求头
headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
}
# body数据
data = {
        'city': "上海",   # 账号
        "key": "331eab8f3481f37868378fcdc76cb7cd",  # 密码
}
# 发送请求
r = requests.post(url, headers=headers, data=data)
print(r.text)

  通过执行发现,已经请求成功,并返回了响应结果。

1-2.png

  json请求

import requests
url ="http://httpbin.org/post"
# 添加json数据
json = {
    "username":"AnJing",
    "password":"123456"
}
# 通过json方式添加数据
r =requests.post(url,json=json)
print(r.text)

  通过执行结果可以看出我们请求的接口类型。

1-3.png

  请求HTTPS

  现在的网站都是HTTPS的了,所谓的HTTPS就是加密过的网站,在原有的HTTP的基础上加上了SSL。HTTPS的请求基本上都是属于SSL加密的,那么对于这种HTTPS的请求,如果我们通过requests的请求进行访问,会报一个requests.exceptions.SSLError的错误。

1-4.png

  对于这种问题,我们可以通过加入参数“verify=False”,requests请求时,verify默认为True,当设置False时,requests请求会进行忽略SSL,从而进行访问HTTPS请求。

import requests
url ="https://www.51testing.org/htm/brandpc/PZ.html"
r = requests.get(url, verify=False)
print(r.text)

  通过加入参数后,在去执行的时候就不会报SSLerror的错误了。

  session

  关于session相信大家都不陌生,他和cookies一样使用来表示用户的登录的一种信息,cookies通常保存在客户端的,session保存在服务端上。其中session可以相当于一个虚拟的浏览器,用来保持登录的状态。requests中有单独方法  requests.session()  的方法用来保存登录状态。当然requests中有关于对cookies的登录,我们可以通过cookies加入到请求中,然后用来模拟登录场景。然后在去请求其他页面,可以看看到底我们的会话有没有保存成功。这里通过模拟博客园的场景进行来操作cookies登录。

  首先通过Fiddler进行抓取登录前和登录后的cookies值来判断博客园的登录到底是通过什么进行来登录的。

  登录前的cookies

1-5.png

  登录后的cookies

1-6.png

  通过使用fiddler抓取,我们已经招到了登录的cookies内容,然后通过requests中的cookies进行来添加。具体代码:

# coding:utf-8
import requests
import urllib3
urllib3.disable_warnings()
s = requests.session()
s.verify = False  
url = 'https://passport.cnblogs.com/user/signin'
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
}
r = s.get(url,headers=headers)
cooks = {
    ".Cnblogs.AspNetCore.Cookies":"这里写入抓取到的cookies值",
    ".CNBlogsCookie":"抓取到的cookies值"
}
c = requests.cookies.RequestsCookieJar()
# 登陆有效的cookies
c.set(".CNBlogsCookie", cooks[".CNBlogsCookie"]) 
c.set(".Cnblogs.AspNetCore.Cookies", cooks[".Cnblogs.AspNetCore.Cookies"])
# 将cookies值全部添加到session中
s.cookies.update(c)
# 访问后台地址,确定是否登录成功
url1 = "https://i.cnblogs.com/posts/edit"
r1 = s.get(url1)
result = r1.content.decode('utf-8')
if "博客后台 - 博客园" in result:
    print("登录成功!")

  通过执行发现,我们已经完成了登录后,并通过session的形式进行访问本网站的其他地址一样是保持着登录的状态。

1-7.png

  重定向

  接口测试中也经常遇到重定向的问题,什么是重定向?就是通过各种方法将各种网络请求重新定个方向转到其它位置。在requests中也有这对重定向的操作allow_redirects其中参数默认是True就是允许重定向,当我们请求的时候,将这个参数设置成False,就能不让其进行重定向。

# coding:utf-8
import requests
url = 'http://github.com'
# 重定向为False
r = requests.get(url, allow_redirects=False)
print('拒绝重定向请求的状态码:%s'%(r.status_code))
print('拒绝重定向请求地址:%s'%(r.url))
# 重定向为True(默认为True)
r2 = requests.get(url)
print('允许重定向请求的状态码:%s'%(r2.status_code))
print('允许重定向请求地址:%s'%(r2.url))

  通过执行发现,我们的参数已经设置成功了。在拒绝重定向的时候请求的状态为301,允许重定向的时候为200。

1-8.png

  总结

  安静简单的介绍了requests中的一些常用方法,这些方法可以帮助我们通过python+requests进行编写关于接口测试的方便的代码。等熟练使用requests后可以进行尝试编写自动化测试代码进行辅助日常测试工作。


作者:测试安静   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 读者提问:『阿常你好,常见的 BUG 类型有哪几种呀 ?』阿常回答:常见的 BUG 包含以下十种类型:1、业务逻辑主要的业务流程走不通或出现错误,比如新增保存不成功。2、功能操作一些功能按钮无法进行操作,点击按钮没反应。3、功能优化功能操作不方便、不合理的地方需要优化。4、交互逻辑分为界面交互和功能交互:界面交互指的是页面的跳转;功能交互指的是通过和程序交谈(输入数据等操作)来控制程序,让程序得到你要的成果,常用的交互功能有启用聊天功能、网站上添加留言功能、消息通知功能和自主服务功能等。5、数据问题基础数据不正确、数据未同步。6、条件限制问题1)输入框字符个数、长度和类型限制。&nb...
            0 0 4444
            分享
          •   软件测试在职业发展上,可以概括分为“管理”和“技术”两大类。另外,软件测试还可以在质量领域发展。  1. 软件测试在管理上的发展  软件测试管理是大家比较熟悉的软件测试职业发展路线之一,比较流行的职位包括测试组长、测试经理、测试代表、测试主管、测试总监、测试部长等。不同的公司中相同职位的工作范围可能略有不同,按照管理级别的高低,大致又可分为以下三级。  · 初级软件测试管理者:测试组长  一般由有两年左右工作经验的测试工程师担当。可能会管理会管理2~5名软件测试工程师。一般来说,测试组长不会负责整个产品,只是负责其中一个或多个特性。  测试组长并不是完全的管理者。从事的管理工作大多仅集中在...
            0 0 659
            分享
          • 测试用例示例笔试题:你用到的测试方法/测试策略有哪些?等价类划分边界值因果图场景法正交表确定边界值的方法()确定边界情况(输入或输出等价类的边界)选取正好等于、刚刚大于或刚刚小于边界值作为测试数据概念:因果图法比较适合输入条件比较多的情况,测试所有的输入条件的排列组合。所谓的原因就是输入,所谓的结果就是输出。因果图基本图形符号恒等:若原因出现,则结果出现;若原因不出现,则结果不出现。非(~):若原因出现,则结果不出现;若原因不出现,则结果出现。或(∨):若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现。与(∧):若几个原因都出现,结果才出现;若其中有一个原因不出现,则结果不...
            16 15 2565
            分享
          •   测试用例的设计方法  等价类  因材施教的例子:  原则上讲,老师都应该根据每个学生的学习情况制定相应符合的学习方案,但是实际上学生太多,老师管不过来,只能讲学生分为三六九等,优等生强调知识面的扩展和综合能力的提升,中等生强调夯实基础,查缺补漏,差等生强调优先掌握重点,暂时逃过难点.......  思路:输入的集合是无穷的,不能全部都覆盖到。  等价类:依据需求将输入划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的整个等价类测试通过,这样就可以通过较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。  弊端:等价类只考虑输入域的分类,没有考...
            14 15 4562
            分享
          • 油猴脚本管理器tampermonkey是安装在谷歌浏览器上的一个插件,它可以运行一些用户自定义的脚本。这样在访问不同页面时,如果有可用的脚本插件就会自动提示,并且产生作用。如下:同时他本身也提供了很多用户贡献的脚本以供下载(比较稳定的网站是greasyfork),当然git上面也有很多大神上传了自己写的脚本,观看这些脚本,我们可以学习别人写代码的逻辑,最最便利的是可以直接下载脚本使用,节省了许多浏览器上需要额外做的步骤。简单截图几个下载量比较高的,比较受欢迎的脚本:常见的脚本,比如:免登录操作网页,复制文本,下载提速,自动填充文本框等。介绍了这么多,那这个小插件对于我们测试有哪些帮助呢?其实这...
            1 1 9963
            分享
      • 51testing软件测试圈微信