loadrunner发送json_Loadrunner模拟JSON接口请求进行测试

Loadrunner模拟JSON接口请求进行测试

一、loadrunner脚本创建

1.Insert - New step -选择Custom Request -

web_custom_request

2.填入相应参数

3.生成脚本,并修改如下(参数中的引号"前需要加斜杠\转译)

Action()

{

web_custom_request("web_custom_request",

"URL=http://urlhead/CpcService.ashx?Method=checkXXXed",

"Method=POST",

"Resource=0",

"RecContentType=application/json",

"Referer=",

"Mode=HTTP",

"EncType=application/json",

"Body={\"user\":{\"uid\":\"C8-9C-DC-70-BD-B2\"}}",

LAST);

return 0;

}

4.捕获页面返回值

返回格式{"IsError":0,"ErrorMsg":"","user_tags":["0"]}

将光标移动到脚本顶部,插入关联点insert-new

step-service-web_reg_save_param

在脚本顶部,插入并修改脚本如下

web_reg_save_param("user_tags",

"LB=user_tags\":[\"",

"RB=\"]}",

LAST);

在脚本尾部,加入输出日志验证是否获取成功

lr_message ("user_tags:%s",

lr_eval_string("{user_tags}"));

5.对我们的接口做自动化功能测试,写验证脚本如下:

if

(atoi(lr_eval_string("{user_tags}"))==0)

lr_output_message("user_tags:%s,succeed!",(lr_eval_string("{user_tags}")));

else

if(atoi(lr_eval_string("{user_tags}"))==1)

lr_output_message("user_tags:%s,failed!",(lr_eval_string("{user_tags}")));

else

lr_output_message("user_tags:%s,unknow!",(lr_eval_string("{user_tags}")));

6.参数化脚本

运行脚本,重要日志输出如下:

Action.c(24):

[C8-9C-DC-70-BD-B2]0,succeed!

Action.c(26):

[C8-9C-DC-70-BD-B3]1,failed!

---------------------------------------END---------------------------------------

二、web_custom_request和web_submit_data区别

web_custom_request方法可以发送POST和GET类型的请求;

web_submit_data只能发送POST类型的请求;

所有web_submit_data方法发送的请求都可以使用web_custom_request来实现

web_custom_request可以实现web_submit_data无法实现的请求,比如“查询所有邮件并删除”这个案例中,查询时我们使用关联把所有邮件对应的标识抓取成一个数组,如果使用web_submit_data来完成这个删除的请求,需要很多个web_submit_data请求才能完成,但使用web_custom_request就可以通过一个请求完成,方法是自己写代码拼一个web_custom_request

方法POST请求的Body值。

1. web_submit_data

请求中提交的数据格式:“Name=属性名称,”,“Value=属性值”

例如:

"Name=username″,"Value=12044″,

ENDITEM,

"Name=password″,"Value=123456″,

ENDITEM,

"Name=typeId″,"Value=1″,

ENDITEM,

如果想提交的某个属性包含包含多个值(比如说批量删除),单个web_submit_data就无法处理了,只能通过多个web_submit_data来处理。

2. web_custom_request

提交的数据(body)格式:“Body=属性名称=属性值&属性名称=属性值&……”

下面是一个典型的web_submit_data和web_custom_request请求,可以看到web_custom_request中提交的数据(body)是以这样的方式存在的,如下:

web_submit_data("searchRecvOrgsname",

"Action=http://{url}/searchRecvOrgsname",

"Method=POST",

"TargetFrame=",

"RecContentType=text/html",

"Referer=http://{url}/login_wj;jsessionid={jsessionid}",

"Snapshot=t18.inf",

"Mode=HTML",

ITEMDATA,

"Name=orgsId",

"Value={orgsId}", ENDITEM,

"Name=code",

"Value={order_end_station_code}", ENDITEM,

LAST);

web_custom_request("searchVehiclePopUp",

"URL=http://{url}/searchVehiclePopUp",

"Method=POST",

"TargetFrame=",

"Resource=0",

"RecContentType=text/html",

"Referer=http://{url}/login_wanjia;jsessionid={jsessionid}",

"Snapshot=t19.inf",

"Mode=HTML",

"EncType=application/x-www-form-urlencoded;

charset=UTF-8",

"Body=&orgsId={orgsId}&order_start_station_id={order_start_station_id}&targetcode=order_truck_no&targetname=order_truck_name&targetid=order_truck_id",

LAST);

两种情况下的POST请求会被LoadRunner录制为web_custom_request:

1.上文提到的批量提交多条同属性名称的数据的请求

2.header属性x-requested-by值为XMLHttpRequest的POST请求

这两种实现请求的方法还有一个需要注意的地方就是web_custom_request中body中的属性值如果包含一些特殊字符,必须通过URL编码,否则Web服务器会返回500错误,一个典型的例子是如果Body中包含ViewState,ViewState中常常有“=”之类的特殊字符,此时必须通过URL编码,LoadRuner中提供了一个这样的编码转换函数:

web_convert_param(“vs1″,

“SourceEncoding=HTML”,“TargetEncoding=URL”, LAST);

3. web_custom_request函数详解

A.语法:

int web_custom_request( const char

*RequestName, ,

[EXTRARES, ,] LAST );

B.返回值:返回LR_PASS(0)代表成功,LR_FAIL(1)代表失败。

C.参数:

(1)RequestName:步骤的名称,VuGen中树形视图中显示的名称。

(2)List of

Attribute:属性列表,支持的属性有以下几种:

a.URL:页面地址。

b.Method:页面的提交方式,POST或GET。

c.TargetFrame:当前链接或资源所在Frame的名称。

除了Frame的名字,还可以指定下面的参数:

_BLANK:打开一个空窗口。

_PARENT:把最新更改过的的Frame替换为它的上级。

_SELF:替换最新更改过的的Frame。

_TOP:替换整个页面。

d.EncType:编码类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SmartIDE支持开源国产IDE - 阿里蚂蚁的OpenSumi丨IDCF

作者:徐磊文章首发地址:https://smartide.cn/zh/blog/2022-0419-sprint16/SmartIDE v0.1.16 (Build 3137)已经在2022年4月19日发布到稳定版通道,我们在这个版本中增加了阿里和蚂蚁发布的国产IDE OpenSumi的支持,以及其他一些改进。…

windows之如何知道C盘目录下的大文件路径

1 准备linux的命令环境 window环境安装git,因为我们需要git bash,使用命令操作 2 用find和xargs命令 比如我们要知道C盘大于300M的文件路径和具体大小 我们打开git bash,然后cd到C盘,命令如下 find . -type f -size 300M | xargs du -h | sort -nr

js操作文件

在HTML表单中&#xff0c;可以上传文件的唯一控件就是<input type"file">。 注意&#xff1a;当一个表单中包含<input type"file">时&#xff0c;表单的enctype必须指定 为multipart/form-data,method必须指定为post&#xff0c;浏览器才能正确…

JavaScript读取本地图片到浏览器

代码: <html> <head> <script type="text/javascript"> function getFileUrl(sourceId) { var url; if (navigator.userAgent.indexOf("MSIE")>=1) { // IE url = document.getElementById(sourceId).value; } else if(navigator.…

Web程序员的Mysql进阶序二之sql多条数据插入、多条数据更新、多表同时查询

数据库在web开发的时候&#xff0c;减少连接次数可以降低数据库负载&#xff0c;所以一次连接&#xff0c;多数据操作可以有效的优化数据库。 假设表结构如下&#xff1a; create table test(name varchar(10),sex varchar(10) ); create table test1(name varchar(10),sex v…

Android封装快捷键,android打包一个没有快捷键的apk,并且通过另一个应用启动

1.有时候我们的需求是每个功能可能类似一个插件那样分开&#xff0c;需要我们分别不同开发2.首先我们如何安装apk之后不显示Lanch呢&#xff1f;android:name".app.Books.Books"android:configChanges"orientation|keyboardHidden|screenSize|smallestScreenSiz…

MVC 扩展方法特点

.NET MVC 3中扩展方法特点&#xff1a; &#xff08;1&#xff09;扩展类的名称以Extensions结尾&#xff1b; &#xff08;2&#xff09;扩展类的类型是static&#xff1b; &#xff08;3&#xff09;扩展方法至少有一个参数&#xff0c;第一个参数必须指定该方法作用于哪个类…

C# Linq源码解析之Aggregate

前言在Dotnet开发过程中&#xff0c;Aggregate作为IEnumerable的扩展方法&#xff0c;十分常用。本文对Aggregate方法的关键源码进行简要分析&#xff0c;以方便大家日后更好的使用该方法。使用Aggregate是对序列应用累加器的函数。看下面一段代码:List<string> lst new…

c语言输出中文为乱码_C语言编程出现汉字输出乱码现象

匿名用户1级2014-06-27 回答//因为不知道你具体的功能流程&#xff0c;所以我只能先就语法来提下代码的问题int cha(){//int a[N],b[N];//int i0,x,v1,v2;char a[N][M] {0};//M为字符串最大长度加1,根据要求设置int b[N] {0};int i0,x,v2;char v1[M] {0};FILE *f;if((ffopen…

剑指offer之二叉树的高度

1 问题 求二叉树的深度&#xff0c;比如下面的二叉树&#xff0c;高度是4 22 13 3 2 53 2 代码实现 int getTreeHeigh(Node *haed) {if (head NULLL){return 0;}int left getTreeHeigh(head->left);int right getTreeHeigh(head->right);retur…

Entity Framework Code First模式基础知识及入门实例01

在深入学习某项技术之前,应该努力形成对此技术的总体印象,并了解其基本原理,本文的目的就在于此。 一、理解EF数据模型 EF本质上是一个ORM框架,它需要把对象映射到底层数据库中的表,为此,它使用了三个模型来描述这种映射关系。 (1)概念模型(Conceptual Model):主要…

mycat 双主 热切换

为什么80%的码农都做不了架构师&#xff1f;>>> Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz schema.xml <?xml version"1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat"ht…

Web程序员的Mysql进阶序三之sql多表数据删除、子查询、联合查询

假设表结构如下&#xff1a; create table test(name varchar(10),sex varchar(10) ); create table test1(name varchar(10),sex varchar(10) );假设多条数据同时插入&#xff1a; insert into test (name,sex) values(xiao,nan),(xiao1,nan1),(xiao2,nan2); insert into te…

android 传感器 balance filter,Android 传感器 API.doc

Android 传感器 API1.1 序言 ? ?【Android蛋蛋网】在这一章我们主要针对Android的传感器(Sensor)进行说明。如果说Java的程序和硬件有些远的感觉&#xff0c;那么可以说传感器距离硬件很近。传感器(Sensor)听起来似乎感觉很难&#xff0c;其实它并不是很难。做起来并很有意思…

6 四大组件之Service

6-1 Servie概述 组件篇——Service 定义:  1.后台运行,不可见,没有界面  2.优先级高于Activity Service是Android系统的后台服务组件&#xff0c;适用于开发无界面、长时间运行的应用功能。 Service特点如下&#xff1a; 没有用户界面 不会轻易被Android系统终止 在系统…

WCF服务寄宿IIS时.SVC文件无法浏览的解决办法

在IIS中托管服务和经典的ASMX Web服务托管相似,需要在IIS下创建虚拟目录,并提供一个.svc文件和Web.config配置文件。另外,托管时,服务的基地址必须与.svc文件的地址相同。 一、操作步骤: (1)打开IIS,新建网站,选择物理路径 (2)打开IIS,在默认网站下添加应用程序,…

python自动生成鸡汤文_用20行Python代码生成鸡汤,打造AI咪蒙指日可待。

作者&#xff1a;Ramtin Alami“Don’t think of the overwhelming majority of the impossible.” “不要去想不可能之事” “Grew up your bliss and the world.” “努力赢得自己的幸福和世界” “what we would end create, creates the ground and you are the one to war…

他毕业两年,博客一年,时间

这是2014年10个月。时光匆匆&#xff0c;看到该公司的新鲜新的一年。有时&#xff0c;一个想法。其实&#xff0c;我在这个城市工作了两年多&#xff0c;总是觉得自己老了。从一般再聘请两名现在厂家机构和学校&#xff0c;懵懵懂懂从校园到完成社区&#xff0c;来写个总结&…

linux shell之替换目录下包含关键字所有文本里面的内容

1 问题 替换目录下包含关键字所有文本里面的内容 比如在目录 /root/chenyu/cy/下&#xff0c;把包含文本/A/B C替换成文本EF 2 解决办法 命令如下 grep -Rl /A/B\ C /root/chenyu/c* | xargs sed -i s#/A/B\ C#EF#g 我们也可以这样 grep -Rl /A/B\ C /root/chenyu/c/ | x…

C#语法糖系列 —— 第一篇:聊聊 params 参数底层玩法

首先说说为什么要写这个系列&#xff0c;大概有两点原因。这种文章阅读量确实高...对 IL 和 汇编代码 的学习巩固所以就决定写一下这个系列&#xff0c;如果大家能从中有所收获&#xff0c;那就更好啦&#xff01;一&#xff1a;params 应用层玩法 首先上一段 测试代码。class …