接口自动化测试(一)_HTTP基础,requests库

接口自动化(一)~(三)request,pytest库练习源码:https://download.csdn.net/download/qq_38175040/20367536

首先需要了解HTTP的基础知识。我之前也做过相关的功课,写过关于HTTP协议的几篇博客:https://blog.csdn.net/qq_38175040/category_10218858.html

一.HTTP的基础知识

一个HTTP请求主要有三个部分组成:

  • 请求首行:请求的方法,要访问的资源,以及使用的HTTP版本
  • 请求头:附带使用服务器所需要的附加信息
  • 请求体:包含返回的数据,比如json等数据

请求首行:
在这里插入图片描述

请求头:
在这里插入图片描述
请求体:
在这里插入图片描述
响应头:
在这里插入图片描述

响应码:

  • 5xx:服务器错误,服务器不能实现的一种明显的无效请求
    501:收到服务器不支持实现的请求,如put请求,有些服务器不支持实现
    502:服务器作为网关或代理,为处理请求,访问下一个服务器,但该服务器返回了非法的应答
    503:服务器未能应答
    504:服务器超时
    505:服务器不支持HTTP请求的版本
  • 4xx:客户端错误,请求包含语法错误或者请求无法被实现
    400:请求出现语法错误
    401:未授权
    403:服务器拒绝执行
    404:页面或资源不存在
    405:请求对指定的资源不适用
  • 3xx:重定向,为完成请求,还需进一步执行动作
  • 2xx:请求成功
  • 1xx:收到请求,处理请求中

HTTP在面试中一个常见的面试题:在浏览器中输入url后会发生什么?
这个问题在我的HTTP协议里的第一篇提到了一小部分:https://blog.csdn.net/qq_38175040/article/details/107907513

  1. 首先服务器有自己的ip地址,但ip地址对人来说很难记,所以人会在浏览器里输入域名,然后经过DNS解析为ip,访问对应的服务器
  2. 与服务器发起三次握手
  3. 建立链接TCP链接,发起HTTP请求
  4. 服务器响应HTTP请求,返回响应报文
  5. 浏览器渲染展示页面
  6. 断开TCP链接,四次挥手

为什么要四次挥手?
在这里插入图片描述
关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,因为可能正在传输报文,要把这段传输结束

所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。

只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。

故需要四步挥手。

二.requests库

相关基础知识:https://blog.csdn.net/qq_38175040/article/details/114836043
安装好requests模块
在这里插入图片描述
新建一个项目,然后在项目下新建一个.py文件
在这里插入图片描述
发送get请求
get请求的常用知识
在这里插入图片描述

import requests

url = 'http://www.baidu.com'
#访问网址,返回一个response对象
res = requests.get(url)
print(res.text)

# get请求添加请求头
headers = {'token':'123','username':'Mercer'}
res = requests.get(url,headers=headers)
print(res)

# get请求 添加数据
data = {'username':'mercer','xx':'ssr'}
res = requests.get(url,params=data,headers=headers)
print(res.url)

发送post请求
post请求中发送表单数据(不能同时传表单和json

在这里插入图片描述
post请求发送json数据
在这里插入图片描述

在这里插入图片描述

# post请求 提交表单形式的数据
form_data = {'key_1':'value_1','key_2':'value_2'}
# 这是一个测试网站
url = 'http://httpbin.org/post'
res = requests.post(url,data=form_data)
print(res.text)

# post 请求传递json格式的数据
json_data = {'key_01':'value_01','key_02':'value_20'}
res = requests.post(url,json=json_data)
print(res)
print(res.text)

# 有种post请求类似 http://xxx.com/username=xxx
data = {'username':'mercer','xx':'ssr'}
res = requests.post(url,params = data)
print(res.text)
print(res.url)


贴一下post请求发送普通表单和json的区别:https://zhuanlan.zhihu.com/p/202978890

上传文件
在这里插入图片描述

响应
在这里插入图片描述

传递cookie
也是和前面一样,cookie以字典的形式保存
在这里插入图片描述
请求失败
在请求过程中可能会因为超时,域名无效,服务器故障等多种原因导致请求失败
在这里插入图片描述
在这里插入图片描述

request库的基础内容大致如上,贴一下demo.py的代码:

import requests

url = 'http://www.baidu.com'
#访问网址,返回一个response对象
res = requests.get(url)
print(res.text)

# get请求添加请求头
headers = {'token':'123','username':'Mercer'}
res = requests.get(url,headers=headers)
print(res)

# get请求 添加数据
data = {'username':'mercer','xx':'ssr'}
res = requests.get(url,params=data,headers=headers)
print(res.url)

# post请求 提交表单形式的数据
form_data = {'key_1':'value_1','key_2':'value_2'}
# 这是一个测试网站
url = 'http://httpbin.org/post'
res = requests.post(url,data=form_data)
print(res.text)

# post 请求传递json格式的数据
json_data = {'key_01':'value_01','key_02':'value_20'}
res = requests.post(url,json=json_data)
print(res)
print(res.text)

# 有种post请求类似 http://xxx.com/username=xxx
data = {'username':'mercer','xx':'ssr'}
res = requests.post(url,params = data)
print(res.text)
print(res.url)

# 上传文件
file = {'file':open('Files/a.txt','rb')}
res = requests.post(url,files = file)
print(res.text)
print(res.encoding)
# 以二进制的形式返回
print(res.content)
# 将返回结果解码为json
print(res.json())
print(res.status_code)
# 打印响应头
print(res.headers)

# 传递cookie
cookie = {'my_cookie':'test'}
res = requests.post(url,cookies = cookie )
print(res.text)

# 请求失败
url = 'http://www.djfia.com'
res = requests.get(url)
print(res.text)

url = 'http://www.baidu.com'
res = requests.get(url,timeout = 0.001)
print(res.text)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值