IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> LoadRunner中查找和替换字符串 -> 正文阅读

[开发测试]LoadRunner中查找和替换字符串

?使用Loadrunner做接口或者压力测试时,我们经常会碰到请求参数中部分是来自于前置接口的情况,且是动态变化的,这时候,我们需要从前置接口响应中获取到需要的数据,然后替换到当前的接口请求参数的目标位置中,但是LR中并没有提供查找以及替换字符串的函数,前文

Loadrunner 拼接字符串(从响应中截取字段并添加新的字段作为下次请求参数)

中,我们使用字符串拼接的方式解决了这一问题,但是如果一个脚本中存在多次这种情况,现实情况也通常就是这样的,就会显得很麻烦和费力,那有没有其他的办法呢?

办法自然是有的,虽然LR中没有支持查找并替换字符串的函数,但可以自己封装一个替换字符串函数,之后需要替换时调用函数即可。

1、封装字符串替换函数lr_replace

// ----------------------------------------------------------------------------
// 参数:
// src (in) - 指向源字符串的指针
// from (in) - 指向搜索文本的指针
// to (in) - 指向替换文本的指针
//
// 返回:
// 返回一个指向包含字符串的动态分配内存的指针
// 'from' 指向的文本被替换为'to' 指向的文本。
// ----------------------------------------------------------------------------
char *strReplace(const char *src, const char *from, const char *to)
{
? char *value;
? char *dst;
? char *match;
? int size;
? int fromlen;
? int tolen;


? size = strlen(src) + 1;
? fromlen = strlen(from);
? tolen = strlen(to);


? value = (char *)malloc(size);


? dst = value;


? if ( value != NULL )
? {

? ? for ( ;; )
? ? {
? ? ? match = (char *) strstr(src, from);
? ? ? if ( match != NULL )
? ? ? {
? ? ? ? size_t count = match - src;


? ? ? ? char *temp;


? ? ? ? size += tolen - fromlen;


? ? ? ? temp = (char *)realloc(value, size);


? ? ? ? if ( temp == NULL )
? ? ? ? {
? ? ? ? ? free(value);
? ? ? ? ? return NULL;
? ? ? ? }


? ? ? ? dst = temp + (dst - value);
? ? ? ? value = temp;


? ? ? ? memmove(dst, src, count);
? ? ? ? src += count;
? ? ? ? dst += count;


? ? ? ? memmove(dst, to, tolen);
? ? ? ? src += fromlen;
? ? ? ? dst += tolen;
? ? ? }
? ? ? else
? ? ? {
? ? ? ? strcpy(dst, src);
? ? ? ? break;
? ? ? }
? ? }?
? }
? return value;
}


int lr_replace( const char *lrparam, char *findstr, char *replacestr )
{
? int res = 0;
? int size;
? char *lrp;
? char *result_str;

? size = strlen(lrparam) + 1;
? lrp=(char *)malloc(size);


? sprintf(lrp, "{%s}", lrparam);
? result_str = strReplace(lr_eval_string(lrp), findstr, replacestr);
? if (result_str != NULL)
? {
? ? lr_save_string(result_str, lrparam);
? ? free(result_str);
? ? res = 1;
? }
? return res;
}?

2、截取用来替换的字符串purchOrderList

web_set_max_html_param_len("262144"); // 默认最大长度为256

// 从响应中截取用来替换的字符串

?? ? web_reg_save_param_ex(
?? ??? ?"ParamName=purchOrderList", // 修改参数名,便于记忆
?? ??? ?"LB=\"data\":{", // 修改 token 值解析算法
?? ??? ?"RB=\"}}",
?? ??? ?SEARCH_FILTERS,
?? ??? ?"Scope=Body",
?? ??? ?"RequestUrl=*/api/customize/user/getSetting?tableKey=purchOrderList-com.slip.spd.entity.vo.purch.PurchOrderVO*",
?? ??? ?LAST);

?? ?web_custom_request("getSetting",?
?? ??? ?"URL={URL}/api/customize/user/getSetting?tableKey=purchOrderList-com.slip.spd.entity.vo.purch.PurchOrderVO",?
?? ??? ?"Method=GET",?
?? ??? ?"Resource=0",?
?? ??? ?"RecContentType=application/json",?
?? ??? ?"Referer={URL}/",?
?? ??? ?// "Snapshot=t71.inf",?
?? ??? ?"Mode=HTML",?
?? ??? ?"EncType=application/json;charset=UTF-8",?
?? ??? ?LAST);

3、保存源字母串,即用来请求的参数new_setting

????// 红色head部门为需要被替换的字符串
?? ?lr_save_string("{\"curPage\": 1,\"pageSize\": 20,\"customizeUserVO\": {head\"}}},\"queryMap\":{\"deptAuth\":{\"asTbName\":\"purch_order\",\"columnName\":\"dept_id\",\"queryType\":\"IN\",\"queryCategory\":\"AND\",\"value\":\"deptAuth\"},\"supplierAuth\":{\"asTbName\":\"purch_order\",\"columnName\":\"supplier_id\",\"queryType\":\"IN\",\"queryCategory\":\"AND\",\"value\":\"supplierAuth\"},\"orderNo\":{\"queryType\":\"ALL_LIKE\",\"value\":null},\"applicationNo\":{\"queryType\":\"ALL_LIKE\",\"value\":null},\"deptId\":{\"queryType\":\"IN\",\"value\":null},\"supplierId\":{\"queryType\":\"IN\",\"value\":null},\"createUser\":{\"queryType\":\"IN\",\"value\":null},\"createTime\":{\"queryType\":\"BETWEEN\",\"value\":null},\"updateUser\":{\"queryType\":\"IN\",\"value\":null},\"updateTime\":{\"queryType\":\"BETWEEN\",\"value\":null},\"status\":{\"queryType\":\"IN\",\"value\":null},\"remark\":{\"queryType\":\"ALL_LIKE\",\"value\":null},\"purchUser\":{\"queryType\":\"IN\",\"value\":null},\"purchTime\":{\"queryType\":\"BETWEEN\",\"value\":null},\"lastReceiveTime\":{\"queryType\":\"BETWEEN\",\"value\":null},\"lastStoreTime\":{\"queryType\":\"BETWEEN\",\"value\":null},\"beforeMergeStatus\":{\"queryType\":\"IN\",\"value\":null},\"mergeType\":{\"queryType\":\"IN\",\"value\":null},\"receiveContacts\":{\"queryType\":\"IN\",\"value\":null},\"receivePhone\":{\"queryType\":\"IN\",\"value\":null},\"receiveProvince\":{\"queryType\":\"IN\",\"value\":null},\"receiveProvinceValue\":{\"queryType\":\"IN\",\"value\":null},\"receiveCity\":{\"queryType\":\"IN\",\"value\":null},\"receiveCityValue\":{\"queryType\":\"IN\",\"value\":null},\"receiveCounty\":{\"queryType\":\"IN\",\"value\":null},\"receiveCountyValue\":{\"queryType\":\"IN\",\"value\":null},\"realAddress\":{\"queryType\":\"IN\",\"value\":null}},\"groupMap\":{},\"groups\":[],\"queryParams\":{}}",
?? ??? ??? ??? ? ? ?"new_setting");
?? ?

?4、查找并替换字符串

? ? // 输出查看源字符串和目标字符串
?? ?lr_output_message("1_new_setting: %s",lr_eval_string("{new_setting}"));
?? ?lr_output_message("purchOrderList: %s",lr_eval_string("{purchOrderList}"));

??? //? ? 用截取出的purchOrderList替换head
?? ?lr_replace("new_setting", "head", lr_eval_string("{purchOrderList}"));

? ?// 输出替换后的字符串

?? ?lr_output_message("2_new_setting: %s",lr_eval_string("{new_setting}"));

5、查看替换结果

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:38:39  更:2021-11-22 12:40:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:51:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码