其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程。

  方法一、用LoadRunner实现接口测试

  大家都知道LoadRunner是一种性能测试工具,但它也可以用在我们做接口测试的时候。开发人员开发出来的接口,提供给测试人员详细的接口使用说明书,该说明书最基本的要求如下:

  接口测试地址:/SNS/Publish

  请求报文参数说明:

参数名称

参数描述

字符类型

字符值

SNSID

社区ID

String

6

UserID

用户ID

String

10

CommentsTypeID

评论类型ID

String

2

CommentsID

评论ID

String

10

AuthorID

作者ID

String

10

CommentsContent

评论内容

String

50

  请求报文格式:

<?xml version="1.0" encoding="ISO-8859-1"?>
< Publish >
  <SNSID>123</SNSID>
  <UserID>456</ UserID >
  <CommentsTypeID>2</ CommentsTypeID >
  <CommentsID>123</CommentsID>
  <AuthorID>456</AuthorID>
  <CommentsContent>Don't forget the meeting!</CommentsContent >
</Publish>

  应答报文的参数接口说明:

参数名称

参数描述

字符类型

字符值

UserID

用户ID

String

10

CommentsTypeID

评论类型ID

String

2

CommentsID

评论ID

String

10

CommentsContent

评论内容

String

50

StatusCode

返回值

Int

0代表pass,非0代表fail

StatusText

返回信息描述

String

<?xml version="1.0" encoding="ISO-8859-1"?>
< Publish >
  <UserID>456</ UserID >
  <CommentsTypeID>2</ CommentsTypeID >
  <CommentsID>123</CommentsID>
  <CommentsContent>Don't forget the meeting!</CommentsContent >
  <StatusCode>0</StatusCode>
  <StatusText>发送成功一条评论</StatusText>
</Publish>

 有了上述的说明书之后,测试人员可以根据文档的描述在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=POST",      
"Referer=http://116.211.23.123/SNS/Publish.htm ",
       "Mode=HTML",
      ITEMDATA,
      "Name= SNSID ","Value=6601",ENDITEM,
      "Name= UserID ","Value=123",ENDITEM,
      "Name= CommentsTypeID ","Value=1",ENDITEM,
      "Name= CommentsID ","Value=456",ENDITEM,
       "Name= AuthorID","Value=789",ENDITEM,
       "Name= CommentsContent ","Value=Just for testing",ENDITEM,
               LAST);

  第二种:使用web_custom_request()

char str[1000];
strcpy(str,"SNSID=7999&UserID=1&CommentsTypeID=1&CommentsID=1&AuthorID=1&CommentsContent=1");
web_custom_request("Publish",
                  "Url= http://116.211.23.123/SNS/Publish.htm",
                  "Method=POST",
                  "Referer=http://116.211.23.123/SNS/Publish.htm ",
                  "Mode=HTTP",
                  str,
                  LAST);

  这也是一种写法,可以跟web_submit_data互换。这种写法更利于拼接参数。

  方法一适合一些xml结构的根元素下的子元素同处于根元素下面,且子元素数目较少的情况下,如果xml结构比较复杂,比如说根元素下面有多级子元素,或者xml树结构分叉较多的时候,我们可以先把xml拼接成一个字符串然后通过web_custom_request()向服务器发送请求。

  我们在做接口功能测试的时候会很注意接口的应答报文的信息,这时候我们可以通过LoadRunner的日志信息查看或者可以通过web_reg_find()或者web_find()这样的API函数来统计接口的运行结果,推荐使用web_reg_find(),web_reg_find()和web_find()区别请大家百度一下,详细信息太多,在这里不便叙述。

  因为web_reg_find()是注册型函数,所以应该放在web_submit_data()或者web_custom_request()的前面。

  如:

web_reg_find("Text=<StatusCode>0</StatusCode>",//应答报文里边的信息
"SaveCount= StatusCodeCount", //统计查询字段的信息,如果找到值为1,如果未找到值为0
LAST);

  在脚本的最后我们可以对查询字段的信息进行统计

// Check result
if (atoi(lr_eval_string("{StatusCodeCount }")) > 0){ //判断如果Welcome字符串出现次//数大于0
lr_output_message("Send out the comment successfully."); }//在日志中输出Send out //the comment successfully
 
else{ //如果出现次数小于等于
 
lr_error_message("Send out the comment unsuccessfully."); //在日志中输出Send out //the comment successfully
return(0);
}

  总结:用LoadRunner做接口测试无法做到把接口参数和程序分理,接口的参数可以通过参数化的方法来实现对同一个参数多个数据的测试。参数化后的测试数据保存在此脚本的保存位置下。

  方法二、通过Java + Fitnesse实现接口功能测试

  什么是Fitnesse?

  FitNesse是一套软件开发协作工具 FitNesse是帮助大家加强软件开发过程中的协作的工具。能够让客户、测试人员和开发人员了解软件要做成什么样,帮助建议软件最终是否达到了设计初衷。

  FitNesse是一套软件测试工具 从另外一个角度看,FitNesse是一个轻量级的、开源的框架,能够帮助开发团队方便的定义验收测试(Acceptance Tests),通过在web页面上简单的输出和预计输出的表格就可实现,并且可以运行这些测试以确定是否通过。

  FitNesse是wiki可以很方便的创建和编辑页面 FitNesse是一个web服务器不用过多的安装配置,很方便使用。

  我习惯使用Eclipse集成开发工具写测试代码,用fitnesse准备接口的测试数据,由此实现接口的测试数据和测试程序的分离。

  关于Fitnesse的使用大家可以参考官方网址。Fitnesse的四种常见表格是:

  ColumnFixture,ActionFixture,Decision Table,ScriptTable。在工作中ColumnFixture用的最多。

  下面的程序使用的是ColumnFixture表格。

// Java fixtures
package info.fitnesse.fixturegallery;
import fit.ColumnFixture;
public class PublishTest extends ColumnFixture {
  
  //通过url向服务器发送请求的程序段省略
   public StringSNSID; //对应列名|first part|
   public StringUserID; //对应列名|second part|
   private StringCommentsTypeID;
   private StringAuthorID;
private StringCommentsContent;
private StringUserID;
 
//对参数的set和get方法省略
}
 
ColumnFixture表格里边的测试数据是:
//省略设置表格的存储位置信息

  总结:上述两种方法都是对接口做功能测试的方法,使用LoadRunner做接口测试的时候可以不用让开发人员提供测试人员相应的UI测试页面,直接调用接口做测试,但是测试程序和数据的依赖性太强;使用Fitnesse做接口测试的时候可以实现测试程序和数据的分离,只用点击Fitnesse界面的Test按钮就可以实现测试,测试消耗时间比使用LoadRunner做接口测试少。

  以上纯属个人见解,敬请拍砖!

LR进行接口测试的更多相关文章

  1. LoadRunner接口工作总结

    因为工作中需要开发维护类似枢纽性质的平台,所以经常利用LR进行接口测试.接口自动化测试.接口压力测试.用多了LR,有点不愿意使用报文编辑器进行手工接口测试了.  接口脚本操作过程: 首先:打开LR,N ...

  2. LR接口测试---Java Vuser之增删改查

    import lrapi.lr; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...

  3. LR接口测试---Java Vuser之jdbc查询(调试前)

    在eclipse下编写好的代码: import lrapi.lr; import java.sql.Connection; import java.sql.DriverManager; import ...

  4. LR接口测试手工脚本与验证脚本

    Action(){ char URL[250]; char mars_cid[30]; memset(URL,0,sizeof(URL)); memset(mars_cid,0,sizeof(mars ...

  5. LR接口测试---socket

    前提条件: 编译:javac TcpServer.java 启动:java TcpServer ============================================ 代码示例: # ...

  6. LR接口测试---webservices

    //================================================================================== /* //事务开始 lr_st ...

  7. LR接口测试---基于http协议之get/post

    get请求代码: //=====================get interface======================== 以http状态码方式: //获取返回的HTTP状态码判断请求 ...

  8. LR接口测试案例(录制)

  9. LR常用函数以及调用自定义函数

    2.LR常用函数以及调用自定义函数 2.1.LR常用函数以及对信息的判断 2.1.1. LR内部自定义函数 在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示[il ...

随机推荐

  1. ios9 之后使用CFNumberGetValue出错

    将编译源类型设置为根据文件而定:

  2. java基础篇---XML解析(二)

    XML解析之最流行的方式:DOM4J dom4j是使用java语言编写的,用于读,写,操作XML的一套组件 dom4j是一个开源的java组件,可从http://sourceforge.net/pro ...

  3. highcharts图表组件通过设置tooltip属性自定义数据提示信息

    我们先来看看这样一个例子,全局配置好tooltip,数据点的提示信息能够自己根据数据点自身数据情况加以显示,代码如下所示: 01.$(function () { 02.$('#container'). ...

  4. Xcode搭建Python编译环境

    * {-webkit-tap-highlight-color: rgba(0,0,0,0);}html {-webkit-text-size-adjust: none;}body {font-fami ...

  5. 【.Net】Thread.Start()与ThreadPool.QueueUserWorkItem()的区别

    百度搜到的靠前的几篇文章,都是写了两种API的使用实例,但并没有说清两者的具体差别. 直接上stackoverflow搜才是正确的姿势.(想上谷歌,然而十/九_大|期间VPN各种被墙,就很气) 参考: ...

  6. js如何获取到本周的第一天和最后一天,本月的第一天和最后一天以及本季度的第一天和最后一天

    1.首先来一个自己公司项目的源码: 项目需求描述: 从20150712日开始, , 需求①:根据当前时间返回每一周 .周一~周日的日期(需返回2种格式 格式1:7月13日,格式2:2015-07-13 ...

  7. [RTC]系统时间NTP和RTC同步,Debian的时区配置

    转自:http://www.cnblogs.com/jiu0821/p/5999566.html Debian的时区配置 一. 修改时区 1. 查看当前时区 命令 : "date -R&qu ...

  8. iptables nat 外网nat到内网在只限制外网访问的单一ip地址

    166 /etc/init.d/iptables start 167 iptables -I INPUT -s 192.168.10.0/24 -p tcp -j ACCEPT 168 /etc/in ...

  9. 《VS2010/MFC编程入门教程》——读书笔记

    推荐两个比较好的学习网站:http://v.dxsbb.com/jisuanji/555/ http://www.jizhuomi.com/software/257.html MFC全称Microso ...

  10. 获取最后插入的id另外方法

    在此记录备忘. CREATE TABLE tb_test(custid INT IDENTITY(1,1) NOT NULL , name nvarchar(200) NOT NULL) DECLAR ...