微信号:grzlwx

介绍:光荣之路官方资讯

实战:使用LR编写windows sockets协议xml报文格式脚本

2018-09-26 08:30 奋斗的小鸟

新书

速递

吴老的java版《selenium webdriver 实战宝典》和python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。

文 | 奋斗的小鸟

使用LR编写windows sockets协议

xml报文格式脚本

以下是测试脚本Demo:

#include "lrs.h"

Action()

{

    char * resultCode;//结果代码

    char * time;  //系统时间

    char * errorInfo;

    int rc; 

    lr_start_transaction("事务");

    //设置socket连接超时时间

     lrs_set_connect_timeout(60, 0);

    rc=lrs_create_socket("socket", "TCP", "LocalHost=0", "RemoteHost=IP:port",  LrsLastArg);

    //lr_output_message("rc=%d",rc);

    if(rc != 0){

         lrs_close_socket("socket");

         lr_end_transaction("事务", LR_FAIL);

         lr_error_message("创建socket失败!");

        return 0;    

    }

    //发送请求buf

    lrs_send("socket", "buf2", LrsLastArg);

    //设置socket接受内容的超时时间,如果请求处理时间超出LR默认的120秒,将无法接收到响应内容,因此我们可以根据实际需要设置可接受的超时时间来获取响应信息。

    lrs_set_recv_timeout(300, 0);

    //接收响应buf

    lrs_receive("socket", "buf3", LrsLastArg);

    //从接收到的响应buf中截取指定字段长度,用以断言请求是否处理成功

    lrs_save_searched_string("socket",NULL,"Result","LB/BIN=<retCd>",NULL,1,0,6);

    //lrs_save_searched_string("socket",NULL,"ErrorInfo","LB/BIN=<desc>","RB/BIN=</desc>",1,0,-1);  

    //关闭socket连接

    lrs_close_socket("socket");

    resultCode = lr_eval_string("{Result}");

    //errorInfo =lr_eval_string("{ErrorInfo}");

    //lr_output_message("结果代码 = %s",resultCode);   

    if(strcmp(resultCode,"000000") == 0){

        lr_end_transaction("事务", LR_PASS);

    }else{

        lr_end_transaction("事务", LR_FAIL);

        //lr_error_message("retCd:%s ,desc:%s",resultCode,errorInfo);

        //lr_save_datetime("%Y_%m_%d %H:%M:%S", DATE_NOW + TIME_NOW, "time");

        //lr_error_message("时间 = %s",lr_eval_string("<time>"));

    } 

   // lr_end_transaction("事务",LR_AUTO);

    return 0;

}

data.ws部分:

WSRData 2 1     //固定格式send  buf2 724   //发送buf长度
//报文样例"00000724<?xml version=\"1.0\" encoding=\"UTF-8\"?>""<transaction>"    "<header>"        "<ver>1.0</ver>"        "<msg>"            "<callTyp>1231</callTyp>"        "</msg>"    "</header>"    "<body>"        "<request>"            "<ReqBaseHdr>"                "<ChnlCD>er</ChnlCD>"                    "</request>"    "</body>""</transaction>"recv  buf3 17311       //接收响应buf长度  -1          //固定格式

 data.ws部分主要介绍两点

 1. 如何计算报文长度?

     如下所示,报文长度是8位数,当我们不知道报文精确长度时,可以给一个预估大小,然后把脚本的扩展日志3个选项都勾选上,然后执行脚本,查看LR控制台日志,如下图所示:

从日志打印sent buffer 可以看出,报文长度我指定的是724个字节,日志提示将发送732字节到socket,也就是说724(实际报文长度)=732 - 8(8位报文长度),已实验多次很准, 同样的接收报文的长度计算也是如此。需要注意的是,如果你send的报文应用程序解析失败或抛异常,很可能是你报文长度计算有误导致。

如果依然不确定长度,也可以借助UE编辑工具查看报文所占字节数,如下图所示,在UE右下角查看文件大小。或者通过查看应用日志排查是否报文发送正常。

2. LR存放报文的格式问题:

XML头部必须使用转义符\ 。如示例中的<?xml version=\"1.0\" encoding=\"UTF-8\"?> 。

报文 " "之间存在空格。如"<transaction>     "之间存在空格应用程序可能无法正确解析报文,这里需要注意。(The End

文章看不看你说了算,

代码练不练你说了算,

工资涨不涨领导说了算!

草根在测试行业如何杀出一条血路(2)

点此链接了解

2018web测试开发培训一年期周六班!

喜马拉雅app搜索并收听“光荣之路”电台
光荣之路
招聘|征稿|合作 |QQ群
735821166@qq.com
python群:457561756
性能群:415987441
招聘群:203715128
感谢认真阅读的你!
 
光荣之路 更多文章 互联网架构的演变 内推:上海科学创新教育研发中心 | 高测 Python实战:file tell()返回的指针怎么就不一样? 内推:途家在线 | 高测 Jmeter响应内容显示乱码问题的解决办法
猜您喜欢 线性回归:预测上海车牌成交价格 Visual Studio中最有用的小贴士 Android 自定义 view 详解 ENode框架Conference案例分析系列之 - 订单处理减库存的设计 R语言入门第七讲:data.frame------数据框的使用