8年测试经验之谈 —— 接口自动化测试requests

1.什么是requests?

requests是一个Python第三方库,处理URL资源特别方便

2.安装requests

pip3 install requests

如果遇到Permission denied安装失败,请加上sudo重试

3.使用requests

3.1get请求方法

3.1.1基本的get请求

import requestsresponse = requests.get('http://httpbin.org/get')
print(response.text)

3.1.2带参数的get请求

对于带参数的,传入一个dict作为params参数:

import requests
def loginGet():r=requests.get(url='http://47.95.142.233:8000/login/auth/',params={"name":"wuya","age":18})print('协议状态码',r.status_code)#获取到的是字典的数据类型print('返回字典的数据类型',r.json())#获取请求的地址信息print('获取请求地址的信息',r.url)#获取到的是字符串print('获取的是字符串的数据类型',r.text)#获取到的是bytest的数据类型print('获取到的是bytest的数据类型',r.content)#获取响应头print('响应头',r.headers)

备注:响应数据一般是r.text来获取,如果响应数据是json'格式,那么使用r.json()

查询电话号码归属地:

import requests
r=requests.get(url='http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo',params={"mobileCode":"15191084297","userId":""})print('协议状态码', r.status_code)
print('获取请求地址的信息', r.url)
print('响应头', r.headers)
print('获取的是字符串的数据类型',r.text)
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:632880530

3.2post请求方法

3.2.1json数据格式:

import json
def loginPost():r = requests.post(url='http://47.95.142.233:8000/login/auth/',json={"username":"15191084297","password":"123456"},headers={'content-type': 'application/json'})print(json.dumps(r.json(),ensure_ascii=False,indent=True))

 3.2.2表单的数据格式:

r=requests.post(url='http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo',data={"mobileCode":"15191084297","userId":""},headers={'content-type':'application/x-www-form-urlencoded'})print('获取的是字符串的数据类型',r.text)

json和data的区别:

什么时候使用json

当请求参数是JSON的时候使用json的参数当请求参数是json,但是要使用data的参数,那么请求参数要进行序列化的处理

什么时候使用data

当请求参数是表单的时候使用data当请求参数是JSON格式的时候,那么请求参数要进行序列化的处理

拉勾网实战:
 

r = requests.post(url='https://www.lagou.com/jobs/v2/positionAjax.json',data={'data': 'Iphu%2FZ6ba7xjPqUDKO03NaTge36Zu7CANc5xZfNf0Brv4y1pJEeEuKl1PTDANiyGvMDYzLyoZqP7pPX3T9vFbzaVfuiXlpLScGwoDEJ6YlgCeyA38q5TJ%2FeCp2OmMywUQalg1pLh5vpFJIazFh7A6ovCMqZFGFB2DmsZXn22k4LdQJhEnS8Y4rmCv6a15mFX'},headers={'content-type': 'application/x-www-form-urlencoded','Cookie': 'RECOMMEND_TIP=true; PRE_UTM=; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F; user_trace_token=20220119144853-8c70d9f2-7f4f-4097-ab6f-77a57190e796; LGUID=20220119144853-fa5d8ce2-6aa5-4fd0-9353-a266309a766c; privacyPolicyPopup=false; _ga=GA1.2.673573823.1642574934; _gid=GA1.2.1607293937.1642574935; LGSID=20220119144854-49e4e6e0-cb73-4e52-b471-58cefe6e79dc; PRE_HOST=cn.bing.com; PRE_SITE=https%3A%2F%2Fcn.bing.com%2F; sajssdk_2015_cross_new_user=1; WEBTJ-ID=20220119145841-17e712165122f0-02258ae20ef9a5-5e181655-1327104-17e71216513558; JSESSIONID=ABAAABAABEIABCI41426992A613A6F1F2FAAD0189C97FFD; sensorsdata2015session=%7B%7D; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1642574935,1642575522; index_location_city=%E5%85%A8%E5%9B%BD; X_HTTP_TOKEN=68221908d10068cd4255752461329f451998b7de45; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1642575525; TG-TRACK-CODE=index_search; LGRID=20220119145857-272d10f0-d02a-451c-b154-f0074a3fb737; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2217e711873e74c8-0e9dec4a6c3c5a-5e181655-1327104-17e711873e818b%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%2C%22%24os%22%3A%22Windows%22%2C%22%24browser%22%3A%22Chrome%22%2C%22%24browser_version%22%3A%2297.0.4692.71%22%7D%2C%22%24device_id%22%3A%2217e711873e74c8-0e9dec4a6c3c5a-5e181655-1327104-17e711873e818b%22%7D','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62','referer':'https://www.lagou.com/wn/jobs?labelWords=&fromSearch=true&suginput=&kd=%25E6%25B5%258B%25E8%25AF%2595%25E5%25BC%2580%25E5%258F%2591%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588'})
print('协议状态码:',r.status_code)
print('返回协议数据:',r.text)
print(json.dumps(r.json(),indent=True,ensure_ascii=False))

4.requests参数详解

headers

里面填写请求头的信息,请求头的信息都是字典的数据类型

cookies

在请求头里面需要带上服务端的响应头中返回来的set- cookie的值

51cto实战:

def login():r=requests.post(url='https://home.51cto.com/index?reback=https%3A%2F%2Fhome.51cto.com&iframe=0&is_go_to_user_set_mobile=1',data={"_csrf":"ZXk0VTBJaXENEEE5eCsjN1U9ZGZ0LwI7LBRjAQM7Dh1IDAAeagoZRw","LoginForm[username]":"15191084297","LoginForm[password]":"cy980716","show_qr":"0"},headers={'content-type':'application/x-www-form-urlencoded','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36','Referer': '//home.51cto.com/index','Cookie': 'www51cto=02B0203B122F2012E0EC7BAC6020A4C2pHub; _csrf=6a44440f3396ae1244c0004595444c2bc471690ec46ad7c1fa772eb23bb216daa%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22hiulHbJF0DP3DfkJImWT3rgl-u4KZCp6%22%3B%7D; _ourplusFirstTime=122-1-13-15-38-6; sajssdk_2015_cross_new_user=1; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2217e525f5627a34-0113622e3482c8-36657407-1296000-17e525f5628112a%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2217e525f5627a34-0113622e3482c8-36657407-1296000-17e525f5628112a%22%7D; Hm_lvt_110fc9b2e1cae4d110b7959ee4f27e3b=1642059408,1642084977; pub_cookietime=2592000; lastlogin=on; Hm_lpvt_110fc9b2e1cae4d110b7959ee4f27e3b=1642085620; Hm_lvt_844390da7774b6a92b34d40f8e16f5ac=1642085057,1642085464,1642085663,1642086193; callback_api_url=https%3A%2F%2Fhome.51cto.com%2Findex; pub_wechatopen=DgZDExYRBjVaYERiLmkgAWt0GV0kZWIHGhIBMTwLMWwlN0oVAxAPBVlec2I2aSVMR1ZESR9RfHkzalAMalZTB1ZdDQdTAwdVVz0DB1cLVgwCBQ1X; PHPSESSID=8gfk7kgeg4jjo1a6vkfk2vcc22; once_p=ce2eb9; _ourplusReturnCount=18; _ourplusReturnTime=122-1-13-23-12-4; login_from=home.51cto.com; reg_from=home.51cto.com; Hm_lpvt_844390da7774b6a92b34d40f8e16f5ac=1642086725'})print(r.status_code)print(r.text)print(r.cookies)# r.cookies简单理解就是拿到响应头里面的set-cookie返回给客户端的指,也就是sessionIDreturn r.cookiesdef profile():r=requests.get(url='https://edu.51cto.com/center/user/info/get-user-info',# 通过请求头里面的cookie把返回来的sessionID发送给服务端进行身份验证cookies=login())print(r.status_code)print(r.text)

files

文件上传的参数

auth

权限验证

import requests
from requests.auth import HTTPBasicAuth
api=requests.get(url='http://101.43.158.84:5000/v1/api/books',auth=HTTPBasicAuth(username='admin',password='admin'),timeout=180)print(api.status_code)
print(json.dumps(api.json(),ensure_ascii=False,indent=True))

timeout

主要指的是服务端响应数据很慢,但有时候很快,所以这个时候建议加tiaout,相当于隐性等待,还有一种就是当网络请求出现requests.exceptions.ConnectTimeout的错误时候,那么就意味着该参数需要上场了

import requests
from requests.auth import HTTPBasicAuth
api=requests.get(url='http://101.43.158.84:5000/v1/api/books',auth=HTTPBasicAuth(username='admin',password='admin'),timeout=180)print(api.status_code)
print(json.dumps(api.json(),ensure_ascii=False,indent=True))

verify

当你的代码没任何的问题,但是请求就是返回ssl 以及403的问题,那么就意味着需要设置verify的参数如返回错误:requests.exceptions.SSLError。那么就需要带上该参数

import requests
from requests.auth import HTTPBasicAuth
api=requests.get(url='http://101.43.158.84:5000/v1/api/books',auth=HTTPBasicAuth(username='admin',password='admin'),timeout=180,verify=False)
print(api.status_code)
print(json.dumps(api.json(),ensure_ascii=False,indent=True))

5.requests中动态参数解决

第一种写法:

imoport requests
import json
def login():dict1={"username":"15191084297","password":"123456"}r=requests.post(url='http://47.95.142.233:8000/login/auth/',data=json.dumps(dict1),headers={'content-type':'application/json'})return r.json()['token']def index():r=requests.get(url='http://47.95.142.233:8000/interface/index',headers={"Authorization":"JWT {0}".format(login())})print(r.text)assert r.json()['count']['api']==4

第二种写法:

imoport requests
import json
def login():dict1={"username":"15191084297","password":"123456"}r=requests.post(url='http://47.95.142.233:8000/login/auth/',data=json.dumps(dict1),headers={'content-type':'application/json'})return r.json()['token']def index():r=requests.get(url='http://47.95.142.233:8000/interface/index',headers={"Authorization":"JWT {token}".format(token=login())})print(r.text)assert r.json()['count']['api']==4

下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

 

资料获取方式 :

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/109015.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用CSS实现一个3D旋转效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 3D效果实现⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域…

python下载bilibili视频,下载合集,下载选集

一. 内容简介 bilibili视频下载,下载合集,下载选集 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 链接:https://pan.baidu.com/s/1tO8xSmaqqoTxHI9P_UkDBw?pwd1234 提取码:1234 三.主要流程 3.1 …

C语言-内存分布(STM32内存分析)

C/C内存分布 一、内存组成二、静态区域文本段 (Text / 只读区域 RO)已初始化读写数据段(RW data -- Initialized Data Segment)未初始化数据段(BSS -- Block Started by Symbol) 三、动态区域堆&#xff08…

【C++】list类的模拟实现

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、list类的模拟实现1.1 list的…

list(介绍与实现)

目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modififiers 1.2.6 list的迭代器失效 2. list的模拟实现 2.1 模拟实现list 2.2 list的反向迭代器 1.…

Spring详解

文章目录 一、引言1.1 原生web开发中存在哪些问题? 二、Spring框架2.1 概念2.2 访问与下载 三、Spring架构组成四、自定义工厂4.1 配置文件4.2 工厂类 五、构建Maven项目5.1 新建项目5.2 选择Maven目录5.3 GAV坐标 六、Spring环境搭建6.1 pom.xml中引入Spring常用依…

数学建模-模型详解(2)

微分模型 当谈到微分模型时,通常指的是使用微分方程来描述某个系统的动态行为。微分方程是描述变量之间变化率的数学方程。微分模型可以用于解决各种实际问题,例如物理学、工程学、生物学等领域。 微分模型可以分为两类:常微分方程和偏微分…

倒数 2 周|期待 2023 Google开发者大会

9 月 6-7 日,中国上海 前沿科技,新知同享 趣味体验,灵感齐聚 技术生态,多元共进 关注官网最新信息,敬请期待大会开幕 2023 Google 开发者大会官网 相信你一定记得,在今年 5 月的 Google I/O 大会上&am…

Leetcode-每日一题【剑指 Offer 35. 复杂链表的复制】

题目 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 示例 1: 输入:head [[7,null],[13,0],[11,4]…

分享2个u盘还原方法,轻松恢复u盘数据!

U盘,作为便捷的存储设备,经常用于传输和存储重要文件。然而,由于误操作、病毒感染或其他原因,U盘上的数据可能会丢失。在这种情况下,进行u盘还原成为救回丢失数据的关键一步。 本文将解释U盘还原的意义,并…

C# textBox1.Text=““与textBox1.Clear()的区别

一、区别 textbox.Text "" 和 textbox.Clear() 都可以用于清空文本框的内容,但它们之间有一些细微的区别。 textbox.Text "": 这种方式会将文本框的 Text 属性直接设置为空字符串。这样会立即清除文本框的内容,并将文本框显示为空…

openCV实战-系列教程2:阈值与平滑处理(图像阈值/图像平滑处理/高斯/中值滤波)、源码解读

OpenCV实战系列总目录 1、图像阈值 t图像阈值函数,就是需要判断一下像素值大于一个数应该怎么处理,小于一个数应该怎么处理 ret, dst cv2.threshold(src, thresh, maxval, type) 参数解析: src: 原始输入图,只…

MySQL—buffer pool

一、buffer pool的介绍 Buffer pool是什么 一个内存区域,为了提⾼数据库的性能,数据库操作数据的时候,把硬盘上的数据加载到buffer pool,不直接和硬盘打交道,操作的是 buffer pool的数据,数据库的增删改查…

Ubuntu【系统环境下】【编译安装OpenCV】【C++调用系统opencv库】

Ubuntu【系统环境下】【编译安装OpenCV】【C调用系统opencv库】 前言: 本人需要用C写代码,调用OpenCV库,且要求OpenCV版本号大于4.1.0 由于使用的是18.04的版本,所以apt安装OpenCV的版本始终是3.2.0,非常拉胯&#…

四层负载均衡的NAT模型与DR模型推导 | 京东物流技术团队

导读 本文首先讲述四层负载均衡技术的特点,然后通过提问的方式推导出四层负载均衡器的NAT模型和DR模型的工作原理。通过本文可以了解到四层负载均衡的技术特点、NAT模型和DR模型的工作原理、以及NAT模型和DR模型的优缺点。读者可以重点关注NAT模型到DR模型演进的原…

Python序列类型

序列(Sequence)是有顺序的数据列,Python 有三种基本序列类型:list, tuple 和 range 对象,序列(Sequence)是有顺序的数据列,二进制数据(bytes) 和 文本字符串&…

数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成

数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成 目录 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成。 生成对抗…

UnitTest笔记: 拓展库DDT的使用

DDT (Data-Drivers- Tests) 允许使用不同的测试数据运行同一个测试用例,展示为不同的测试用例。 第一步: pip安装 ddt 第二步: 创建test_baidu_ddt.py 1. 测试类要使用ddt 修饰 2. 不同形式的参数化: 列表,字典&a…

Mesa 23.2 开源图形栈现已可供下载

作为 Mesa 23 系列的第二个重要版本,Mesa 23.2 开源图形栈现已可供下载,它为 AMD GPU 的 RADV Vulkan 驱动程序带来了新功能,改进了 Linux 游戏,并新增了 Asahi 功能。 Mesa 23.2 的亮点包括 Asahi 上的 OpenGL 3.1 和 OpenGL ES …

Windows用户如何安装Cpolar

目录 概述 什么是cpolar? cpolar可以用在哪些场景? 1. 注册cpolar帐号 1.1 访问官网站点 2. 下载Windows版本cpolar客户端 2.1 下载并安装 2.2 安装完验证 3. token认证 3.1 将token值保存到默认的配置文件中 3.2 创建一个随机url隧道&#x…