Loadrunner:脚本编写通用模板(Http协议类型)
1. 背景
对于 Http协议,Loadrunner 脚本可以使用通用模板反复粘贴,只需要修改其中的 URL 和 传参,就可以完成一整个业务
2. Get 类型的接口
web_custom_request(
// 名称,最好用英文
"Hello",
// 接口的 URL,建议 appboss 地址设置成变量,方便切换环境
"URL={appboss}/app/shopBuy/detail?tokenId={tokenId}",
// 提交方式
"Method=GET",
"TargetFrame=",
"Resource=1",
// 返回内容定义的类型
"RecContentType=application/json",
"Referer=",
// 请求内容定义的类型
"EncType=application/x-www-form-urlencoded; charset=utf-8",
LAST);
3. POST 类型接口
web_submit_data(
// 名称,最好用英文
"Hello",
// 接口的 URL,建议 appboss 地址设置成变量,方便切换环境
"Action={appboss}/app/shopBuy/detail?tokenId={tokenId}",
// 提交方式
"Method=POST",
"TargetFrame=",
"Referer=1",
// 返回内容定义的类型
"RecContentType=application/json",
"Referer=",
"Mode=HTML",
ITEMDATA,
// 请求体内容
"Name=传参的键", "Value=传参的值", ENDITEM,
LAST);
4. 添加事务
事务是用来区分不同业务的,一个接口就可以用一个事务包含起来,方便统计
// 事务开始
lr_start_transaction("事务名称"); web_submit_data(
// 名称,最好用英文
"Hello",
// 接口的 URL,建议 appboss 地址设置成变量,方便切换环境
"Action={appboss}/app/shopBuy/detail?tokenId={tokenId}",
// 提交方式
"Method=POST",
"TargetFrame=",
"Referer=1",
// 返回内容定义的类型
"RecContentType=application/json",
"Referer=",
"Mode=HTML",
ITEMDATA,
// 请求体内容
"Name=传参的键", "Value=传参的值", ENDITEM,
LAST); // 事务结束
lr_end_transaction("事务名称", LR_AUTO);
5. 添加断言
上面的脚本还缺少测试中最重要的一环,就是断言,判断执行的结果是否符合预期
// 事务开始
lr_start_transaction("事务名称"); // 这个需要放到Http请求前面,从结果中查找预期匹配内容
web_reg_find(
"SaveCount=存储匹配次数的变量名",
// 想要匹配的内容
"Text=\"errorCode\" : \"200\",\n",
LAST); web_submit_data(
// 名称,最好用英文
"Hello",
// 接口的 URL,建议 appboss 地址设置成变量,方便切换环境
"Action={appboss}/app/shopBuy/detail?tokenId={tokenId}",
// 提交方式
"Method=POST",
"TargetFrame=",
"Referer=1",
// 返回内容定义的类型
"RecContentType=application/json",
"Referer=",
"Mode=HTML",
ITEMDATA,
// 请求体内容
"Name=传参的键", "Value=传参的值", ENDITEM,
LAST); // 事务结束
// 根据匹配的数量进行判断事务是否成功
if(atoi(lr_eval_string("{存储匹配次数的变量名}"))>)
{
// 事务成功
lr_end_transaction("事务名称", LR_PASS);
}
else
{
// 事务失败
lr_end_transaction("事务名称", LR_FAIL);
}
6. 添加集合点
既然是做性能,自然少不了并发用的集合点
// 集合点,需要放在事务之前
lr_rendezvous("集合点名称"); // 事务开始
lr_start_transaction("事务名称"); // 这个需要放到Http请求前面,从结果中查找预期匹配内容
web_reg_find(
"SaveCount=存储匹配次数的变量名",
// 想要匹配的内容
"Text=\"errorCode\" : \"200\",\n",
LAST); web_submit_data(
// 名称,最好用英文
"Hello",
// 接口的 URL,建议 appboss 地址设置成变量,方便切换环境
"Action={appboss}/app/shopBuy/detail?tokenId={tokenId}",
// 提交方式
"Method=POST",
"TargetFrame=",
"Referer=1",
// 返回内容定义的类型
"RecContentType=application/json",
"Referer=",
"Mode=HTML",
ITEMDATA,
// 请求体内容
"Name=传参的键", "Value=传参的值", ENDITEM,
LAST); // 事务结束
// 根据匹配的数量进行判断事务是否成功
if(atoi(lr_eval_string("{存储匹配次数的变量名}"))>)
{
// 事务成功
lr_end_transaction("事务名称", LR_PASS);
}
else
{
// 事务失败
lr_end_transaction("事务名称", LR_FAIL);
}
Loadrunner:脚本编写通用模板(Http协议类型)的更多相关文章
- LoadRunner脚本编写(转)
性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了.还有非计算机专业出身的测试员 ...
- LoadRunner脚本编写
性能測试project师要懂代码么?答案是必须的.好多測试员觉得在loadrunner中编写脚本非常难非常牛X ,主要是大多測试人员并未做过开发工作,大学的那点程序基础也忘记的几乎相同了. 还有非计算 ...
- LoadRunner脚本编写之二
LoadRunner脚本编写之二 编程基本语法必须要记牢.程序的思想也很重要. 下面来回顾一下嵌套循环例子. Action() { int i,j; //生命两个变量 for ( ...
- LoadRunner脚本编写(5)-- 检查点,关联等函数
LoadRunner脚本编写(5)-- 检查点,关联等函数 http://www.51testing.com/?34866/action_viewspace_itemid_70224.html来继续翻 ...
- LoadRunner脚本编写(6)— 数据类型转换和字符串操作
LoadRunner脚本编写(6)— 数据类型转换和字符串操作 一,数据类型转换 没有使用过C编程的LoadRunner脚本编写者会发现在数据类型转化方面比较困难.下面介绍这方面的知识. 1. 相似函 ...
- LoadRunner脚本编写之三(事务函数)
LoadRunner脚本编写之三(事务函数) 关于脚本的这块,前两篇都在讲C语言,其实,要整理点实用的东西挺难,在应用中多对录制的脚本分析,但对于新手学脚本确实无从下手. 先贴一个脚本: 完整代码: ...
- LoadRunner脚本编写之一
LoadRunner脚本编写之一 性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不 ...
- loadrunner脚本编写经验
最近写了不少loadrunner脚本,记录一下心得:1 loadrunner脚本基本可以认为就是c语言代码(loadrunner支持不同语言的脚本,默认生成的是用c语言写的脚本)2 loadrunne ...
- loadrunner脚本编写http协议
随机推荐
- 计算1-9总共九个数字可以满足abc+def=hij这样的式子
计算1-9总共九个数字可以满足abc+def=hij这样的式子:其中abcdefghij九个数字各个都不相同,它们都属于1-9个数字中: 首先,第一种方法很简单很暴力,直接枚举,这样的话时间复杂度高: ...
- spring中的bean的生命周期
bean的生命周期:bean的创建 —— 初始化 ——销毁的过程 容器管理bean的生命周期,我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期就会调用我们的方法 在xml配置文件中是在 ...
- [OpenCV] sift demo
运行环境:vs2012+opencv320 sift 需要的头文件为 <opencv2/xfeatures2d.hpp> #include <opencv2/opencv.hpp&g ...
- 《C专家编程》读书笔记之第8~11章
八.为什么程序员无法分清万圣节和圣诞节 1. 整形提升是指char,short int和位段类型(无论signed或unsigned)以及枚举类型将被提升为int或unsigned int(如果int ...
- React Native 中 component 生命周期
React Native 中 component 生命周期 转自 csdn 子墨博客 http://blog.csdn.net/ElinaVampire/article/details/518136 ...
- 使用Google提供的ZXing Core,Java生成、解析二维码
1.maven项目中,pom.xml中引入ZXing Core工具包: <!-- https://mvnrepository.com/artifact/com.google.zxing/core ...
- Proxy 和aop
Proxy 就是代理,意思就是 你不用去做,别人代替你去处理 先来个静态代理 public interface Hello { void say(String name); } 被代理类 public ...
- 剑指offer38:输入一棵二叉树,求该树的深度
1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择 ...
- 【KMP】Radio Transmission
问题 L: [KMP]Radio Transmission 题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的.但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入 第一行给出字 ...
- 二、python数据类型、字符编码、文件处理
一. 前言 1. 什么是数据: x = 10,10就是我们要存储的数据 2. 为何数据要分不同的类型 数据是用来表示状态的, 不同的状态就应该用不同类型的数据去表示 3. 数据类型 数字(整型.长整型 ...