性能测试学习第三天-----loadrunner接口测试&中文乱码处理

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\":\"[email protected]\",\"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

原文地址:https://www.cnblogs.com/qingyuu/p/11263297.html

时间: 2024-08-26 15:51:02

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

性能测试学习笔记-如何管理loadrunner的临时文件

lr默认保存一些乱七八糟的文件到C:\Documents and Settings\wushi\Local Settings\Temp文件夹下,时间长了会占用大量空间. 在每台loadrunner的客户端机器上,都设置了一个lrtemp文件(可能是d:\lrtemp:也可能是e:\lrtemp).在打开controller后,到result settings设置一下路径,指到这个lrtemp文件下.等你保存好报告后,请将lrtemp里所产生的临时文件删除掉.这样就能避免这些临时文件占用大量空间了

cocos2dx学习笔记(4)——VS2010中的中文乱码问题

当你想使用中文时,你是否有这样的一个困惑. 把样例中的HelloWorld改成中文的 "你好,世界!". 然后编译运行,发现居然是个乱码!!! 因为cocos2dx中使用的是UTF-8字符集,而VS中确实ANSI. 所以我们需要对其进行字符集转换. 然后纵里寻它求百度,终于找到了解决方案. 一个函数搞定! #include "cocos2d.h" char* toUTF(const char* strGB2312) { int iLen = MultiByteToW

loadrunner 脚本中文乱码

loadrunner 脚本中文乱码 1.新建脚本--->选择协议(Http)-->选项-->高级-->选择“支持字符集”并点选“UTF-8”: 2.在回放脚本之前:Vuser-->运行时设置-->浏览器-->浏览器仿真-->更改-->使用浏览器-->语言下来选择 “chinese(RPC)”:

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

Hive注释中文乱码 创建表的时候,comment说明字段包含中文,表成功创建之后,中文说明显示乱码 create external table movie( userID int comment '用户ID', movieID int comment '电影ID', rating int comment '电影评分', timestamped bigint comment '评分时间戳', movieName string comment '电影名字', movieType string co

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

[email protected]:~$ gedit /var/lib/locales/supported.d/local 添加: zh_CN.GBK GBK zh_CN.GB2312 GB2312 终端执行命令: sudo dpkg-reconfigure --force localesGenerating locales...  en_AG.UTF-8... done  en_AU.UTF-8... done  en_BW.UTF-8... done  en_CA.UTF-8... done

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

今天学习使用python爬虫的时候发现爬到的网页中文会乱码,一直网上搜索解决办法,一个一个试验过去,发现还是乱码,然后我就开始使用其它方法测试,用python自带的编辑器打开是正常的,发现是notepad++这款编辑器的问题,我更改了编码方式为utf-8无bom,尝试了所有设置,都没有用,新建,打开文件默认一直都是ansi格式,pynpp这款快捷打开.py格式的插件运行一直乱码,虽然没有发现问题的根源,但是知道编码是没有问题的,主要是这款编辑器出现的一些小问题 不过百度过后发现如果是乱码问题,最

LoadRunner显示中文乱码的问题

lr_convert_string_encoding Converts a string to a different encoding. Return Values:This function returns 0 on success and -1 on failure. C Language int lr_convert_string_encoding( const char *sourceString, const char *fromEncoding, const char *toEnc

三步解决MySQL中文乱码问题

1.进入CMD,连接上MySQL,分别执行以下指令(前提必须将MySQL安装路径配置到系统Path环境变量中) show variables like "%char%"; SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf8'; show variables like "%char%"; 2.进入MySQL安装路径,找

JSP中文乱码问题终极解决方案

在介绍方法之前我们首先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中文乱码问题有如下几个方面:页面乱码.参数乱码.表单乱码.源文件乱码.下面来逐一解决其中的乱码问题. 一.JSP页面中文乱码 在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码. 先看一个JSP程序: [java] view plaincopyprint? <%@ page language="java" import="java.util.