loadrunner 接口测试:   get、post(3种参数格式)、cookie及token处理、加密接口、webservice、socket、文件上传接口、文件下载接口     &  中文乱码处理

1.get请求

Action()
{
//开始事务--get请求
lr_start_transaction("get"); //关联函数 获取接口返回信息
web_reg_save_param("msg",
"LB=message\":\"",
"RB=\"",
"Ord=1",
LAST); //get请求
web_url("get",
"URL=http://localhost:8080/pinter/com/getSku?id={num}",
LAST ); // strcmp函数用来判断两个字符串是否相等,如果函数返回值==0,代表两个字符串相等
if (strcmp(lr_eval_string("{msg}") ,"success") == 0) {
lr_end_transaction("get", LR_PASS);
}else{
lr_end_transaction("get", LR_FAIL);
}
return 0;
}

2.post请求--参数为key=value形式

Action()
{
lr_start_transaction("post-1");
web_reg_save_param("msg",
"LB=message\":\"",
"RB=\"",
"Ord=1",
LAST); web_custom_request("post-1", "Method=POST",
"URL=http://localhost:8080/pinter/com/login",
"Body=userName=admin&password=1234",
LAST ); if (strcmp(lr_eval_string("{msg}") ,"success") == 0) {
lr_end_transaction("post-1", LR_PASS);
}else{
lr_end_transaction("post-1", LR_FAIL);
}
return 0;
}

3.post请求--参数为json形式

Action()
{
lr_start_transaction("post-2"); web_reg_save_param("msg",
"LB=message\":\"",
"RB=\"",
"Ord=1",
LAST); // json接口都需要添加一个content-type的信息头
web_add_header("Content-type","application/json"); web_custom_request("post-2", "Method=POST", "URL=http://localhost:8080/pinter/com/register", "Body={\"userName\":\"test\",\"password\":\"1234\",\"gender\":1,\"phoneNum\":\"110\",\"email\":\"beihe@163.com\",\"address\":\"北京市\"}", LAST ); // 把服务器返回的utf-8格式的数据,从utf-8转换为system_locale,并且把转换后的数据保存到一个新的web参数afterMsg
lr_convert_string_encoding(lr_eval_string("{msg}") ,LR_ENC_UTF8 ,LR_ENC_SYSTEM_LOCALE ,"afterMsg" );
if (strcmp(lr_eval_string("{afterMsg}") ,"注册成功") == 0) {

lr_end_transaction("post-2", LR_PASS); }else{ lr_end_transaction("post-2", LR_FAIL);
}
return 0;
}

4.post请求:参数为data={}格式

Action()
{
lr_start_transaction("post-3"); web_reg_save_param("msg",
"LB=message\":\"",
"RB=\"",
"Ord=1",
LAST);
web_custom_request("post-3", "Method=POST",
"URL=http://localhost:8080/pinter/com/buy",
"Body=param={\"skuId\":123,\"num\":10}",
LAST ); if (strcmp(lr_eval_string("{msg}") ,"success") == 0) {
lr_end_transaction("post-3", LR_PASS);
}else{
lr_end_transaction("post-3", LR_FAIL); }
return 0;
}

5.需要cookie的接口

 两种解决方案:

  方案一:loadrunner会自动处理cookie,只需在前面增加登录接口,后续请求会自动带上cookie;

  方案二:通过抓包获取cookie后,存入参数文件中,后续请求增加web_add_cookie(),增加cookie参数信息。

6.需要token的接口

  通过抓包获取token后,存入参数文件中,后续请求增加web_add_header(),增加token参数信息。

7.加密的接口,例如MD5

1. loadrunner脚本中需要调用外部函数( CMd5 )

  1、将外部函数.h文件添加到LR中

  2、在globals.h文件中引入添加的头文件,如#include “md5.h”
  3、在脚本中直接调用对应的函数即可,需要注意,C语言函数返回的都是C语言参数,如果想在
  LR的web函数中使用,需要进行转换

   2.例如:  {"phoneNum":"123434","optCode":"testfan","timestamp":"1211212","sign":"fdsfdsaafsasfas"}

  其中,sign字段是按照特定算法进行加密后的数据,接口的签名算法为:sign=Md5(phoneNum+ optCode+ timestamp),签名过程中涉及到的C语言函数字符串拼接

char str[50];
web_save_timestamp_param("tStamp", LAST );  // 保存当前时间戳 memset(str,0,sizeof(str)); // 清除str数组,重置内存,从0开始到数组最大长度。如果不清除,多次运行时str会累计
strcat(str,"123434");   //字符串拼接
strcat(str,"testfan");
strcat(str,"tStamp"); lr_save_string(CMd5(str),"md5sign") ; // 转换C语言参数为 web类型参数
web_add_header("Content-type","application/json");
web_custom_request("sign", 
"Method=POST",
"URL=http://localhost:8080/pinter/com/buy",
"Body={\"phoneNum\":\"123434\",\"optCode\":\"testfan\",\"timestamp\":\"{tStamp}\",\"sign\":\"{md5sign}\"}",
LAST );

8.webservice接口: 可以直接使用http协议post请求来测试

使用web_custom_request函数:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
   接口描述:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
   要点

1、添加header Content-type:text/xml
       2、请求报文为xml格式,直接放在body中,报文内容可以查看接口文档,或者通过soupUI工具导入wsdl地址,可以看到请求报文
       3、使用bejson压缩请求报文后,对引号转义;

4、使用web_custom_request函数

Action()
{
web_add_header("Content-type","text/xml"); web_custom_request("webservice", "Method=POST",
"URL=http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx",
"Body=<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\"><mobileCode>139{num}</mobileCode><userID></userID></getMobileCodeInfo></soap:Body></soap:Envelope>",
LAST );
return 0;

 9.socket接口

#include "lrs.h"
Action()
{
lrs_set_recv_timeout2(0,0); lr_start_transaction("tcp"); // 创建一个tcp链接
lrs_create_socket ("socket0", "TCP", "RemoteHost=127.0.0.1:8888", LrsLastArg); // 发送数据
lrs_send ("socket0", "buf0", LrsLastArg ); // 接受数据
lrs_receive ("socket0", "buf1", LrsLastArg ); // 关联函数
//lrs_save_param ("socket0",NULL,"RecivedData", 3,7); lrs_save_searched_string("socket0",NULL,"RecivedData","LB/BIN=|",NULL, 2,2,2); if (strcmp(lr_eval_string("<RecivedData>") , "SUCCESS") == 0) {
lr_end_transaction("tcp", LR_PASS);
}else{
lr_end_transaction("tcp", LR_FAIL);
} // 关闭链接
lrs_close_socket ("socket0");
return 0;
}

10. 文件上传接口

Action()
{
web_reg_save_param("msg",
"LB=",
"RB=",
"Ord=1",
"Search=Body",
LAST); //web_add_header("Content-type","multipart/form-data");
web_submit_data("Attachments",
"Action=http://localhost:8080/pinter/file/api/upload",
"Method=POST",
"EncType=multipart/form-data",
"TargetFrame=",
"RecContentType=text/html",
"Snapshot=t5.inf",
"Mode=HTML",
ITEMDATA,
"Name=file",
"Value=C:\\username.dat",
"File=yes",
ENDITEM,
LAST );
return 0;
}

11.文件下载接口

Action()
{
int size;
lr_start_transaction("download");
web_url("get",
"URL=http://localhost:8080/pinter/file/api/download?id={fileId}",
LAST );

  size = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE); lr_output_message("下载的字节数总大小为:%d", size); if (size > atoi(lr_eval_string("{filesize}"))) {
lr_end_transaction("download", LR_PASS);
}else{
lr_end_transaction("download", LR_FAIL);
}
return 0;
}

中文乱码处理

录制产生的脚本中显示为乱码:-- 录制时设置-Option-Advance-勾选utf-8
◼ 接口返回数据显示为乱码,原因是国内服务器采用UTF-8编码方式,但loadrunner自身使用的是GBK编码方式。
  使用lr_convert_string_encoding来做编码转换
  lr_convert_string_encoding(lr_eval_string(“{recv}”), LR_ENC_UTF8, LR_ENC_SYSTEM_LOCALE, “afterEncode");
1、 从客户端到服务端提交中文乱码
  LR_ENC_SYSTEM_LOCALE → LR_ENC_UTF8
  注意:中文数据转换后,需要使用strcpy函数去除尾部空字符串
2、从服务端接收中文乱码
  LR_ENC_UTF8 → LR_ENC_SYSTEM_LOCALE

性能测试学习第三天-----loadrunner接口测试&中文乱码处理的更多相关文章

  1. loadrunner 脚本中文乱码

    loadrunner 脚本中文乱码 1.新建脚本--->选择协议(Http)-->选项-->高级-->选择“支持字符集”并点选“UTF-8”: 2.在回放脚本之前:Vuser- ...

  2. JMeter接口测试中文乱码问题总结

    在测试过程中遇到了请求json串中文乱码,所以查看了这篇文章,将字符集修改后,乱码问题已经处理. 转载http://blog.csdn.net/qing_java/article/details/69 ...

  3. Hive学习之路(三)Hive处理中文乱码

    Hive注释中文乱码 创建表的时候,comment说明字段包含中文,表成功创建之后,中文说明显示乱码 create external table movie( userID int comment ' ...

  4. 性能测试学习第四天-----loadrunner:jdbc批量制造测试数据 & controller应用

    Javavuser协议 1.过程概述:在eclipse中用java编写sql执行脚本,复制到lr中,调整后通过参数化迭代批量制造测试数据: 2.步骤: 1).在eclipse中新建java proje ...

  5. 性能测试学习 第七课 --loadrunner中JavaVuser脚本的编写

    1.环境准备:      LoadRunner11----->对应JDK1.6版本(32位) LoadRunner12----->对应JDK1.7版本(32位) (一).JDK下载安装完成 ...

  6. 使用notepad++学习python爬虫,print网页中文乱码问题

    今天学习使用python爬虫的时候发现爬到的网页中文会乱码,一直网上搜索解决办法,一个一个试验过去,发现还是乱码,然后我就开始使用其它方法测试,用python自带的编辑器打开是正常的,发现是notep ...

  7. loadrunner出现中文乱码

    录制的脚本出现乱码 录制的时候出现乱码,有的时候可以正常回放,我们可以不用管它,但如果影响回放,我们可以使用以下方法解决: 1)更改录制选项 选择菜单栏 Tools --> Recording ...

  8. 【Linux/Ubuntu学习 10】unbuntu 下 eclipse 中文乱码的解决

    wangdd@wdd-pc:~$ gedit /var/lib/locales/supported.d/local 添加: zh_CN.GBK GBK zh_CN.GB2312 GB2312 终端执行 ...

  9. Web jsp开发学习——dbcp jsp连接MySQL出现中文乱码解决

    开发过程中,通过dbcp.properties连接MySQL数据库,向数据库中插入中文字符时,出现乱码情况. 通过查阅资料,发现出现乱码的原因:MySQL数据库使用的是UTF-8编码,而dbcp.pr ...

随机推荐

  1. 20131214-EditPlus快捷键-第二十一天

    EditPlus 快捷键 文件   FileFtpUpload Ctrl+Shift+S 上传文件到 FTP 服务器 FileNew Ctrl+N 新建普通的文本文档 FileNewHtml Ctrl ...

  2. 【最小生成树之Kruskal算法】

    看完之后推荐再看一看[最小生成树之Prim算法]-C++ 定义:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.最小生成树可以用kr ...

  3. 《C Primer Plus(第6版)中文版》勘误

    搬运自己2016年11月28日发布于SegmentFault的文章.链接:https://segmentfault.com/a/1190000007626460 本勘误由本人整理并发布,仅针对下方列出 ...

  4. 个人永久性免费-Excel催化剂功能第101波-批量替换功能(增加正则及高性能替换能力)

    数据处理无小事,正如没有人活在真空理想环境一下,在数据分析过程中,也没有那么真空理想化的数据源可以使用,数据处理占据数据分析的80%的时间,每一个小小的改善,获益都良多.Excel查找替换,有其局限性 ...

  5. NameNode和SecondaryNameNode的工作机制

    NameNode&Secondary NameNode 工作机制 NameNode: 1.启动时,加载编辑日志和镜像文件到内存 2.当客户端对元数据进行增删改,请求NameNode 3.Nam ...

  6. Word公式显示为{EMBED Equation.DSMT4}

    具体问题表现为: 添加了Mathtype公式后显示为{EMBED Equation.DSMT4}, 超链接显示为大花括号和描述文本, 页码显示为​ page... 具体解决方法如下,(以Office2 ...

  7. MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

    之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view  component, 可以认为view component是 ...

  8. 【iOS】创建真机调试证书

    今天第一次完整的在一个开发者账号里添加证书,刚接触,还真有些不熟悉,还好找到了一篇不错的文章:iOS开发:创建真机调试证书 ,做了很详细的介绍. 分享一下!!

  9. oracle常用的一些sql命令

    //查看系统当前时间   HH24 24小时制  MI是正确的分钟 select to_char(sysdate,'yyyy-mm-dd HH24:MI:SS') from dual //HH非24 ...

  10. spring实战学习笔记(一)spring装配bean

    最近在学习spring boot 发现对某些注解不是很深入的了解.看技术书给出的实例 会很疑惑为什么要用这个注解? 这个注解的作用?有其他相同作用的注解吗?这个注解的运行机制是什么?等等 spring ...