一、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来实现

1. web_submit_data

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

例如

“Name=username”, “Value=12044″, ENDITEM,

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

2. web_custom_request

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

例如:

3. web_custom_request 函数详解

A.语法:

Int web_custom_request (const char *RequestName,

<List of Attributes>,

[EXTRARES, <List of Resource Attributes>,]

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:编码类型。

e.RecContentType:录制脚本时响应头的内容类型。

例如text/html,application/x-javascript,application/json等。

当没有设置Resource属性时,用它来确定目标URL是否是可记录的资源。此属性包含主要的和次要的资源。

最 频繁使用的类型是 text、application、p_w_picpath。次要的类型根据资源不同变化很多。例如:"RecContentType=text/html":表示 html文本。"RecContentType=application/msword":表示当前使用的是Msword。

f.Resource:指示URL是否属于资源。1 是;0 不是。设置了这个参数后,RecContentType参数被忽略。

“Resource=1”, 意味着当前操作与所在脚本的成功与否关系不大。在下载资源时如果发生错误,是当作警告而不是错误来处理的;URL是否被下载受“Run-Time Setting—Browser Emulation--Download non-HTML resources” 这个选项的影响。此操作的响应信息是不做为HTML来解析的。

“Resource=0”,表明此URL是重要的,不受发送请求(RTS)的影响,在需要时也会解析它。

g.ResourceByteLimit:web页面下载资源的极限大小。当达到设置的极限后,无法下载其他资源。仅仅对需要下载的资源有效。

下载过程:如果总计下载大小小于极限值,则正常开始下载。如果当下载时达到了设置的极限值,资源大小可知(在HTTP响应头中指定了Content- Length),这中情况下,如果只需要一个缓冲区,那么下载可以正常完成。如果需要的不止一个缓冲区,或者资源大小不可知,下载就会中断同时关闭当前连 接。

这个特性可以用来模拟用户不等待一个页面下载完成时导航到另一个页面的情况。

ResourceByteLimit 在HTTP模式中无法使用,在Concurrent Groups(Vuser脚本中的一个区,此区中的所有函数并发执行)区中也无法使用。仅仅适用于Sockets的回放,WinInet也是不适用的

h.Snapshot:快照的文件名,关联时使用。

i.Mode:两种录制级别HTML、HTTP。

HTML级别:在当前Web界面上录制直观的HTML动作。以一步步的web_url、web_link、web_p_w_picpath、web_submit_form来录制这些动作。VuGen仅仅录制返回HTML页面的请求,不处理脚本和应用程序。

HTTP级别:VuGen把所有的请求录制为web_url指令,不生成web_link、web_p_w_picpath、web_submit_form这些函数。这种方法更为灵活,但是生成的脚本不够直观。

j.Body:请求体。(目前仅适用与web_custom_request函数)

不同的应用中,请求体分别通过Body、BodyBinary或者BodyUnicode参数来传递。请求体可以只使用其中一个参数,也可以使用一连串的分开的参数组成多请求体。

k.RAW BODY:参见List of Attributes的同名参数。

l. BodyFilePath:作为请求体传送的文件的路径。它不能与下面的属性一起使用:Body,或者其他Body属性或Raw Body属性包括BodyBinary,BodyUnicode, RAW_BODY_START或Binary=1。

m.Binary:

“Binary=1”表示页面请求体中的每一个以file://x/##形式出现的值(在这里“##”代表2个十六进制数字),都会被替换为单字节的十六进制的值。

如果“Binary=0”(默认值),所有的字符序列只是按照字面的值传递。

需要注意双斜杠的用法。在C编译器中双斜杠被解释为单斜杠。如果不需要零字节,单斜杠可以在Binary不等于1的情况下使用(例如,使用\x20代替 file://x20/)。如果需要零字节,那么只能使用file://x00/且设置 “Binary=1”,\x00在逻辑上会被截断。

n.ContentEncoding

指定请求体的使用指定的方式(gzip或者deflate)进行编码(例如,压缩),相应的“Content-Encoding:” HTTP头会和此请求一起发送。这个参数适用于web_custom_request和web_submit_data。

o.Referer:当前页面关联的页面。如果已经显式指定了url的地址,此项可以省略。

p.ExtraResBaseDir:

(目前仅适用与web_custom_request函数):根URL,放在EXTRARES组里。它是用来解析相对URL的(译者加:类似于Windows的相对路径和绝对路径)。

URL可以是绝对路径(例如http://weather.abc.com/weather/forecast.jsp?locCode=LFPO),也可以是相对路径(例如“forecast.jsp?locCode=LFPO”)。

真正的URL的下载是通过绝对路径进行的,所以相对URL路径必须使用根路径URL去解析。例如,使用http://weather.abc.com /weather/做为根路径来解析“forecast.jsp?locCode=LFPO”,最后的URL是:http: //weather.abc.com/weather/forecast.jsp?locCode=LFPO。如果没有指定 “ExtraResBaseDir”,默认的根URL是主页面的URL。

q.UserAgent:用户代理,它是一个HTTP头的名字,用来标识应用程序,通常是浏览器,它呈现的是用户和服务器的交互。

(3)EXTRARES:表明下面的参数将会是List Of Resource Attributes了。

(4)LAST :结尾的标示符。

-------------------------------------------------------------

附:测试页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<title></title>

<script src="http://img.m18.com/web/j/lib/jquery-1.3.2.min.js" type="text/javascript"></script>

<script type="text/javascript">

$(function() {

$.ajax({

type: "POST",

contentType: "application/json",

url: "http://url.com/mkt/CpcService.ashx?Method=checkhasactivated",

data: '{"user":{"uid":"C8-9C-DC-70-BD-B2"}}',

success: function(msg) {

alert("Data Saved: " + msg);

}

});

})

</script>

</head>

<body>

</body>

</html>

-----------------------------------------------------------

web_reg_save_param("user_tags",

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

"RB=\"]}",

LAST);

web_custom_request("web_custom_request",

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

"Method=POST",

"Resource=1",

"RecContentType=application/json",

"Referer=",

"Mode=HTTP",

"EncType=application/json",

"Body={\"user\":{\"uid\":\"{mac}\"}}",

LAST);

//lr_message ("user_tags:%s", lr_eval_string("{user_tags}"));

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

lr_output_message("[%s]%s,succeed!",(lr_eval_string("{mac}")),(lr_eval_string("{user_tags}")));

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

lr_output_message("[%s]%s,failed!",(lr_eval_string("{mac}")),(lr_eval_string("{user_tags}")));

else

lr_output_message("[%s]%s,unknow!",(lr_eval_string("{mac}")),(lr_eval_string("{user_tags}")));

博文转自http://blog.sina.com.cn/s/blog_6966650401013z71.html

转载于:https://blog.51cto.com/gtest/1575779

LoadRunner模拟Json请求相关推荐

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

    Loadrunner模拟JSON接口请求进行测试 一.loadrunner脚本创建 1.Insert - New step -选择Custom Request - web_custom_request ...

  2. NodeJs本地搭建服务器,模拟接口请求,获取json数据

    最近在学习Node.js,虽然就感觉学了点皮毛,感觉这个语言还不错,并且也会一步步慢慢的学着的,这里实现下NodeJs本地搭建服务器,模拟接口请求,获取json数据. 具体的使用我就不写了,这个博客写 ...

  3. nodejs虚拟服务器,NodeJs本地搭建服务器,模拟接口请求,获取json数据

    引言: 不知道你在项目开发过程中,有没有遇到过有过以下场景: 一般是前端先制作静态页面,同时服务器端创建数据库,搭服务器端架构,写接口: 当接口写完之后,前端或者后端才能嵌套页面. 但是,如果前端页面 ...

  4. python get请求带参数_python_request的安装及模拟json的post请求及带参数的get请求

    一.Requests模块安装 安装方式一: 执行 pip install -U requests 联网安装requests 安装方式二: 进入https://pypi.org/project/requ ...

  5. C#模拟HTTP请求Post JSON

    C#模拟HTTP请求Post JSON 前言 因为接口是http的,我们站点是https的,不能https直接ajax请求http,所以需要在SharePoint中开发一个模拟请求Ajax的Servi ...

  6. java post json请求_java模拟post请求发送json

    java模拟post请求发送json,用两种方式实现,第一种是HttpURLConnection发送post请求,第二种是使用httpclient模拟post请求. 方法一: public stati ...

  7. (0011) iOS 开发之模拟HTTP请求与响应,返回自己想要的报文。

    iOS 本地模拟 HTTP请求的返回数据,用来先行开发. 在新需求的确定之后,在开发的开始阶段,一般后台接口先开发,这时客户端是拿不到接口文档规定的报文数据的,那我们怎么模拟接口请求返回数据尼? 直接 ...

  8. 利用Fiddler模拟POST请求

    写后台服务器的时候,常用到模拟请求.一般GET请求可以直接利用浏览器进行模拟. 但post请求则一般不行(FireFox可以) 我们常用的抓包工具Fiddler就可以模拟post请求 操作流程如下: ...

  9. Python数据库访问公共组件及模拟Http请求

    前言 最近一段时间除了忙于工作之外,在业余时,迷上了python,对它的跨平台深深的吸引.经过一段时间的自我学习,了解了其基本的语法,便开始自己着手摆弄起来.主要想把以前对接的接口再实现一次,以便于在 ...

最新文章

  1. R构建朴素贝叶斯分类器(Naive Bayes Classifier)
  2. dto是什么意思_DO,DTO,VO,POJO 你知道吗?
  3. 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)
  4. 整合Tomcat和Nginx实现动静态负载均衡
  5. 【搜索引擎基础知识2】网络爬虫的介绍
  6. vue实例属性之el,template,render
  7. oracle rds 运维服务_RDS oracle数据库运维方案
  8. [导入]实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除...
  9. 《鸟哥的Linux私房菜》读书笔记
  10. 非参数检验统计量分析
  11. Android开发资料超级给力小游戏(精典美女搓搓 妄撮版)源码
  12. 计算机电子表格的优点,信息技术《电子表格的特点及应用》的说课稿
  13. 重磅开源!平安产险提出TableMASTER:表格识别大师
  14. Android WebView支持文件下载之调起浏览器下载(Java与Kotlin版)
  15. linux命令:xxd读取二进制文件
  16. 关于petitfatfs的移植问题
  17. 代码签名证书过期,Mozilla数百万Firefox用户遭遇扩展禁用
  18. nginx进程模型,事件模型
  19. Debug: Minkowski undefined symbol; Tensorboard has no attribute ‘version‘
  20. 技术-正则表达式 处理读书器的章、节、回问题

热门文章

  1. Cell Stem Cell:研究人员开发出大脑类器官用于研究认知障碍!
  2. 2019数字化趋势:未来5年政府、零售数字化程度将达80%
  3. 解读2018年诺贝尔化学奖成果:用进化的力量解决化学问题
  4. 斯坦福大学科学家研发微型植入式神经刺激器
  5. MIT人工突触芯片新突破:指甲大小的芯片有望媲美超算
  6. 不发项目奖金,程序员怒删代码,被判 5 个月!
  7. mysql字段中去掉括号
  8. CREATE TABLESPACE
  9. 基于Struts2.3.x+Spring3.2.x+Hibernate4.2.x+EasyUI1.3.4+Maven架构的示例程序
  10. 那些好用的小工具——Total Commander