loadRunner之接口测试

接口测试需求:

1、脚本支持循环测试,并且每次测试的请求报文不一样(字段stbId每次请求不一样)

2、输出每次测试的请求报文和响应报文

3、根据响应报文判断接口调用是否成功

4、输出最终测试结果:循环次数,成功次数,失败次数

请求报文样例:

{
    "appId":"10101",
    "stbId":"stbId_123456789",
    "userId":"userId_123456789",
    "ppvId":"ppvId_123456789",
    "contentId":"contentId_123456789",
    "transationId":"transationId_123456789",
    "serviceType":"2",
    "recordTime":"20150115105332"
}

响应报文样例:

{
        "result":"0",
        "resultNotes":"",
        "transationId":"transationId_123456789"
}

测试脚本:vuser_init、Action、vuser_end、globals.h

vuser_init():

vuser_init()
{
    return 0;
}

Action():

Action()
{
     // 定义请求报文的URL
     char requestUrl[1024] = "URL=http://21.254.43.61:6663/eps/eps?command=freeTrialNotice";

     // 定义请求报文的BODY,对参数stbId参数化
     char requestBody[1024] = "BODY="
            "\n{\n"
            "    \"appId\":\"10101\",\n"
            "    \"stbId\":\"{freeTrialNotice}\",\n"
            "    \"userId\":\"userId_123456789\",\n"
            "    \"ppvId\":\"ppvId_123456789\",\n"
            "    \"contentId\":\"contentId_123456789\",\n"
            "    \"transationId\":\"transationId_123456789\",\n"
            "    \"serviceType\":\"2\",\n"
            "    \"recordTime\":\"20150115105332\"\n"
            "}\n";

     // 从响应报文中获取参数result
     web_reg_save_param("result",
                        "LB=\"result\":\"",
                        "RB=\",",
                        LAST);

     // 从响应报文中获取参数resultNotes
     web_reg_save_param("resultNotes",
                        "LB=\"resultNotes\":\"",
                        "RB=\",",
                        LAST);

     // 从响应报文中获取参数transationId
     web_reg_save_param("transationId",
                        "LB=\"transationId\":\"",
                        "RB=\"",
                        LAST);

     // 发起请求
     web_custom_request("freeTrialNoticeTest",
                        "Method=POST",
                        "RecContentType=text/html",
                        requestUrl,
                        requestBody,
                        LAST);

     // 打印请求报文
     lr_output_message("\n请求报文%s\n请求报文%s",requestUrl,requestBody);

     // 打印freeTrialNotice变量值
     lr_output_message("freeTrialNotice=%s",lr_eval_string("{freeTrialNotice}"));

     // 打印响应报文
     lr_output_message("响应报文:\n"
                       "{\n"
                       "    \"result\":\"%s\",\n"
                       "    \"resultNotes\":\"%s\",\n"
                       "    \"transationId\":\"%s\"\n"
                       "}\n",
                       lr_eval_string("{result}"),
                       lr_eval_string("{resultNotes}"),
                       lr_eval_string("{transationId}"));

     // 根据返回的result判断接口调用是否成功,0:成功,非0:失败
     if(atoi(lr_eval_string("{result}"))==0){
         lr_output_message("result为%s,接口调用成功",lr_eval_string("{result}"));
         // 统计成功数
         countSuccess += 1;
     }else{
         lr_output_message("result为%s,接口调用失败",lr_eval_string("{result}"));
         // 统计失败数
         countFailed += 1;
     }

     return 0;
}

vuser_end():

vuser_end()
{
    // 打印最终的测试结果
    lr_output_message("循环次数:%d,成功数:%d,失败数:%d",countSuccess + countFailed,countSuccess,countFailed);
    return 0;
}

globals.h:

#ifndef _GLOBALS_H
#define _GLOBALS_H

//--------------------------------------------------------------------
// Include Files
#include "lrun.h"
#include "web_api.h"
#include "lrw_custom_body.h"

// 定义全局变量 成功次数
int countSuccess = 0;

// 定义全局变量 失败次数
int countFailed = 0;

//--------------------------------------------------------------------
// Global Variables

#endif // _GLOBALS_H

脚本循环执行3次,结果如下:

Virtual User Script started at : 2015-05-15 12:08:38
Starting action vuser_init.
Web Turbo Replay of LoadRunner 11.0.0 for Windows 7; build 8859 (Aug 18 2010 20:14:31)      [MsgId: MMSG-27143]
Run Mode: HTML      [MsgId: MMSG-26000]
Run-Time Settings file: "E:\VU\freeTrialNotice\\default.cfg"      [MsgId: MMSG-27141]
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(20): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(26): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(32): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(38): web_custom_request("freeTrialNoticeTest") was successful, 78 body bytes, 142 header bytes      [MsgId: MMSG-26386]
Action.c(46):
请求报文URL=http://21.254.43.61:6663/eps/eps?command=freeTrialNotice
请求报文BODY=
{
    "appId":"10101",
    "stbId":"{freeTrialNotice}",
    "userId":"userId_123456789",
    "ppvId":"ppvId_123456789",
    "contentId":"contentId_123456789",
    "transationId":"transationId_123456789",
    "serviceType":"2",
    "recordTime":"20150115105332"
}
Action.c(49): freeTrialNotice=stbId_123456789
Action.c(52): 响应报文:
{
    "result":"0",
    "resultNotes":"",
    "transationId":"transationId_123456789"
}
Action.c(64): result为0,接口调用成功
Ending action Action.
Ending iteration 1.
Starting iteration 2.
Starting action Action.
Action.c(20): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(26): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(32): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(38): web_custom_request("freeTrialNoticeTest") was successful, 78 body bytes, 142 header bytes      [MsgId: MMSG-26386]
Action.c(46):
请求报文URL=http://21.254.43.61:6663/eps/eps?command=freeTrialNotice
请求报文BODY=
{
    "appId":"10101",
    "stbId":"{freeTrialNotice}",
    "userId":"userId_123456789",
    "ppvId":"ppvId_123456789",
    "contentId":"contentId_123456789",
    "transationId":"transationId_123456789",
    "serviceType":"2",
    "recordTime":"20150115105332"
}
Action.c(49): freeTrialNotice=stbId_12345678
Action.c(52): 响应报文:
{
    "result":"0",
    "resultNotes":"",
    "transationId":"transationId_123456789"
}
Action.c(64): result为0,接口调用成功
Ending action Action.
Ending iteration 2.
Starting iteration 3.
Starting action Action.
Action.c(20): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(26): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(32): Registering web_reg_save_param was successful      [MsgId: MMSG-26390]
Action.c(38): web_custom_request("freeTrialNoticeTest") was successful, 105 body bytes, 143 header bytes      [MsgId: MMSG-26386]
Action.c(46):
请求报文URL=http://21.254.43.61:6663/eps/eps?command=freeTrialNotice
请求报文BODY=
{
    "appId":"10101",
    "stbId":"{freeTrialNotice}",
    "userId":"userId_123456789",
    "ppvId":"ppvId_123456789",
    "contentId":"contentId_123456789",
    "transationId":"transationId_123456789",
    "serviceType":"2",
    "recordTime":"20150115105332"
}
Action.c(49): freeTrialNotice=
Action.c(52): 响应报文:
{
    "result":"1",
    "resultNotes":"蹇呭~鍙傛暟瀛樺湪绌哄€硷紒",
    "transationId":"transationId_123456789"
}
Action.c(68): result为1,接口调用失败
Ending action Action.
Ending iteration 3.
Ending Vuser...
Starting action vuser_end.
vuser_end.c(4): 循环次数:3,成功数:2,失败数:1
Ending action vuser_end.
Vuser Terminated.
时间: 2024-11-05 18:49:48

loadRunner之接口测试的相关文章

使用Loadrunner进行接口测试

在工作中很多时候都需要进行接口测试,如果只是进行接口的功能测试这个很简单,两种类型: 1.如果是基于get的直接使用浏览器进行访问,查看服务器返回的数据是否正确就行, 2.如果是基于post的可以接触一些插件进行测试,但是不推荐,那样就只能是慢慢的一直从事功能测试,所以这里建议使用脚本进行测试,经常使用的是使用python编写一个发送请求的脚本,查看服务器返回的数据 当然这里要说的不是这两个方法,这里说的是我们很多初级测试员所期望的用loadrunner进行性能测试,其实性能测试不只是你会一个工

Loadrunner 接口测试的两种方法

其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程. 方法一.用LoadRunner实现接口测试 大家都知道LoadRunner是一种性能测试工具,但它也可以用在我们做接口测试的时候.开发人员开发出来的接口,提供给测试人员详细的接口使用说明书,该说明书最基本的要求如下: 接口测试地址:/SNS/Publish 请求报文参数说明: 参数名称 参数描述 字符类型 字符值

LR进行接口测试

其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程. 方法一.用LoadRunner实现接口测试 大家都知道LoadRunner是一种性能测试工具,但它也可以用在我们做接口测试的时候.开发人员开发出来的接口,提供给测试人员详细的接口使用说明书,该说明书最基本的要求如下: 接口测试地址:/SNS/Publish 请求报文参数说明: 参数名称 参数描述 字符类型 字符值

接口测试的两种方法

自己收藏,原文地址:http://blog.csdn.net/he_jian1/article/details/41978281 其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程. 方法一.用LoadRunner实现接口测试 大家都知道LoadRunner是一种性能测试工具,但它也可以用在我们做接口测试的时候.开发人员开发出来的接口,提供给测试人员详细的接口使用说

Jmeter使用笔记之意料之外的

以下是在测试过程中按照以前loadrunner的思维来做的一点区别: 一.组织方式之setup 在用loadrunner做接口测试的时候如果不是针对login的测试,那么一般也会把login接口放到init中,然后通过关联取得sessionid,userid等值用在后面测试中. 那么在做Jmeter的测试时理所当然的想到了这种组织方式,所以就这么用了,但是却引来了一个不容忽视的问题. 把login放到setup中,登录无论是通过cookie还是session都会存在同一个问题,那就是作用域,co

Loadrunner接口测试-发送JSON格式的请求

昨天接到了一个测试接口的任务,接口的请求参数和返回结果均是JSON字符串,先是使用了函数web_submit_date,执行时报错,查询资料没找到原因,不知道是不是不支持JSON串,有兴趣的可以自己试下.然后尝试用web_custom_request函数,执行后返回的结果都正确,ok,就它了. web_custom_request("refund",                           //VuGen中树形视图中显示的名称         "Url=http:

Loadrunner之HTTP接口测试脚本实例

Loadrunner之HTTP接口测试脚本实例 接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文结果与预期结果进行比对的过程,接口测试可以通过Java发送 http post或者get请求来实现,也可以通过loadrunner来实现,今天介绍下loadrunner接口自动化测试实例: loadrunner接口测试原理是web_submit_data函数发送post或者get请求,将测试用例数据进行

老李分享:loadrunner用javavuser进行接口测试

老李分享:loadrunner用javavuser进行接口测试 在这里分享一个poptest培训过程中案例,在日常工作中会遇到被测试系统通讯都是通过加密的数据包,加密算法是公司自己开发的,并且发送的数据包还要经过系统的压缩,以保证系统的性能.利用loadrunner就无法解决这里的加密的技术问题,利用javavuser会更好一些,可以利用java更强大的包来开发更加完善的脚本. 第一步:loadrunner创建java_vuser脚本 : 在建立脚本界面选择Create/Edit Script-

LoadRunner 接口测试 第一章

LoadRunner中涉及到向服务器发送请求的API方法包括:web_url(), web_submit_form(), web_submit_data(), web_custom_request(), 下面介绍两种我常用的方法: 方法一:使用web_submit_data() web_submit_data("insert",  "Action=http://116.211.23.123/SNS/Publish.htm ",       "Method=