这篇文章将为大家详细讲解有关python中的帖子有什么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
在日常的接口测试工作中,模拟接口请求通常有两种方法,利用工具来模拟,比如提琴手,邮递员,海报,soapUI等;
利用代码来模拟,使用到一些网络模块,比如HttpClient,或者请求等。
提琴手是一个简单的http协议调试代理工具,它界面友好,易于操作,是调试网络,抓取请求的利器之一。
请求包是趁着目前如火如荼的爬虫风潮而流行起来的python的第三方包,使用简单,对于不需要对网络底层模块有太多了解又想实现接口测试的测试人员来说简直不要太友好。
在接口测试中,接口通常是得到请求或者帖子请求。以下是对接口测试中常见的四种帖子请求数据方式进行一个详细的讲解:
<强>文章请求主体详解强>
一个正常的帖子请求主要包括请求行,请求头,请求主体。
对于得到请求来说没有请求主体实体。对于帖子请求而言,不会对发送请求的数据格式进行限制,理论上你可以发任意数据,但是服务器能不能处理就是另一回事了。服务器收到数据后,如何解析数据呢?它会以请求头中的内容类型设置的内容来进行数据解析。确定好内容类型的格式之后,请求主体的数据格式也就确定下来了。
<强>内容类型的格式有四种:分别是应用程序/x-www-form-urlencoded(这也是默认格式)、application/json, text/xml以及多部分/格式格式。强>
这些不同的帖子请求数据格式要通过HttpEntity来构造,有必要简单理一下HttpClient的HttpEntity对象,因为所有的帖子请求数据均需要置于HttpEntity实体中进行发送.HttpEntity是一个接口,实现这个接口的具体类有很多,比较常用的是StringEntity, UrlEncodedFormEntity(继承自StringEntity), MultipartEntity。他们将在发送不同格式的帖子请求时被用到。接下来就详细地介绍每一种数据格式对应的提琴手请求模拟和请求请求模拟(python实现)的实现情况。
<强>一、应用程序/x-www-form-urlencoded数据格式强>
在W3C官网上明确对这种数据格式进行了定义:
却;能够is 从而default content 类型只Forms submitted with 却;能够content type must be encoded as : Control names 以及 values 断开连接;逃只Space characters 断开连接;replaced by & # 39; + & # 39;,,以及then reserved characters 断开连接;escaped as described 拷贝; [RFC1738], section 2.2:, Non-alphanumeric characters 断开连接;replaced by & # 39; % hh # 39;,, a percent sign 以及two hexadecimal digits representing 从而ASCII code  of 从而字符只Line breaks 断开连接;represented as “CR LF", pairs (即,& # 39;% d % 0一个# 39;).The 控制 名称/values 断开连接;listed 拷贝,order 活动对象;appear 从而拷贝文档只,name is separated 得到,value by & # 39;=& # 39;,以及 名称/value pairs 断开连接;separated 得到each other by & # 39;, & # 39;。
这是帖子请求最常见也是默认的数据提交格式。它要求数据名称(的名字)和数据值(值)之间以等号相连,与另一组名称/值值之间用,相连,例如:parameter1=12345, parameter2=23456。将请求的内容进行格式化了,其实这个方法同时简化的客户端发送,也简化了服务器端获取,服务器通过getparameter(字符串名称)即可获取到传送来的信息。这是最常见帖子提交数据的方式,以表形式单形式提交数据。
(1)如果用提琴手模拟请求的话,请求头和请求主体的内容可以这样构造:
datas =, {& # 39; parameter1 # 39;: & # 39; 12345 & # 39;, & # 39; parameter2 # 39;: & # 39; 23456 & # 39;} 时间=r requests.post (& # 39; http://example.com& # 39;, data=https://www.yisu.com/zixun/datas) 打印(r.content) 打印(r.status_code)