您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

如何使用requests通过代码实现接口测试自动化?

时间:2021-07-23 09:42:52  来源:  作者:Atstudy网校

前言

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

技术实践:如何使用requests通过代码实现接口测试自动化?

 

requests

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

安装

pip install requests

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('请求成功!')

通过执行结果是成功的。

技术实践:如何使用requests通过代码实现接口测试自动化?

 

其中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)

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

技术实践:如何使用requests通过代码实现接口测试自动化?

 

json请求

import requests

url ="http://httpbin.org/post"

# 添加json数据

json = {

"username":"AnJing",

"password":"123456"

}

# 通过json方式添加数据

r =requests.post(url,json=json)

print(r.text)

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

技术实践:如何使用requests通过代码实现接口测试自动化?

 

请求HTTPS

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

技术实践:如何使用requests通过代码实现接口测试自动化?

 

对于这种问题,我们可以通过加入参数“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

技术实践:如何使用requests通过代码实现接口测试自动化?

 

登录后的cookies

技术实践:如何使用requests通过代码实现接口测试自动化?

 

通过使用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的形式进行访问本网站的其他地址一样是保持着登录的状态。

技术实践:如何使用requests通过代码实现接口测试自动化?

 

重定向

接口测试中也经常遇到重定向的问题,什么是重定向?就是通过各种方法将各种网络请求重新定个方向转到其它位置。在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。

技术实践:如何使用requests通过代码实现接口测试自动化?

 

总结

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



Tags:接口测试   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
requests一、简介使用 python 做自动化接口测试需要用代码发送 http 请求。requests 是 Python 语言里网络请求库中最好用的,没有之一。requests 库有完善详尽的中文版官方...【详细内容】
2021-12-01  Tags: 接口测试  点击:(14)  评论:(0)  加入收藏
前言接口测试是我们在测试工作中经常见到的,我们工作中常用到的接口工具有jmeter,postman,soupUI等工具,那么在通过代码做接口测试呢?或者通过代码的方式做接口自动化呢? requests...【详细内容】
2021-07-23  Tags: 接口测试  点击:(93)  评论:(0)  加入收藏
先来个小故事:一天,你的领导丢给你几十个接口,然后希望你输出报告。你:"exm?",改改改。于是你引入了unittest单元测试框架、HTMLTestRunner等等。正打算将各个测试用例分类重新规...【详细内容】
2020-11-04  Tags: 接口测试  点击:(113)  评论:(0)  加入收藏
对于自动化测试,原来谈这方面的内容比较少,但是现在我们做DevOps支撑平台的时候,在整个持续集成和交付的过程中,有一个重要的内容就是自动化测试。自动化测试的覆盖面相当大,其...【详细内容】
2020-10-30  Tags: 接口测试  点击:(104)  评论:(0)  加入收藏
什么是 API 测试?API 测试其实是一种用程序或工具来发送数据,同时验收系统的返回值的方法。这种测试更偏向于业务实现逻辑。常见的网络协议有 TCP、Http、webservice、socket...【详细内容】
2020-10-19  Tags: 接口测试  点击:(127)  评论:(0)  加入收藏
应用场景:在API的测试中,测试某些具体数据值,比如返回的结果是否是需求的类型,文件是否是符合且具备完整的数据结构。这些都是必须且很细致的测试工作。另外,组织、运行测试场景,...【详细内容】
2020-10-19  Tags: 接口测试  点击:(244)  评论:(0)  加入收藏
JMeter是Apache组织的开放源代码项目,能做接口测试、功能测试和性能测试。它能够对HTTP和FTP服务器进行压力和性能测试,也可以对数据库进行同样的测试(通过JDBC),还能以多种形式...【详细内容】
2020-09-09  Tags: 接口测试  点击:(70)  评论:(0)  加入收藏
一、登录态是什么?在接口测试领域,登录态就是指登录状态。1 登录态的作用作用:用来维持接口的登录状态在浏览器中,我们登录后,浏览器会自动把登录状态保存下来,所以不需要我们管...【详细内容】
2020-07-19  Tags: 接口测试  点击:(136)  评论:(0)  加入收藏
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要...【详细内容】
2020-06-18  Tags: 接口测试  点击:(52)  评论:(0)  加入收藏
接口测试中的接口到底是什么?先看一道题,请找出以下可以被成为接口的选项:◆ USB◆ 水龙头◆ 用户界面UI◆ 函数◆ https://www.baidu.com◆ https://api.github.com接口的英文...【详细内容】
2020-05-03  Tags: 接口测试  点击:(73)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条