js 模拟报文发送requst请求(模拟点击按钮等操作)。

1.问题描述:

          在实际开发过程中,会因为各种各样的问题, 导致一批数据,统一执行一个操作或者一样的请求。

 

2.实现基础知识必备:

    2.1Chrome中关于Console的输出(js调试):

      console.log 用于输出普通信息 

      console.info 用于输出提示性信息

      console.error用于输出错误信息

      console.warn用于输出警示信息

      console.dir(console)  可以查看console 下的所有方法

 

其他console控制台中的内部方法可以参考:

参考优秀博客:https://www.cnblogs.com/Renyi-Fan/p/9687315.html#_label0_2   ; https://www.cnblogs.com/Renyi-Fan/p/9687315.html

参考googleApi原版文档:  https://developers.google.com/web/tools/chrome-devtools/console/api

2.2  JS  中常用的方法函数的使用

 JavaScript 中的常用对象,经常忘记方法名称 : https://www.w3school.com.cn/jsref/jsref_obj_string.asp

 

 

a. sql查询出来数据,Execl导出,之后转换超过需要个格式装换成object对象

  Execl中的数据选择需要的行,直接复制到 Notepad2(系统自带) 中,利用他里面的正则表达式的替换规则做替换。(Ctrl+H)调出替换窗口

 1.经常使用的正则表达式 :Regular expression search  \s+  1个或者多个空白符
 2. 换行做替换用: 格式转换成 Transform backslashes  ,search String 中用\r\n做转换 
 3. 用在线工具 : http://www.ecjson.com/exceltojson/  EXCEL ,CSV 转JSon

     把execl 中自己选择的行列直接复制过去,点击装换就 

[

{"CreateTime":"2019/07/03 04:44:15","LastUpdateTime":"2019/07/03 04:44:34"},
{"CreateTime":"2019/07/03 06:10:16","LastUpdateTime":"2019/07/03 06:10:35"}]

 

 

 

 

 

 

b. object 对象集合foreach 访问object中的每个对象 

b1.对于逗号分隔的多个对象的访问 

         var   obstr="1050516,64244187";

           function  testTestIdStr(textStr)

{

    //组装成自己想要的的数据(用逗号分隔成元素)

     var Ids=textStr.split(',');

     ids.forEach(o=>{

      console.info(o);

 });

}

 

   b2. 对于多行的数据的(notePad2 中替换 execl 中的数据替换成一个字符串)

               var   obstr="1050516,64244187##1050538,64271921##1050554,64287642##1050593,64166857##1050669,63310506##1050870,64226341";

                   function textStr2(textOrderIdStrs)

{
var obs=textOrderIdStrs.split('##');
obs.forEach(o=>{
var obAttrs=o.split(',');
console.info(obAttrs[0]);
});
}

 

     b3.对于装换成的JSon格式的访问

var b=[
{"PKID":"958624","OrderId":"47763169","CreatedBy":"AUTOCommon","CreateTime":"2019/2/3 3:33"},
{"PKID":"958636","OrderId":"47514656","CreatedBy":"AUTOCommon","CreateTime":"2019/2/4 19:48"}
];

function textJson(testStr)
{
if(testStr.length==0)
{
return;
}
//下标访问方式
testStr[0];
testStr.forEach(o=>{
console.info(o);
//直接访问对象中成员
console.info(o.PKID);
})
}

 

c.js 中的定时服务的使用

  • setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
  • setTimeout() :在指定的毫秒数后调用函数或计算表达式。

                                                                                        setInterval(code,millisec,lang)(可以执行多次)

参数描述
code 必需。要调用的函数或要执行的代码串。
millisec 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。
lang 可选。 JScript | VBScript | JavaScript

 

                                                 setTimeout(code,millisec,lang)(只执行一次)
参数描述
code 必需。要调用的函数后要执行的 JavaScript 代码串。
millisec 必需。在执行代码前需等待的毫秒数。
lang 可选。脚本语言可以是:JScript | VBScript | JavaScript

 

function  setIntervalStr()
{
  var count=0; var lencount=3;
  
//循环调用 console.time("setInterval"); var flag=setInterval( function(){ if(count>=lencount) { clearInterval(flag); } console.info(count); count++; },1000) console.timeEnd("setInterval");
//单次调用 console.time("setTimeout"); var flag2=setTimeout(function(){ console.info("aaaaa"); },2000); console.timeEnd("setTimeout"); }

执行结果: 从输出结果来看 两个定时期中的待执行的方法是异步的,不影响主线程的正常执行。

 

 

3.实现方法:(F12,查询本次调用回来的报文)

       循环调用同一个方法,数量多时,防止接口被打死,用了setInterval 的定时循环;限制执行过程中防止同一个单子重复调用,需要加把下标致前。

调用方法职中得request参数

request  headers参数

1.模拟一次报文请求中  Form Data 数据  请求

/// 定时循环调用执行方法
function textCallsetInterval(textOrderIds)
{
var oBaosuns=textOrderIds.split(','); var index=0; var count=oBaosuns.length;
// 定时服务开始
var flag=setInterval (function(){ if(index>=count) {
//定时服务终止 clearInterval(flag); }
//要执行请求的对象
var o1=oBaosuns[index];
//先放在这里,防止重复操作 index
++;
//调用方法与 NetWork中单次调用中 RequestHeaders 中的path, obj需要传递额参数为 NetWork中的 全量Form Data 数据的组装 $.post(
'/XX/XXX',{ guid: 'b682d392-6196-4294-b9e6-58f869a52f37', servicePath: 'XXXXXX', serviceName: 'IXXXXXXX', operationName: 'XXXXXXXXX', extendHistories:[{Index:1}], parameterValues:[{Index:1 },{Index:2,Value:o1 },{Index:3,Value:2 },{Index:4},{Index:5},{Index:6 },{Index:7},{Index:8,Value:0}], },function(result){ if(!result.IsSuccess) { console.error(o1); } else { console.log (o1); } }); } ,2000) }

2.如果有按钮,则模拟点击按钮事件

var a='64131995,64136656'
var datas=a.split(',');
var i=0;
function auto() {
    if (i <datas.length) {
          setTimeout(() => {
            //对发送请求中的参数重新进行赋值
              var request = $("#requestcontainer ul li");
              request.eq(2).find('input').val(datas[i]);
              console.info(datas[i]);
              i++;
             //找到需要操作的按钮的模拟点击操作
            $('#callWcfServiceBtn').click();
            auto();
     }, 2000);
   }
}

 

4.总结: 

        JS脚本编程,能辅助我们处理一些重复的工作,而不用动后台代码。

 

posted @ 2019-07-30 20:02  冰融心  阅读(2596)  评论(0编辑  收藏  举报