使用LR编写HTTP协议Json报文格式接口脚本实战
最近在做HTTP协议接口压测时,遇到一些编写脚本方面的问题,在这里总结记录下,以便以后温习,也希望能帮助到和我有同样困惑的朋友吧。
//实战代码如下所示:
Action()
{
lr_start_transaction("事物"); // 断言内容:processcode":"0000","processdes:"处理成功" web_reg_save_param("processcode",
"NotFound=warning",
"LB=processcode\":\"",
"RB=\",\"processdes",
"Ord=1",
"Search=Body",
LAST); web_reg_save_param("processdes",
"NotFound=warning",
"LB=processdes\":\"",
"RB=\",\"checkresult",
"Ord=1",
"Search=Body",
LAST); //接口1:发送指定key:value参数的json报文
web_submit_data("request",
"Action=http://IP:port/sss/idCardCheck11",
"Method=POST",
"Mode=HTTP",
"RecContentType=application/json",
ITEMDATA,
"Name=msgbody", "Value={\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\","
"\"note\":\"\",\"brnchcd\":\"4001\",\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\","
"\"idcardno\":\"139891119211X\",\"name\":\"user\",\"wthrespic\":\"1\",\"app_id\":null,"
"\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}", ENDITEM,
LAST);
//接口2:发送json格式报文
web_custom_request("request",
"Url=http://IP:port/sss/idCardCheck11",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body={\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\",\"note\":\"\",\"brnchcd\":\"4001\","
"\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\",\"idcardno\":\"139891119211X\","\"name\":"
"\"user\",\"wthrespic\":\"1\",\"app_id\":null,\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}",
LAST);
//响应报文key值和预期结果比较,如果等于0则请求处理成功
if(strcmp(lr_eval_string("{processcode}"),"") == ){
lr_end_transaction("事物", LR_PASS); }else{
lr_end_transaction("事物", LR_FAIL);
//事物失败后打印processdes字段的值,也就是错误信息,但是LR打印出来的中文出现乱码,所以这里做了转码的操作
lr_convert_string_encoding(lr_eval_string("{processdes}"),LR_ENC_UTF8,LR_ENC_SYSTEM_LOCALE,"resultMsg");
//解码后返回单笔核对请求处理成功
lr_error_message("错误信息:%s",lr_eval_string("{resultMsg}")); } // lr_end_transaction("事物",LR_AUTO); return ;
}
以下是web_submit_data()函数 API示例代码:
从示例可以看到发送的是name,value对,提交表单的形式,但实际Value值也可能存在json数组,xml等形式。
// web_submit_data() API示例
web_submit_data("default.aspx",
"Action=http://lazarus/flightnet/default.aspx",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://lazarus/flightnet/",
"Snapshot=t7.inf",
"Mode=HTML",
ITEMDATA,
"Name=grpType", "Value=radRoundtrip", ENDITEM,
"Name=lstDepartingCity", "Value=DEN", ENDITEM,
"Name=lstDestinationCity", "Value=LAX", ENDITEM,
"Name=btnAvailableFlights", "Value=Next >", ENDITEM,
LAST );
接口请求报文如下:
msgbody:{app_sign:287cca63e9316c031,businesscode:,note:,brnchcd:,b64pic:,inputtype:,teller:,idcardno:139891119211X,name:user,wthrespic:,app_id:null,bankcode:,timestamp:}
问题描述:
往常使用LR编写处理HTTP接口脚本,惯用的函数是web自定义请求函数 web_custom_request(),使用接口测试工具postman请求成功后就直接编写脚本,尝试了几种组body的方法均返回请求方法格式出错或者直接请求失败,尝试请求方法如下所示:
web_custom_request("request",
"Url=http://10.148.0.161:1111/check/idCardCheck",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body={msgbody:{\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\",\"note\":\"\",\"brnchcd\":\"4001\","
"\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\",\"idcardno\":\"139891119211X\","\"name\":"
"\"user\",\"wthrespic\":\"1\",\"app_id\":null,\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}}",
LAST);
web_custom_request("request",
"Url=http://10.148.0.161:1111/check/idCardCheck",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body={\"msgbody\":{\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\",\"note\":\"\",\"brnchcd\":\"4001\","
"\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\",\"idcardno\":\"139891119211X\","\"name\":"
"\"user\",\"wthrespic\":\"1\",\"app_id\":null,\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}}",
LAST);
web_custom_request("request",
"Url=http://10.148.0.161:1111/check/idCardCheck",
"Method=POST",
"Mode=HTTP",
"EncType=application/json",
"RecContentType=application/json",
"Body=msgbody:{\"app_sign\":\"287cca63e9316c031\",\"businesscode\":\"05\",\"note\":\"\",\"brnchcd\":\"4001\","
"\"b64pic\":\"\",\"inputtype\":\"11\",\"teller\":\"2666\",\"idcardno\":\"139891119211X\","\"name\":"
"\"user\",\"wthrespic\":\"1\",\"app_id\":null,\"bankcode\":\"31100396\",\"timestamp\":\"1536118078193\"}",
LAST);
结论:如果提供的报文是key:value格式的就使用web_submit_data()函数,反之可选择使用web_custom_request()函数,如以上内容表述或总结后期会不断完善。
使用LR编写HTTP协议Json报文格式接口脚本实战的更多相关文章
- ARP协议的报文格式 转自n哖苡逅
ARP协议的报文格式 结构ether_header定义了以太网帧首部:结构arphdr定义了其后的5个字段,其信息用于在任何类型的介质上传送ARP请求和回答:ether_arp结构除了包含arphdr ...
- ARP协议的报文格式
原文链接地址:http://www.cnblogs.com/laojie4321/archive/2012/04/12/2444187.html 结构ether_header定义了以太网帧首部:结 ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠 ...
- 使用LR编写windows sockets协议xml报文格式脚本实战
以下是测试脚本Demo: #include "lrs.h" Action() { char * resultCode;//结果代码 char * time; //系统时间 char ...
- LR编写webservice协议接口
转自:http://lovesoo.org/use-loadrunner-call-webservice-interface-testing-optimization-summary.html 本文主 ...
- 【LoadRunner】LR编写Dubbo协议脚本
一.Dubbo服务简介 Dubbo是一个分布式服务架构,把核心业务抽取出来作为独立的服务,使前端应用能更快速和稳定的响应. Dubbo服务工作原理:服务提供方提供接口,并提供接口的实现,提供方注册服务 ...
- HTTP协议-响应报文格式
HTTP协议-响应码 浏览器向服务器发出请求,服务器处理可能是成功.可能是失败.可能没有权限访问等原因,服务器会通过响应码来告诉浏览器处理结果. " : OK " : Found ...
- LR编写Socket脚本方法1(XML/16进制报文data.ws格式)
本文主要讲述了Socket协议脚本的基础知识和编写方法,让大家能够在短时间内快速掌握简单的Socket协议脚本的编写方法.1.socket协议介绍Socket协议有万能协议之称,很多系统底层都是用的s ...
- HTTP协议报文格式
HTTP协议报文格式 接下来我们看看HTTP协议(Hypertext Transfer Protocol――超文本传输协议)浏览器端(客户端)向WEB服务器端访问页面的过程和HTTP协议报文的格式. ...
随机推荐
- IOS开发中将定时器添加到runLoop中
runLoop主要就是为线程而生的.他能够让线程在有任务的时候保持工作状态,没有任务的时候让线程处于休眠待备状态. 主线程的runloop默认是开启的.主线程上创建的定时器已经默认添加到runLoop ...
- SpringBoot几种定时任务的实现方式
定时任务实现的几种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行, ...
- Charles抓包软件简介
Charles简介: Charles是一款抓包神器,因为他是基于 java 开发的,所以跨平台,Mac.Linux.Window下都是可以使用的,确保安装之前已经安装了JDK.Charles官网地址: ...
- python多版本管理工具(pyenv)
在学习和利用python开发的很多情况下,需要多版本的Python并存.此时需要在系统中安装多个Python,但又不能影响系统自带的 Python.pyenv 就是这样一个 Python 版本管理器. ...
- 《JavaScript DOM编程艺术》学习笔记(三)
终于要完成这最后一部分了,距离第二部分已经过去五天了,一直想早点写的,但还是拖到今天了………… 34.position属性的和法制:static是position属性的默认值,意思是有关元素将按照它们 ...
- Echarts 几个常用图
最近公司业务上的 需求,要求做一些图表,我们技术框架上选择方便使用的Echarts. 下面是效果图: 下面是具体代码: <!DOCTYPE html> <html> <h ...
- 浅析PHP正则表达式的利用技巧
浅析PHP正则表达式的利用技巧 正则表达式是什么 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串. 将匹配的子串替换 ...
- HTTP协议概念与特点,HTTP的状态码,HTTPS是什么?
很多人在打开网页的时候,在浏览器地址栏里都会看到http ,在Java WEB里,HTTP也是个重点内容,今天我们就来详细了解和学习HTTP . HTTP是Hyper Text Transfer P ...
- Go变量逃逸分析
目录 什么是逃逸分析 为什么要逃逸分析 逃逸分析是怎么完成的 逃逸分析实例 总结 写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程 ...
- [Swift]LeetCode605. 种花问题 | Can Place Flowers
Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, ...