post请求测试工具(python怎么做接口测试工具)

本文目录
python怎么做接口测试工具
之前使用过urllib和urllib2做接口测试,在做的途中,感觉使用urllib2直接进行的get,post 请求并没有那么好用。作为测试人员,所需要的测试工具应当以方便为第一要务,测试的耗时只要是真正的无人值守,耗时不是太久的都可以接受。所以,本人又尝试了一个新的包:requests。
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Python3 !推荐一篇文章,上面有该包的详细说明 传送门,以下只会写到我用到的部分,所以更多的了解需要自己去搜资料
好了,我们开始吧!!
接口测试中重要的部分:
1.get和post方法
2.用到的参数
3.请求头
4.cookie
5.日志输出
6.如何调试你的程序--借助fiddler
按照以上的顺序,我将一一说明我的搞法,因为编码能力有限,所以可能看着很low
一、get和post
requests包很好的实现了post和get方法,示例:
1 import requests2 response_get = requests.get(url, data, headers, cookies)3 response_post = requests.post(url, data, headers, cookies)
其他的访问方式如put,head等等,用法几乎都是如此,因为没用到,所以省略
现在一般的接口返回值有页面和json俩种,按照需求,可以分别使用response.text或者response.content获取,text获取的是unicode类型的返回值,而content返回值是str类型,所以我一般使用content来获取返回值,因为这样获取的返回值可以直接使用正则或者in的方式来验证返回值结果是否正确。
我自己为了实现接口的自动访问,所以又在requests上面加了一层封装,就像下面这样:
1 def main_get(list_result, cookies): 2 """ 3 用于模拟get请求,返回结果 4 :param list_result:空列表,用于存储结果 5 :param cookies: 登陆后的cookie 6 :return:访问结果 7 """ 8 # List_interface_get写在接口文件里,文件是py格式,然而它本身是字典类型 9 for key in List_interface_get:10 try:11 f1 = requests.get(key, cookies=cookies)12 if f1:13 print f1.content14 print List_interface_get)45 except AssertionError:46 print ’One Error in post’47 pass48 return result_list
二、用到的参数以及请求头
我用的方法是把这些都存放于一个py文件中,当然也可以使用excel或者xml文件,甚至于使用DB。项目紧急,凑合了一下,这里的数据结构主要为了符合上面封装的函数,直接上代码看吧
***隐藏网址***
三、cookie
一款产品的接口测试中必定会使用登录状态,需要使用cookie实现,之前写过使用cookiejar获取cookie,requests中获取cookie的方法更为简单,不过首先你得知道是哪个接口set了cookie,不过一般是登录啦。登录接口访问之后set了cookie,那好,就去调用登录接口,然后拿到搞回来的cookie:
# 只需要这样!!login = requests.post(login_url, data=login_data, headers=login_header)
cookie = login.cookies
这个cookie就是登录状态了,拿着随便用,需要登录的就直接cookies=cookies
四、日志输出
这里注意看第二步中接口数据,有接口描述,也有接口是啥,第一步中又把content做成返回值了,具体拼接方式自己想吧,东西全有了,想写啥写啥,还可以加上获取本地时间的api获取接口运行时间,log文件该长啥样是门学问,这里就不献丑了。
五、借用fiddler调试你的脚本
requests允许使用代理访问,这有啥用,真有!fiddler是一款截包改包的工具,而且通过扩展可以进行请求间的比对,这样让你的程序访问的请求和真正正确的请求作对比,为啥我的程序访问出错?是不是缺了请求头?参数是不是丢了?cookie是不是少了?很容易看出来。写法如下:
***隐藏网址***
requests.post(url, proxies=proxies)
这样就可以走代理了,除fiddler以外还有charles和burp suite可以使用,具体看个人喜好吧。
什么测试工具可以压力测试HTTPS POST的
什么测试工具可以压力测试HTTPS POST的
《?php defined(’SYSPATH’) or die(’No direct script access.’);
/**
***隐藏网址***
***隐藏网址***
* Add Support HTTP/1.1 by Default
* Only Support Connection Close Mode
*
* @author anthony
*/
class Http {
/**
* @var array default header options
*/
public static $default_options = array (
’User-Agent’=》 ’Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4’,
’Connection’=》 ’Close’ //Need to close the request every time for HTTP 1.1
);
/**
* return Array lines of headers
* Overwrite by $options
*
* @param Array $options, key value pairs of Header options
*
* @return Array,Array line of headers
*/
private static function getHeaders($options){
if ($options === NULL) {
// Use default options
$options = self::$default_options;
} else {
//Merge the $options with $default_options, if the value set in $options,
//Value in $default_options will be overwrite
$options =$options + self::$default_options ;
}
$headers = array();
foreach($options as $k=》$v){
$headers = $k.’: ’.$v;
}
return $headers;
}
/**
***隐藏网址***
* may be used.
*
***隐藏网址***
* @param array Header options
* @param array $data Get Param
* @param array &$reponse header, if Assigned,the response header will be populated
*
* @return string, Raw String of Http body
*/
public static function get($url, array $options = NULL,$data = NULL,&$response_header = NULL) {
$headers = self::getHeaders($options);
***隐藏网址***
’method’ =》 ’GET’,
//Defautl HTTP 1.1 and with Connection Close
’protocol_version’=》’1.1’
));
if ($options!== null) {
***隐藏网址***
}
if($data){
***隐藏网址***
}
$ctx = stream_context_create($params);
$fp = fopen($url, ’rb’, false, $ctx);
if (!$fp) {
throw new Exception("Connection failed: $url");
}
if($response_header !== NULL){
$response_header = stream_get_meta_data($fp);
}
$response = stream_get_contents($fp);
if ($response === false) {
throw new Exception("Reading data Failed: $url");
}
fclose($fp);
return $response;
}
/**
* Post with request options and data
*
* @param String url, FULL url
* @param Array $options , key=》value pairs array
* @param Array $data ,Post Data pairs
* @param array &$reponse header, if Assigned,the response header will be populated
*
* @return string, Raw String of Http body
*/
public static function post($url, $options = null,$data=NULL,&$response_header = NULL) {
//Restricted the Form formate
if(is_array($data)){
***隐藏网址***
}
$options = ’application/x-www-form-urlencoded’;
$options = strlen($data);
***隐藏网址***
’method’ =》 ’POST’,
’content’ =》 $data
));
$headers = self::getHeaders($options);
***隐藏网址***
$ctx = stream_context_create($params);
$fp = fopen($url, ’rb’, false, $ctx);
if (!$fp) {
throw new Exception("Connection Failed: $url ");
}
if($response_header !== NULL){
$response_header = stream_get_meta_data($fp);
}
$response = stream_get_contents($fp);
if ($response === false) {
throw new Exception("Reading data failed: $url");
}
fclose($fp);
return $response;
}
/**
* Inflate zipped content
*
* @param String $_content, gzipped content
*
* @return String, Inflated content
*/
public static function inflate($_content){
//deflate add 10 charaters before inflate format and 8 charaters checksum append
//gzdecode is not availible for ALL PHP even gzencode is avalible
$_content = substr($_content, 10,-8);
return gzinflate($_content);
}
/**
* Check if the reponse content is zipped from response header
*
* @param Array $_response_header, Response header captured from get/post
*
* @return Boolean, True for zipped contented
*/
public static function isZipped($_response_header){
if (preg_grep(’/^Content-Encoding:\s*gzip/’,$_response_header)){
return TRUE;
}else{
return False;
}
}
***隐藏网址***
Jmeter接口测试01-GET和POST请求
jmeter启动后的界面如下:
1、先创建一个线程组。鼠标右键点击“测试计划”,依次选择添加-》线程(用户)-》线程组,如下:
2、给线程组取名为“单接口测试”(名称自定义即可)。
注:命名后保存才能生效。
3、添加HTTP请求。鼠标右键“单接口测试”,依次点击添加-》取样器-》HTTP请求,如下:
4、GET方式请求接口。比如访问百度,配置如下:
5、发送接口请求,查看接口响应结果。
在发送请求之前先添加一个监听器“察看结果树”,为了查看接口响应结果。鼠标右键点击“单接口测试”,依次选择添加-》监听器-》察看结果树,如下:
点击发送按钮,生成结果树:
查看结果树,点击结果树节点,显示Response body信息:
至此,使用jmeter完成了一个GET方式的请求。
首先禁用或删除GET请求接口,鼠标右键“HTTP GET请求”(不禁用或删除也行,独立的接口之间不影响,只是点击发送按钮时,会把所有启用的接口都执行。这里为了方便,选择禁用。):
清除结果树,点击清除按钮或清除全部按钮:
1、如之前操作,添加一个HTTP请求,并命名为HTTP POST请求:
2、配置POST请求信息:
3、发送请求,并查看结果树:
至此,使用jmeter完成了一个POST方式的请求。

更多文章:
he agreed to help(用need to do sth.和agree to do sth. 造句)
2026年8月31日 01:00
instr函数的返回值(关于vb中InStr函数的一个小问题)
2026年1月26日 22:30
slcp是什么意思(matlab.*和matlab. s有什么区别)
2026年1月3日 12:00
db2数据库update后想恢复(你好,SQL修改错了,修改前没有备份,请问怎么还原到修改前的数据,你知道吗可以给联系方式我请教一下)
2026年9月17日 12:00
assert python用法(python:assert_raises() 怎么用啊,有哪些参数 请说得详细些,先谢谢了!)
2026年7月11日 08:30
this is it歌词好诡异(Turn The Lights On的歌词翻译)
2025年7月26日 02:30
tabletennis安卓游戏(table tennis touch多人游戏时提示game center断开链接怎么解决)
2025年8月8日 17:15
迷你qq头像(2021头像可爱呆萌男生,寻找一些头像小男孩的那种)
2026年2月14日 13:00












