接口测试(http协议,get和post请求和响应)

article/2025/10/12 14:32:20

TCP/IP四层协议模型

  

HTTP协议

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网
络协议。是基于TCP/IP模型的应用层协议。 为什么叫超文本?不但可以传输文本数据,还可以传输音频、视频、超链接、图片等内容。
HTTP协议之URL组成
HTTP 由请求和响应构成,是一个标准的客户端服务器模型(B/S架构)。 HTTP 协议永远都是客户端发起请求,服务器回送响应
http的端口号是80,https的端口号是443.
(补充:socket协议是全双工协议,C/S架构。服务器和客户端都能发送请求)
HTTP请求过程
一次http操作称为一个事务。
1. 浏览器输入目标url地址,如https://www.baidu.com
2. dns域名解析:域名与ip映射
3. 建立tcp连接
4. 发送http request:请求信息
5. web服务器接收请求(指使用http协议传输资源提供服务)
6. 应用服务器处理业务逻辑(如tomcat,生成动态的http内容)
7. 关闭tcp连接:请求响应完成。如果浏览器在其头部信息中 加入了connection:keep-alive,则tcp连接将仍然保持打开状态
8. 浏览器:渲染响应页面
web服务器和应用服务器:
Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应 (response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片, 进行页面跳转(redirect)。相对而言比较简单。
应用服务器处理业务的逻辑。

HTTP协议的特性 

1. 无连接性(长连接性)
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并 收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。---用keep-alive保持连接。
2.无状态性
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么 状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们 发送响应数据回来。但是发送完后不会记录任何信息。 ---解决方式:session,cookie,token。
Cookie、Session和Token的作用和区别
1.Cookie:一个具体的文本文件,由服务器生成,但保存在客户端。在客户端第一次请求后,服务
器会下发一个装有客户信息的“小贴纸”,后续客户端请求服务器的时候,带上这个“小贴纸”, 服务器就知道客户端的信息了。
在这里插入图片描述

2. Session:服务器用于保存客户端信息的“一堆数据”,每个session会有一个session id,这个 id会被发送给客户端进行保存。session具有时效性,过期就失效了。

3. Token:服务器保存的session多了,资源有限的情况下必须做扩展。(类似于令牌)
  用户通过用户名和密码进行登陆校验。
  服务器验证,如果验证通过则返回一个服务器端签名的token 给客户端。
  客户端储存token,并且每次用于每次发送请求。
  服务端验证token并返回数据。
token

HTTP协议的请求类型
GET:从服务器端获取资源或数据
POST:向服务器端提交数据
OPTIONS,HEAD,DELETE,PUT,TRACE
GET和POST的区别:
GET请求一般用于向服务器请求获取一个资源,没有副作用(幂等),一 般会在客户端做缓存POST请求一般用于向服务器提交数据并让其去完成 一件事,所以这个操作是有副作用的,不会在客户端做缓存
GET请求发送数据的时候,一般会将请求参数放在url字符串中发送给服务器端,所以从安全性角度来看相对没有POST请求安全性高,所以GET请求 一般不会用于比较隐私数据的传输。而POST请求是将请求数据放在请求体body里面,所以一般用于表单数据、登录数据等数据的传输。
TCP3次握手和四次挥手?
TCP/IP协议是传输层的一个面向连接的安全可靠的传输协议,三次握手的机制是为了在客户端和服务端建立一个安全可靠的连接。
握手:

 挥手:

 HTTPS和HTTP的区别?

https就是http协议+ssl协议。https是安全的,http是不安全的。

http的默认端口号:80,https的默认端口号是443

请求和响应的组成部分
1.请求:请求行---url地址
请求头
请求体( 仅限POST请求)

请求头里面需要关注的点:

(1)URL地址:通过抓包直接看

(2)content-type:传递请求格式

(3)User-Agent User-agent 主要用作为表明当前请求是谁发送的。主要用于很多网站进行反
爬的时候,服务器会判断当前请求是否是浏览器发送的。
(4)Cookie :表明当前请求用户对应的身份或者是状态。
2.响应:响应行—响应码
              响应头
              响应体

 响应码:301表示永久重定向,302暂时重定向。

如何去写接口测试用例?

正向和反向以及业务逻辑上去考虑。

正向:填写正确的参数组合  p0

反向:功能异常(数据错误(非类型和长度错误),补充--已删除的用户名,登录失败);数据异常(传入参数为空,数据类型错误,数据长度错误);参数异常(多了参数,少了参数,没有参数)

业务逻辑:多个接口的组合的执行顺序,以及接口的依赖。

接口测试用例的编写包含的要素:

编号(ID),测试模块用例名称(标题,预期结果(输入内容组合),如:登陆成功(用户名和密码正确)),前置条件(依赖接口),请求url请求类型(post、get),请求头{字典格式},请求参数{字典格式},预期响应状态码预期返回数据{响应体},优先级

接口测试代码撰写:

请求的传参方式:

get请求传参方式:1.发送不带参数的get请求

# 发送不带参数的get请求
def func1():resp = requests.get('http://www.fanyunedu.com/mms/login.html')resp.encoding = 'utf8'print(resp.text)
2.1带参数传参---直接通过url地址传,后面加?传参
def func2():resp = requests.get('http://www.tencent.com:5000/general/search?kw=健力宝')print(resp.text)

2.2带参数传参----通过字典传,params=字典名
 params1 = {'kw': 'bmw'}resp = requests.get('http://www.tencent.com:5000/general/search', params=params1)print(resp.text)

post请求传参,需要关注请求头里面的content-type这个字段:

都以字典的格式组装;但是在自动化中传参后,报文会自动变为&连接,如username=wang&password=123456,这种格式,而json格式传参后,依旧保持字典格式。

1.如果 content-type 的值为 application/x-www-form-urlencoded 则说明 post 请求的参数是以普
通表单形式来进行提交。  参数名:data
def func3():data = {    # 参数组装的字典'username': 'admin','password': 'admin'}resp = requests.post('http://www.tencent.com/mms/Login/loginUser', data=data)print(resp.text)
2.如果 content-type 的值为 application/json 则说明 post 请求的参数是以 json 格式提交,参数名:json
 data = {'username': 'class94','password': '123456','age': 1,'phone': '15888888888'}resp = requests.post('http://www.tencent.com:5000/general/register_json', json=data)print(resp.text)

3.multipart/form-data,通常是用来上传文件,下面有上传file的代码介绍。

带上headers传参(应用场景)---headers传参一般是请求头里面的内容,比如content-type,cookie,user-agent……均可,以字典形式呈现,以headers传参。
1.利用headers绕过反爬虫---headers=”User -Agent“
def func4():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'}resp = requests.get('http://www.tencent.com:5000/', headers=headers)print(resp.text)
2.利用登陆后的cookie,绕过登录,骗服务器 ----headers=”cookie“
def func5():headers = {'Cookie': 'JSESSIONID=DD86F5991F9C6EFE19664D78B9FF9E02'}resp = requests.get('http://www.tencent.com/mms/Login/GetLoginName',headers=headers)print(resp.text)
用session维持会话状态(在接口测试中,凡是要使用登录来进行测试的接口,一律使用session对象来请求。)
def func6():sess = requests.Session()  # 创建一个session,用于在代码中保持会话状态data = {'username': 'admin','password': 'admin123'}sess.post('http://www.tencent.com/mms/Login/loginUser', data=data)resp = sess.get('http://www.tencent.com/mms/Login/GetLoginName')print(resp.text)

上传文件---只有文件参数(记得带open,rb---二进制)

def func7():files = {'file': open(r'demo.txt', 'rb')}resp = requests.post('http://www.tencent.com:5000/general/api/upload', files=files)print(resp.text)

上传文件--除了有文件参数外,还有其它参数(文件参数和其他参数都要传)。上传文件只能用post,下载文件只能用get。

def func8():# 先构造普通参数data = {'batchname': 'GB20220322'}# 构造文件参数files = {'batchfile': open(r'demo.txt', 'rb')}resp = requests.post('http://taobao/goods/upload', data=data, files=files)print(resp.text)

下载普通文件-- 和python中文件读写类似(只能用get),将响应的text写入新建的文件中

def func9():resp = requests.get('http://www.taobao.com:5000/general/api/download?file=1647914731.txt')# 下载普通的文本文件with open('result.txt', 'w') as f:f.write(resp.text)

下载图片--响应体的内容格式是content,(通常的响应体的内容格式是text和html)

def func9():resp = requests.get('http://taobao/lancome/image/logo.png')with open('lancome.png', 'wb') as f:f.write(resp.content)   # 不能使用resp.text
加密接口请求,要导入hashlib模块,加盐值
import hashlib
def func10():uid, name, password, salt = '4', 'admin', 'admin123', 'taue19BJIOz9n6W8'm = hashlib.md5()m.update(('{}-{}-{}-{}'.format(uid, name, password, salt)).encode('utf8'))sign = m.hexdigest()#完成加盐值加密,下面正常传请求参数就行data = {'uid': '4','sign': sign}resp = requests.post('http://www.tencent.com:5000/general/userinfo_sign', json=data)print(resp.text)

lxml库提取html页面源码的内容

import etree
def func12():sess = requests.Session()  # 创建一个session,用于在代码中保持会话状态data = {'username': 'admin','password': 'admin123'}sess.post('http://www.taobao.com/mms/Login/loginUser', data=data)resp = sess.get('http://www.taobao.com/mms/mms/index.html')resp.encoding = 'utf8'html = etree.HTML(resp.text)# result = html.xpath("//a[@href='javascript:logOff()']/text()")result = html.xpath("//a[@href='javascript:logOff()']/@href")print(result)

根据响应内容,来获取返回值,再根据返回值获得其他信息。

def func14():data = {'username': 'admin','password': 'admin123'}resp = requests.post('http://www.tencent.com:5000/general/login_token', data=data)  #先得到响应结果resp_json = resp.json()   # 只适合于响应对象的值是json的情况,如果返回值不是json,则会报错   #再从响应结果中得到响应的json的内容token = resp_json['data']   #再从json里获取tokenheaders = {'auth-token': token}resp = requests.get('http://www.tencent.com:5000/general/userinfo_token', headers=headers)  #带上token进入里面的网址,类似于cookieresp_json = resp.json()  #里面的网址的json值print(resp_json['data']['联系方式'])  #获取json里的data中的联系方式func14()


http://chatgpt.dhexx.cn/article/Thb832a4.shtml

相关文章

HTTP接口测试

目录 一、什么是HTTP 1、定义 2、HTTP工作架构 3、结构(取自菜鸟网站) 3.1 客户端请求消息 3.2 服务端请求消息 二、如何进行HTTP接口测试 三、HTTP常用请求方式 1、GET请求 1.1 不带参数的GET请求 1.2 带参数的GET请求 2、POST请求 2.1 …

CAD图纸如何从低版本转换成高版本

我今天在绘制CAD图纸的时候突然发现,换个电脑后绘制好的CAD图纸打不开了。之后分析才发现是之前绘图的时候,保存的CAD图纸版本过低。这就需要把CAD图纸从低版本转换成高版本。今天小编就在这里给大家演示一下。 1.在电脑浏览器里搜索 xun jie CAD&#…

免费在线转换,CAD转换成PDF

为了提高我们绘图工作的效率,经常需要转换CAD文件的版本格式,例如把CAD转换成PDF格式。有没有一种不需要安装转换软件就可以快速操作方法呢?今天小编给大家介绍一种行之有效的方法,在线CAD转换器就可以帮我们快速完成这一操作。 …

cad转换器高版本转低版本怎么转?

CAD图纸由于版本过高导致无法查看和传输,是CAD制图工作中的小伙伴们都会遇到的问题之一。这一问题虽然不是什么大问题,但是也非 常影响我们正常的制图工作,该如何解决呢?今天我们就一起讨论一下,cad转换器高版本转低版…

cad批量转换低版本如何实现?

在CAD制图工作中,我们可能会遇到一些比较麻烦的问题。其中就有CAD图纸由于版本过高导致无法打开查看的问题,而且有时候CAD图纸过多,若是每 一张单独查看也会很麻烦。这时候该如何解决呢?cad批量转换低版本如何实现?今天…

怎么把高版本的CAD文件转换成低版本的

我们在打开CAD文件的时候有经常出现打不开的现象,这时候软件就会提示CAD版本过高,这时候就需要将CAD文件转换低版本了,那么怎么把高版本的CAD文件转换成低版本的呢? 这里小编就用迅捷PDF在线转换器,教大家CAD版本转换。…

CAD版本转换怎么操作?几个步骤教会你

CAD是建筑设计行业经常使用的图纸文件,但是有些图纸的格式可能会因为版本太高或者太低而打不开。不知道小伙伴们遇到这种情况是不是也束手无策呢?其实我们只需要使用一些软件来转换CAD版本即可。那么小伙伴们知道CAD版本转换怎么操作吗?还不了…

CAD版本转换怎么操作?这些方法了解了吗

目前市场上有很多CAD版本。每个人的使用习惯和计算机配置都不一样。不同版本的CAD软件生成不同的CAD文件。虽然制作CAD文件的操作方法相似,但新旧版本存在兼容性问题。高版本的CAD软件可以看到低版本软件制作的设计图纸,但低版本工具看不到高版本工具制作…

cad在线转换低版本_资源分享/CAD版本转换器

我们收集你的掌上玩物,我们COPY YOU。 YOU知唔知 CAD转换器 ◎消息来源:网络资源平台 文件预览 使用说明 1.将高版本文件拖动到转换器界面中打开 2.文件——另存问——类型选择低版本CAD格式,保存后的低版本文件就可以直接使用低版本CAD打…

CAD怎么转换版本?两个办法解决

CAD怎么转换版本?CAD文件相信建筑设计等相关行业的小伙伴都不会陌生,经常跟它打交道。它本身有不少版本,有时候同事发来的文件版本和我们的软件版本不同导致不兼容,这时候要进行处理就会比较麻烦,有没有什么方法能快速…

CAD如何免费转换PDF格式

有的时候,我们需要将我们的CAD文件转出PDF格式的文件发给客户,以便客户打开查看,那么我们如何将CAD文件转换为PDF格式?今天和大家分享一种简单的操作方法,并且是免费试用的。 1,首先打开百度首页,用“Speedpdf”作为关…

高版本CAD如何降低版本?来看这种降低版本方法

CAD文件的版本过高,我们该如何将它降低呢?如果有的小伙伴工作是关于CAD绘图方面的,就会经常使用CAD编辑软件,有时候在打开CAD文件时,会发现文件打不开,原因可能是文件本身受到损害,还有可能就是…

CAD版本怎么转换?试试这种方法

相信很多从事CAD绘图的小伙伴们对CAD版本转换应该不陌生吧,对于CAD版本通常有两种问题,一是CAD高版本可以打开低版本的图纸,相反低版本不能打开高版本图纸;二是高版本图纸转换为低版本可以直接在工具中另存为文件,就可…

怎么把高版本CAD转换成低版本?CAD版本转换方法分享

某些情况下,较新的CAD软件版本可能不被较旧的CAD软件版本所支持。如果你需要与使用较旧版本CAD的人进行交流、共享或协作,将高版本CAD转换为低版本可以确保文件能够顺利打开和编辑。那么问题来了,怎么将高版本CAD转换成低版本呢?教…

cad高版本怎么转换成低版本?这个办法挺实用

CAD软件是工程师、建筑师和设计师等专业人员最常用的工具之一。随着时间的推移,CAD软件的版本也在不断更新。但是,有时候你可能会遇到需要将CAD高版本转换为低版本的情况,比如在与其他人员合作时,他们使用的CAD软件版本比你的低。…

CAD版本转换怎么转?简单几步帮你解决

从事CAD相关行业的小伙伴每天都会接触到很多CAD图纸文件,有些图纸的格式会因为版本太低或者太高导致文件打不开。需要使用CAD版本转换器来转换图纸的版本。有的刚接触这一行的小伙伴就不是很明白怎么转换了,那么CAD版本转换怎么转呢?下面就和…

cad哪个版本最好用?转换软件说明

cad哪个版本最好用?自上世纪问世以来,CAD早已作为制图工作的代表性工具,设计等相关领域的工作者们基本都离不开它。其发展到现在,更新迭代了很多版本,第一次使用可能不清楚哪一版更好用,个人比较推荐的是06…

CAD怎么转换版本?转换器轻松转换

在工程制图和设计过程中,不同的CAD版本可能会导致文件不兼容的问题。有时候,我们需要将CAD文件从一个版本转换为另一个版本,以便进行进一步编辑或与其他人共享文件。这时候,CAD转换器就是一个非常实用的工具,它能够帮助…

cad版本怎么在线转换?软件操作更高效

如果你需要将一个CAD文件从一个版本转换为另一个版本,但是你没有安装需要的CAD软件,你可以尝试在线CAD转换。以下是一些步骤来帮助你在线转换CAD文件。 一些可以在线转换CAD文件版本的工具包括 CAD转换器:支持在线一键转换, 多种…

CAD文件版本如何转换?分享两种版本转换方法

CAD文件的版本怎么转换呢?大家在处理CAD文件的时候肯定会遇到文件打不开的现象,出现这种状况很可能就是CAD文件的版本与软件不匹配,有一种很好的解决方法就是转换CAD文件的版本,该如何转换呢?今天教大家两个好用的转换…