接口平台——自定义接口返回内容提高…

前提
使用fiddler自带的AutoResponder功能对请求和返回进行拦截,实现自定义返回内容的目的
后台代码很简单,一看就懂,只是个辅助,主要是熟练运用fiddler,

测试中遇到问题
在测试接口过程中,经常让开发帮忙修改一些返回值,或是设置延时等
虽然这些东西可以使用工具来解决一小部分,但是还是得麻烦开发。严重耽误测试时间,为了提高测试效率,写了一个小的平台,将负责的网站接口全部整理出来,然后进行自定义修改,当请求的接口为jsonp且带有callback时,如何将返回的内容中带上callback的随机函数名

弊端:
只能修改前段请求,也就是抓包能看到的请求,如果服务端请求,直接输出到页面源码之类的,无法进行拦截替换

问题和解决思路 
1.需要可以自定义的返回内容,可以选择讲返回写入本地文件,然后将返回指向本地文件
2.可以任意设置接口返回时间,如设置超时,这部分使用本地文件不靠谱,所以需要程序实现
3.如果是有回调函数,显然不能讲返回指向本地文件,因为无法带上回调函数,那么就需要通过程序完成
4.测试过程中,可能同时测试多个接口,所以写一个小平台,各个接口的编辑独立出来,实现多个接口同时测试

ps 因为本人基本无代码能力,所以现学现卖, 使用语言php 实现是用php的ci框架,页面部分用的ext的后台框架,稍加修改

代码实现
代码能力确实有限
mvc模型,只写了 v和c

controller:
function __construct() {
parent::__construct();
$this->load->helper(array('file','url','form','html','path'));
$this->load->library(array('javascript'));
define("str","./application/controllers/txt/");
}
定义一个本地文件的路径 “str”
//在txt文件下新建一个123.txt的文件
public function aaa(){
$data=$this->input->post('write_data');//通过post方法获取页面输入的内容
write_file (str. "123.txt",$data);//CI自己封装好的写入文件的方法
//这个文件中写入和接口返回的格式完全一样的内容,key不变,value自定义
}
public function moviebox_read_file($time)//带一个设置时间的参数
{$data = read_file(str. "123.txt"); 
sleep($time);//此处读取url中的time值,对页面的返回进行等待,等价于服务器返回的延时 
echo $data; //输出之前写入的内容
}

普通的返回只需要通过这种方式就行了,就是一个读写文件

下面是带有回调函数的接口
public function aaa(){
$temp = $_SERVER['QUERY_STRING'];//此处目的是获取callback随机函数的函数名
$b3_txt=read_file(str."123.txt");
echo $temp.$b3_txt;//这样返回内容就可以带上随机函数名了
}
此图解释如何获取到随机函数名字
接口平台——自定义接口返回内容提高测试效率

public function aaa_write_file(){
$data=$this->input->post('write_data');
write_file (str. "123.txt",$data);
}
public function aaa_wait_read_file($time){
$data = read_file(str. "123.txt");
sleep($time);
echo $data;
}

我目前测试的接口只有这两种情况,所以可以都可以按照这两种方法写
不足:根据接口形式不同可能需要对代码进行小的修改


view层:
<?php $attributes = array('onsubmit'=>"alert('ok')",'target'=>'hideframe');
echo form_open('baofeng/aaa',$attributes); 
$ndata = array('name'=>'write_data','cols'=>'45','rows'=>'30'); 
echo form_textarea($ndata); echo br(1); 
echo form_submit('mysubmit', '写入!'); 
echo form_close(); 
$a1=array('style'=>'bottom:26px;left:140px;position:relative;width:300px','target'=>'_blank'); 
echo form_open('baofeng/aaa_read_file/0',$a1); 
echo form_submit('readsubmit', '预览!'); 
echo form_close(); 
$a2=array('style'=>'bottom:53px;left:297px;position:relative;width:300px','target'=>'_blank'); 
echo form_open('baofeng/aaa_read_file/0',$a2); 
echo form_submit('readsubmit', '延时'); echo form_close(); ?>

ext的js需要修改的地方是两个for循环,有多少个菜单就循环多少次
for(j=0;j< 11;j++){
if(this==ck[j]){
if($("p"+j)==null){
openNew(j,this.innerHTML);//设置标签显示文字
}}}

for(i=0;i< 11;i++){
$("c"+i).style.display="none";
}

下面是如何使用
首先你要知道你测试接口的完整url,可以使用fiddler或是httpwatch看
1.通过工具或是浏览器打开接口,查看接口返回格式,并复制全部内容
2.修改接口value的值,使其变成你想要的内容,通过之前写的程序保存到本地文件,通过预览拿到读取文件的url
1.打开fiddler,软件右侧,找到AutoResponder
接口平台——自定义接口返回内容提高测试效率

2.点击add Rule,在rule editor 中输入要测试的接口url和你要返回内容的url
接口平台——自定义接口返回内容提高测试效率
通过正则,对拦截的请求进行匹配,可以点击test查看是否匹配成功
第一个url中存在两个(.+),第二个callback=后边是带的回调函数的随机函数名
第二个url中我们用$2来将之前拦截url中第二个(.+)的随机值传到url中
然后通过程序中的$temp = $_SERVER['QUERY_STRING'];获取这个回调函数名,在拼接到我们的本地文件中
这样就实现了jsonp返回   随机回调函数名(实际返回内容)形式的内容,
当我们把自己编写的内容返回给前端时,随机函数名是前端发起请求的名字,而且返回内容与之前完全一样,
只是value变了,所以页面不会报错,页面呈现的东西就是我们自己定义的了

设置超时,入职前的方法,只要在url中加入 /超时时间(数字类型) 就可以了
如:http://127.0.0.1/interface/aaa/3   设置返回时间为3秒,aaa是你对应的方法名就行了








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值