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

  Loadrunner接口测试原理是web_submit_data函数发送post或者get请求,将测试用例数据进行参数化,使用关联获取响应的结果值,与预期结果进行比对,将过程中相关的参数保存到html文件中,从而实现接口自动化,实现代码如下:

1、Init部分:生成html格式文件,文件名称为 test _系统时间(%Y%m%d%H%M%S)_虚拟用户编号,并写入测试结果文件的html开始标识:

//定义结果文件变量

long file;

//定义虚拟用户编号变量

char *vusernum;

//定义测试结果变量

char V_Result[1024];

vuser_init()

{

//取得虚拟用户编号

vusernum=lr_eval_string ("_{vuserid}");

//取得系统时间

lr_save_datetime("%Y%m%d%H%M%S", DATE_NOW, "now_date");

//拼接测试结果文件名称

strcpy(V_Result,"d://test/Result/test");

strcat(V_Result,lr_eval_string("_{now_date}"));

strcat(V_Result,vusernum);

strcat(V_Result,".html");

//生成并打开测试结果文件

file=fopen(V_Result,"at+");

//写入测试文件头部html信息

strcpy(V_Result,"<html><table border='1'><tr>< td>IMSI号码</td><td>预期值</td><td>返回值< /td><td>结果</td></tr>");

fputs(V_Result,file);

return 0;

}

2、Action部分:从参数化文件读取测试参数和预期结果、发送请求并获得服务器返回实际结果,比较测试结果后写入测试结果文件:

Action()

{

//测试结果文本

char V_testres[1024];

//定义返回结果是否正确变量

int result;

//取得IMSI号码

char *V_imsi=lr_eval_string ("{IMSI}");

//设置页面接收最大的字节数,该设置应大于服务器返回内容的大小

web_set_max_html_param_len("20000");

//取得服务器返回内容

web_reg_save_param("filecontent",

"LB=",

"RB=",

"Search=Body",

LAST);

//发送请求

web_submit_data("login",

"Action=http://host:port/autonavit/search?cmd=clientlogin&termver=5&termcode=30001&termdbver=3 ",

"Method=POST",

"RecContentType=text/html",

"Referer=",

"Snapshot=t9.inf",

"Mode=HTTP",

ITEMDATA,

"Name=imsi", "Value={IMSI}", ENDITEM,

LAST);

//比较预期值和实际值是否相等

result=strcmp(lr_eval_string("{YQJG}"),lr_eval_string("{filecontent}"));

if ( result == 0 )

{

strcpy(V_testres,"通过");

}

else

{

strcpy(V_testres,"失败");

}

strcpy(V_Result,"<tr><td>");

//写入测试参数

strcat(V_Result,V_imsi);

strcat(V_Result,"</td>");

strcat(V_Result,"<td id='yq'>");

//写入预期结果

strcat(V_Result,lr_eval_string("{YQJG}"));

strcat(V_Result,"</td>");

strcat(V_Result,"<td id='sj'>");

//写入实际结果

strcat(V_Result,lr_eval_string("{filecontent}"));

strcat(V_Result,"</td>");

strcat(V_Result,"<td>");

//写入测试是否通过

strcat(V_Result, V_testres);

strcat(V_Result,"</td></tr>");

fputs(V_Result,file);

return 0;

}

3、End部分:写入测试结果文件尾部html信息,关闭文件并结束测试:

vuser_end()

{

//结束并关闭文件

strcpy(V_Result,"</table></html>");

fputs(V_Result,file);

fclose(file);

return 0;

}

Loadrunner之HTTP接口测试脚本实例的更多相关文章

  1. loadrunner:HTTP接口脚本实例

    Action() { lr_rendezvous("getAppHomeModulesList"); lr_start_transaction("getAppHomeMo ...

  2. LoadRunner系列之—-02 基于webservice协议的接口测试(脚本实例)

    Loadrunner 基于webservice协议的接口压力测试(脚本实例) 接口功能如下:请求接口,报文只有一个参数为证件号码:返回报文中,有证件号码是否能查到对应数据,查到几条数据. 思路:请求w ...

  3. LoadRunner脚本实例来验证参数化的取值

    LoadRunner脚本实例来验证参数化的取值 SINM {3]!G0问题提出:  主要想试验下,在Controller中,多个用户,多次迭代中参数的取值.51Testing软件测试网(['H5f,d ...

  4. LoadRunner关联函数的脚本实例--如何操作关联参数

    LoadRunner关联函数的脚本实例--如何操作关联参数 这几天一直在学习LoadRunner的VuGen编程,今天想对关联函数web_reg_save_param做详细的试验和研究: ~f6p q ...

  5. loadrunner工具使用之脚本创建

    loadrunner工具使用之脚本创建 一.创建脚本 1.打开loadrunner,选择第一个控件VuGen(创建/编辑脚本),点击

  6. Loadrunner之HTTP接口测试

    Loadrunner之HTTP接口测试 接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程. ...

  7. 通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

    通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

  8. 老李分享:loadrunner的java user脚本开发

    老李分享:loadrunner的java user脚本开发 poptest在性能测试loadrunner的课程里,以web协议为主,同时也讲解其他协议的脚本开发,对于一个性能测试工程师需要掌握一个以上 ...

  9. Loadrunner Webservice接口性能测试脚本编写优化总结

    本文主要介绍使用Loadrunner Webservice接口性能测试脚本编写及优化总结. 1.Webservice协议脚本编写流程 下面介绍使用Loadrunner 11调用Webservice接口 ...

随机推荐

  1. Effective Java 学习笔记之所有对象都通用的方法

    一.覆盖equals时请遵守通用约定 1.满足下列任何一个条件时,不需要覆盖equals方法 a.类的每个实例本质上都是唯一的.此时就是Object中equals方法所表达的含义. b.不关心类是否提 ...

  2. ubuntu缺少libgtk-x11-2.0.so.0的解决办法

    安装了wineqq之后运行发现提示少了libgtk-x11-2.0.so.0这个库,找了很多教程都不能解决,最后终于找到一个有用的,打开终端输入以下命令即可: sudo apt-get install ...

  3. C++ 复制构造函数

    C++类的设计中,如果某些函数没有显式定义,C++会自动生成,复制构造函数便是其中之一,其他的还有默认构造函数.赋值操作符.默认析构函数.地址操作符.一个类的复制构造函数的原型一般为: Class_n ...

  4. ionic中返回上一页

    .controller('NewsCtrl', ["$scope", "$ionicHistory", "$http","$tim ...

  5. 160809228_符瑞艺_C语言程序设计实验3 循环结构程序设计

      #include <stdio.h> int main(){ //使用for循环完成1+2+......+100 ; ;i<=;i++) sum +=i; //sum = sum ...

  6. Unable to locate player settings. bin/Data/settings.xml

    Hello guys, so according to the this response: http://stackoverflow.com/a/18302624/5727136 you need ...

  7. zencart安装后修改configure.php权限

    刚安装完zencart的时候,打开前台页面会遇到下面的安全提示: “警告: 配置文件允许写入: E:\upupw\htdocs\mysite\includes\configure.php,存在安全隐患 ...

  8. VB中 ByRef与ByVal区别

    函数调用的参数传递有"值传递"和"引用传递"两种传递方式.如果采用"值传递",在函数内部改变了参数的值,主调程序的对应变量的值不会改变:如果 ...

  9. django ATOMIC_REQUESTS

    在数据库配置中,如果配置了此属性为True,如下: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.xxx', 'NAME': '', ...

  10. ndk学习6: 使用gdb调试ndk程序一

    生成debug版程序 方法一: 使用ndk-build编译时,加上如下参数NDK_DEBUG=1,之后生成so文件之外,还会生成gdbobserver,gdb.setup调式文件   方法二: 修改A ...