接口测试的两种方法

上一篇 / 下一篇  2012-05-28 08:51:10 / 个人分类:杂谈


2ov!}9F+Nq;}*J0

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

z5e#m+v/oR4A5jF0

 

1s1zZWHr VN0

一、           LoadRunner实现接口测试51Testing软件测试网CH2zM+nmH*r%aP%h

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

)No5pG5Q0

接口测试地址:/SNS/Publish

4?3{k2aT-e Ju)kT l0

请求报文参数说明:51Testing软件测试网%Mz IC)?%}Y

参数名称51Testing软件测试网U%E sL"q't7V$zP(R_:P7f:I

参数描述51Testing软件测试网5cR)i#O3Hu*_GO,?9TD

字符类型51Testing软件测试网6[?.Wij'R~

字符值

:L%P q)C5lBuE0

SNSID51Testing软件测试网1q$li9qPoh

社区ID51Testing软件测试网w5f"lK)F R+B%rl

String51Testing软件测试网(S,} g0i8\w

6

!fLx e,dq:Z4I Q6?0

UserID

/S|@%{n5Lh R0

用户ID

ya*]j3O{B5nVa0

String51Testing软件测试网2yW6X_R Y%f

10

.V$~Q!lo0

CommentsTypeID

wlSCut0

评论类型ID51Testing软件测试网0y{:O FD b6DU&X

String

v`$o9t0H+y1{0

2

VJ,|K {m \8M#[3R0

CommentsID

.F$V c'`#aP2A0

评论ID

#x;_]#D}~9uSUJ0

String

A)j]_Y&M/BR0

1051Testing软件测试网w2ahc.Bm5j i4K[

AuthorID51Testing软件测试网e3Rk%~;Vrs5u

作者ID51Testing软件测试网y].o4Y"O_ x

String

@4b:r!x/`l~K0O)F0

10

"O&p#vCJ:U0

CommentsContent51Testing软件测试网:X'\ EQ#Z ^r8I)F

评论内容

8O9?vmlX0

String51Testing软件测试网.N+j2\ sRMe$\'O

5051Testing软件测试网4? ^o3aXQdh

请求报文格式:

Uf.v_Aq\@#`a0

<?xml version="1.0" encoding="ISO-8859-1"?>

2R[ }7z;[$H:u\0

< Publish >

0iLT8B zS*v5C5G0

<SNSID>123</SNSID>

5t8yXOd|0

<UserID>456</ UserID >

p`jB/q{nkg}0

<CommentsTypeID>2</ CommentsTypeID >

/in8V"h Bm0

<CommentsID>123</CommentsID>51Testing软件测试网)S/d M*WG~F

<AuthorID>456</AuthorID>51Testing软件测试网V3B-j)L4A:T

<CommentsContent>Don't forget the meeting!</CommentsContent >51Testing软件测试网y[;b?2g5y-~,CA0I]j

</Publish>51Testing软件测试网?_&` V"S(X

 

-t_&e;Wpp,y+h0

应答报文的参数接口说明:51Testing软件测试网's#k"X3N'aj Z G

参数名称51Testing软件测试网8Ba;W6gH \p*F:S

参数描述

%uux5M4g4L*s Xd(v0

字符类型

R-vf$Oj0

字符值51Testing软件测试网}hg!}C

UserID51Testing软件测试网@(M,}oA8Q-^Q4J[

用户ID51Testing软件测试网 x%l_.i)^b6R9Vw0o

String51Testing软件测试网c^&Y9q)_n7{

1051Testing软件测试网'l+~_:T"F q$P%GW t

CommentsTypeID51Testing软件测试网$u$yA.@'f@VK z:W2S

评论类型ID

r'F!b'w+x2xr | y0

String51Testing软件测试网,e@Sgz

251Testing软件测试网2oE'j6RfQs5Z

CommentsID

+T rL%j5z\q0

评论ID51Testing软件测试网eo1?DB+s

String51Testing软件测试网 FNb6T&~ h}i'i$A

1051Testing软件测试网w N+~\ vp

CommentsContent51Testing软件测试网@ Q&\\ {

评论内容

6fSs-W+T ]s'I^0

String

Bb[\3Xv0

5051Testing软件测试网'i%o9Q]S&N

StatusCode51Testing软件测试网)wr6P J }

返回值

B'aog Km|5^gj#z0

Int51Testing软件测试网4zW,D}|R+['O

0代表pass,0代表fail

$HnS OPc R F0

StatusText

7~ NB |Qqa1cc4KY0

返回信息描述51Testing软件测试网 K6P:{{G-c7f

String

(`NFPqg0_0

 51Testing软件测试网%E:\&GEPq(G

<?xml version="1.0" encoding="ISO-8859-1"?>

Mmk*juV3gm P&L0

< Publish >

t+D \.`3v0

<UserID>456</ UserID >51Testing软件测试网 x:n8xD{%]9~

<CommentsTypeID>2</ CommentsTypeID >

&H"n4P8R|JQ"?0

<CommentsID>123</CommentsID>

c.E|!Q7u a V;q7aok0

<CommentsContent>Don't forget the meeting!</CommentsContent >

:O8P s#\6b$xr.Z2i0

<StatusCode>0</StatusCode>

Z*]-Y7XDH6U Z0

<StatusText>发送成功一条评论</StatusText>51Testing软件测试网,z9pA+{c&v5G(nA5X

</Publish>51Testing软件测试网!~:K \1l IyM

 51Testing软件测试网V)w}9pk\d

                                                      

g1TlW JVH0

有了上述的说明书之后,测试人员可以根据文档的描述在LoadRunner书写相应的接口测试脚本。

9C2}"m6ax"t0

 

(N7OkPe,wq@3l0

LoadRunner中涉及到向服务器发送请求的API方法包括:web_url(),web_submit_form(),web_submit_data(),web_custom_request()。下面介绍两种我常用的方法:51Testing软件测试网 `l^9Iq

 51Testing软件测试网*b-eN:xq

方法一:使用web_submit_data()

$[r1cG:sUAI0

   web_submit_data("insert",51Testing软件测试网iD7n&L.S.sB!E

      "Action=http://116.211.23.123/SNS/Publish.htm ",

BK'm0I$a xe;x X"I0

      "Method=POST",      

DnX%R]"xs]'F^e0

"Referer=http://116.211.23.123/SNS/Publish.htm ",51Testing软件测试网x"VK1s(a:]L4V

       "Mode=HTML",51Testing软件测试网%]t%j0s:|io^

      ITEMDATA,51Testing软件测试网,Y#OI@{ G

      "Name= SNSID ","Value=6601",ENDITEM,

E r,YP \.X0

      "Name= UserID ","Value=123",ENDITEM,

M B?"x2ng"bV/no5u,E0

      "Name= CommentsTypeID ","Value=1",ENDITEM,

_hnRx2a!Qs6e U0

      "Name= CommentsID ","Value=456",ENDITEM,

8["n9|!C B v9{ U%}&{w0

       "Name= AuthorID","Value=789",ENDITEM,

E#N:j%] Z:i,fonbF,X0

       "Name= CommentsContent ","Value=Just for testing",ENDITEM,51Testing软件测试网d$nT-~OM7D

               LAST);51Testing软件测试网t)F'GsgkK

 

BM [%~ vDs8c0L0

方法二:使用web_custom_request()51Testing软件测试网"z&Cw7G[1za#x.~

char str[1000];51Testing软件测试网t P;zv)@ Jg(i

strcpy(str,"SNSID=7999&UserID=1&CommentsTypeID=1&CommentsID=1&AuthorID=1&CommentsContent=1");51Testing软件测试网[#z(u|W*U0_

web_custom_request("Publish",51Testing软件测试网a2Q\4J1{%j

                  "Url= http://116.211.23.123/SNS/Publish.htm",51Testing软件测试网 w.yhl py}E

                  "Method=POST",51Testing软件测试网Y0x*{ F} W*F@/BP

                  "Referer=http://116.211.23.123/SNS/Publish.htm ",51Testing软件测试网tJyV v

                  "Mode=HTTP",

\ {&Ug4im [3T0

                  str,51Testing软件测试网C+O4hf!p A

                  LAST);51Testing软件测试网&A!O V,oS9v m7G!J"eiP

这也是一种写法,可以跟web_submit_data互换。这种写法更利于拼接参数。51Testing软件测试网-V0r2F,}6]jin

 

B(u1n_`5O b|0

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

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

 51Testing软件测试网hi2F:l Rqe~

因为web_reg_find()是注册型函数,所以应该放在web_submit_data()或者web_custom_request()的前面。51Testing软件测试网^2FU'v0mcFg

如:web_reg_find("Text=<StatusCode>0</StatusCode>",//应答报文里边的信息51Testing软件测试网x!De#z I9Q%\

"SaveCount= StatusCodeCount", //统计查询字段的信息,如果找51Testing软件测试网5?3r Ef/@T

//到值为1,如果未找到值为0

X{u\a6?;j0

LAST);   51Testing软件测试网WPSC8h3Q]/K&KX `

 51Testing软件测试网(Zh)r7X#@+]'{P#ow a

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

3m;CE}|L{0

// Check result

@oSe-X+P;C F0

if (atoi(lr_eval_string("{StatusCodeCount }")) > 0){ //判断如果Welcome字符串出现次//数大于0

0@S'Y6N6E"N0

lr_output_message("Send out the comment successfully."); }//在日志中输出Send out //the comment successfully51Testing软件测试网w xHK h_7h|

 

0yI~+\*i+nH w0

else{ //如果出现次数小于等于51Testing软件测试网sQ}h@`J

 51Testing软件测试网kB\9VYg5X JY x6Y!p

lr_error_message("Send out the comment unsuccessfully."); //在日志中输出Send out //the comment successfully51Testing软件测试网Z+c&?r'\? s |

return(0);51Testing软件测试网1K['MBIxO+`

}

.P.z+q'kRr0

 51Testing软件测试网7@z,f,Cm8N[ B9R

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

 

"Jno3s1@g0

------------------------------------------华丽丽的分割线-------------------------------------------

&Y+v se%M?0

 

1^,u%Os L?-`0

 51Testing软件测试网j#O fW%ZSz

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

:V*j#Z+Gr2Y?D3U0

 

/t,mj\*G;{l#X&G0

什么是Fitnesse?51Testing软件测试网V{5s1L2Y

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

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

7p m,f$|!Q0

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

Hd;v1ay7IX$AQHY0

 51Testing软件测试网:wN}]QJ8H&x

------------------------------------------华丽丽的分割线-------------------------------------------

&p}$Q#wv0

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

1G^:g.i:l!h7[0

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

%uY(}*b.~:`#z0

ColumnFixtureActionFixtureDecision TableScriptTable。在工作ColumnFixture用的最多。

"y G3VF*J@0

 51Testing软件测试网7FrrL@

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

%c,Z$A6v|ci0

// Java fixtures51Testing软件测试网(s][[:y7S{

package info.fitnesse.fixturegallery;

UQV8xe5t%L0

import fit.ColumnFixture;

nN-ODPE0

public class PublishTest extends ColumnFixture {51Testing软件测试网z B4n4R [q

  51Testing软件测试网$C6D JQ3O n.vH[

  //通过url向服务器发送请求的程序段省略

\-^FK@0

   public StringSNSID; //对应列名|first part|

@Qx'QU\0

   public StringUserID; //对应列名|second part|51Testing软件测试网Rp,W|)@9AXp``

   private StringCommentsTypeID;51Testing软件测试网*d q2m N0u

   private StringAuthorID;51Testing软件测试网oaa8L8~ @c? yG,l3\

private StringCommentsContent;51Testing软件测试网xDrw \-x1n&F ~;R

private StringUserID;51Testing软件测试网 pqd(r0}m%c

 

$V-H[z"b"U0

//对参数的setget方法省略51Testing软件测试网5K`pDH,UC(r AJ

}51Testing软件测试网{ U9[$A+q-hf0k

 51Testing软件测试网!d'q0eC0G)}Y9nvL

ColumnFixture表格里边的测试数据是:51Testing软件测试网y.Kn9JQY A5zS*R

//省略设置表格的存储位置信息51Testing软件测试网T)u0sY9xA+Sc

51Testing软件测试网~"KuX}4|

 51Testing软件测试网0[ c8tGQ7JT f4u.M(p

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

jVL/jr!@`0

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

7~5Y Js:KE1l F8T]0

关于Fitnesse的详细使用方法请参考:51Testing软件测试网9F)|v4J&a V2a7a cx

http://www.51testing.com/index.php?uid/300987/action/spacelist/php/1
#cuw3TaeK;rf#V0

:a#x)]O3wp^`k0

TAG:

cuckoo的个人空间 引用 删除 ttkk   /   2012-06-05 09:49:27
5
xin_晴的个人空间 引用 删除 xin_晴   /   2012-05-30 10:51:58
您好,我是51Testing软件测试网的编辑,您的本篇博文被推荐至51Testing软件测试网首页发表:http://www.51testing.com/html/66/n-814766.html
感谢您关注并支持51Testing博客,期待您更多的优秀原创博文。
guchenggao的个人空间 引用 删除 guchenggao   /   2012-05-28 12:28:10
5
 

评分:0

我来说两句

Open Toolbar