接口测试的两种方法

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

  方法一、用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做接口测试少。

用LoadRunner实现接口测试的更多相关文章

  1. 基于LoadRunner构建接口测试框架

    基于LoadRunner构建接口测试框架 http://www.docin.com/p-775544153.html

  2. 使用Loadrunner进行接口测试

    在工作中很多时候都需要进行接口测试,如果只是进行接口的功能测试这个很简单,两种类型: 1.如果是基于get的直接使用浏览器进行访问,查看服务器返回的数据是否正确就行, 2.如果是基于post的可以接触 ...

  3. Jmeter、Postman 、 loadrunner SoapUI 接口测试工具

    一. loadrunner  简称 LR 二. Jmeter 1.安装包:apache-jmeter-4.0.tgz   解压.学会此工具的使用  和POSTman 一样的. 2.本机测试:双击apa ...

  4. loadRunner之接口测试

    接口测试需求: 1.脚本支持循环测试,并且每次测试的请求报文不一样(字段stbId每次请求不一样) 2.输出每次测试的请求报文和响应报文 3.根据响应报文判断接口调用是否成功 4.输出最终测试结果:循 ...

  5. LoadRunner Vuser接口测试脚本 Post举例

    发送内容为JSON的POST请求需要加入"EncType=application/json",表单参数不需要.(JAVA API) // POST接口调用 web.custom_r ...

  6. Loadrunner 接口测试的两种方法

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

  7. Jenkins+ANT+Jmeter 接口测试的实践(转载)

    转载地址:https://testerhome.com/topics/5262 1.前言 最近感觉大家都在讲Jenkins+jmeter+ant或maven的使用,但没有说到具体怎么投入到项目使用,只 ...

  8. LR进行接口测试

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

  9. web_custom_request函数做get接口测试

    最近研究了使用loadrunner做接口测试,刚开始一直不成功,后来加了QQ群,遇到大神了,经指导终于成功 下面是具体实例代码: //{"signIOS":1,"sign ...

随机推荐

  1. Ruby On Rails 常用的精品Gem汇总

    首先需要注明一点,本文是原创的并不是从其它地方转载.所有的数据是我从 GitHub 和 RubyGems 上码下来的,数据的截取时间就是本文的发布日期. RubyGems 的下载量可以看到在用这个 g ...

  2. LinuxMint下Apache Http源码安装过程

    1. 源码包下载 Apache Http安装要求必须安装APR.APR-Util.PCRE等包. Apache Http包下载地址:http://httpd.apache.org/download.c ...

  3. python3 入门 (二) 列表的使用

    列表用于组织其它数值,即写在方括号之间.用逗号分隔开的数值列表.列表内的项目不必全是相同的类型. 列表的定义 student = ['Tom', 'Jack', 'Avril'] 添加元素 将另一个列 ...

  4. Cordova4.0 系列 -- 常用命令(2)

    一. 创建一个cordova工程 create <directory> [<id> [<name>]] 二. 列出该工程支持哪些平台 platform [ls | ...

  5. Scala 中的函数式编程基础(三)

    主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. ...

  6. AJAX(二)AJAX框架

    上文(AJAX(一)AJAX的简介和基础)对ajax异步请求服务器做了详细的介绍和基础应用,可以看出,ajax的一些过程是相对不变的.不必要每次发送请求都写一遍发送代码,一些ajax开发人员已经把他们 ...

  7. AtomicInteger源码分析

    问题背景 最近在看LinkedBlockingQueue看到了其中的count使用AtomicInteger修饰,之前也看过AtomicInteger的一些解释,也是似懂非懂的,今天深入的了解了其实现 ...

  8. 设计模式之UML类图的常见关系(一)

    本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggregation),组合(Compositio ...

  9. iOS边练边学--多线程练习的多图片下载 以及 使用第三方框架(SDWebImage)的多图片下载

    一.自己实现多图片下载应该注意的问题 沙盒缓存的问题 程序缓存的问题 cell重复利用显示图片混乱的问题 -- 用户拖拽快,下载图片慢导致的 解决图片混乱引入NSOperation集合的问题 资源下载 ...

  10. Java基础-jdk动态代理与cglib动态代理区别

    JDK动态代理 此时代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,可以在调用目标对象相应方法前后加上其他业务处理逻辑. 代理模式在实际使用时需要指定具体的目标对象 ...