接口测试的两种方法

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

51Testing软件测试网#c7~-ag"a`

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

M:J,lbK.m5v;x0

 51Testing软件测试网9b}e-jAsHJ,RY

一、           LoadRunner实现接口测试

_;rUcz ? F0

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

!t3leR~7\g~R%D0

接口测试地址:/SNS/Publish51Testing软件测试网8i,_h,r(IK^9ST

请求报文参数说明:

o)Y{V(l#['jmJ0

参数名称51Testing软件测试网li_v6t J4Pb

参数描述

'Lc5XYwL3|*O0

字符类型51Testing软件测试网+|#s/N!sg#^v;f'`

字符值

EPh;oX4_0

SNSID51Testing软件测试网0gr$|;c'?$k;f?^

社区ID

pX Ze_e0

String51Testing软件测试网/j-n.[D'I b2BC-B

651Testing软件测试网J"w Tm%u w ^M5s/\#y

UserID

WV4c`RL8W| s j0

用户ID

s*h6i w)KNse0

String51Testing软件测试网{p&Rw8U8J-C/?

1051Testing软件测试网d)_3_%G#l \

CommentsTypeID

h!j.gI9D@ X~0

评论类型ID

Gqx y_m0

String

$N,Y$dc"^y5ki0

251Testing软件测试网0Ky&rP1O4}C

CommentsID51Testing软件测试网v b*x%RU

评论ID51Testing软件测试网9f1MoG2yFa)S A"?[

String

"Lq/a&Q/X$d r-Fm0

1051Testing软件测试网\ p*u3A2F?n

AuthorID51Testing软件测试网$n4T\J#Mp'@ D/A

作者ID

+bBS(Cq(EW g0

String

4B8J.`n8dF$W6y)?&l9K0

1051Testing软件测试网k)NpZ(q&Q?if

CommentsContent

h)p'U y2Wc3Q0

评论内容51Testing软件测试网jk Q"D;W,W7JE

String

:{u$pI*@rv;y5H.P#[U0

5051Testing软件测试网a(QEW@:k(t

请求报文格式:51Testing软件测试网e$e8g Ib Sz X

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

NT;YmF0

< Publish >

-[&HO\^3CQ0

<SNSID>123</SNSID>51Testing软件测试网%W)E&_7Qb/y8I$a

<UserID>456</ UserID >

a,A)v1h!U.i@+C0

<CommentsTypeID>2</ CommentsTypeID >51Testing软件测试网!C'B*KKN0C[

<CommentsID>123</CommentsID>

h8X$y%I Vp+x0

<AuthorID>456</AuthorID>51Testing软件测试网P_;L6Q u}(G3e*Cg

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

{Hj~!P,~[.n0

</Publish>

G$b f6dp0S ]0

 51Testing软件测试网mlC-I{,Kw#Zl

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

0Wu)lMRP8Z*t4M0

参数名称51Testing软件测试网9?$j7AE FA+E"z(J

参数描述

]+E\$J;m"T:I|L'\0

字符类型

(jl(B3~ FY*y$b0

字符值

?*v cP$y3wp0

UserID51Testing软件测试网"Q+YVCO q&@hY

用户ID

6rz#ev@8|)^'b0

String

g|~)Ib ZTRu0

10

/x#O"p3AN&bT0

CommentsTypeID

e$m@&a/]*@0

评论类型ID51Testing软件测试网t,i|+DvYJ)t

String

tzeH8Zi0

2

#[@Fp7`)W"R0

CommentsID

]Rh"bJL0

评论ID

G0G fl:Q9I\)Fj0

String51Testing软件测试网+xSc Y4Oq

10

;U @7ef\pvt||3v0

CommentsContent

"S M#S;Bou/P0

评论内容

VX3JWI8l0

String51Testing软件测试网;@Y9Mp8W

5051Testing软件测试网+lXR*C L0H Q

StatusCode

(JY U"gZ'L'H3{'s*H K0

返回值

5c/s.m8h9\Z1S%ci)ma0

Int

0H\Ql\0

0代表pass,0代表fail

IF)a?w1y0

StatusText

H A#tP _lo V0

返回信息描述51Testing软件测试网 KN{a/t.}kp Fh,MF,G

String

&@%G"JBMVx(q0

 

i-jiv&nvP*m0

<?xml version="1.0" encoding="ISO-8859-1"?>51Testing软件测试网 B@5QO {(B*W

< Publish >

:Cv J0~z.V0

<UserID>456</ UserID >

{ v1o"|?&f oE0

<CommentsTypeID>2</ CommentsTypeID >51Testing软件测试网`d^L:a%@

<CommentsID>123</CommentsID>51Testing软件测试网^ C2IY`

<CommentsContent>Don't forget the meeting!</CommentsContent >51Testing软件测试网p_-O&RI2F Qvb

<StatusCode>0</StatusCode>

7i m4lF D&`,Q0

<StatusText>发送成功一条评论</StatusText>

&A"WSyZ9tH0

</Publish>

Y&{zWs6`0

 

"U*V1eNF*l8DN0

                                                      

}!v8r)F6],Rs j no0

有了上述的说明书之后,测试人员可以根据文档的描述在LoadRunner书写相应的接口测试脚本。51Testing软件测试网$^| ~2nw(s Z!K

 51Testing软件测试网 dI ~x@4kX%w]WCO

LoadRunner中涉及到向服务器发送请求的API方法包括:web_url(),web_submit_form(),web_submit_data(),web_custom_request()。下面介绍两种我常用的方法:51Testing软件测试网%r&s$~1_ @

 51Testing软件测试网+iT6?&zAa}_?

方法一:使用web_submit_data()

'qDo^ q O0

   web_submit_data("insert",

6_(k+nlG'` t"bx*D0

      "Action=http://116.211.23.123/SNS/Publish.htm ",51Testing软件测试网[*z8Fv`t

      "Method=POST",      51Testing软件测试网'Z.@wa0]g:m

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

;]YU v \ V0

       "Mode=HTML",

-@]jT,R8X5ZFz0

      ITEMDATA,

8e4{(V0r+~1ba!u/S$~4D0

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

9p|Q(orQ,L(a7W0

      "Name= UserID ","Value=123",ENDITEM,51Testing软件测试网3K(?4m G*?J/m\}!M

      "Name= CommentsTypeID ","Value=1",ENDITEM,51Testing软件测试网P:@u3W xu6Jd3b

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

x6T? Ix0

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

c3b,a odk*|0

       "Name= CommentsContent ","Value=Just for testing",ENDITEM,

@Xpv"Tm3p,N0

               LAST);51Testing软件测试网 X B)CQ.I$Af4Zde"X \

 

H:e,Ehx)ml6f8].pS0

方法二:使用web_custom_request()

@N5Q Q`e.wJ0

char str[1000];51Testing软件测试网:NQ"g)k2I#gZ

strcpy(str,"SNSID=7999&UserID=1&CommentsTypeID=1&CommentsID=1&AuthorID=1&CommentsContent=1");

!S9Y;@-{/d,OPIzf0

web_custom_request("Publish",

_(IbRkC&];ks$U0

                  "Url= http://116.211.23.123/SNS/Publish.htm",51Testing软件测试网~Y!P*|r"Eio`U

                  "Method=POST",51Testing软件测试网$@,G]r1q+x!b)O

                  "Referer=http://116.211.23.123/SNS/Publish.htm ",51Testing软件测试网/FQ*O&tEs3@1eJ

                  "Mode=HTTP",51Testing软件测试网ql)u@%t

                  str,51Testing软件测试网)z9@STkT@

                  LAST);

Q Q/HO:GF5u^w0

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

$eS{r`)} P7Sd0

 51Testing软件测试网)w[O x a1y&m9J#M[;M

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

il/C)\L7}UjpJlg:r0

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

p!R\1go!X r0

 

5H0y/m5yQCH6N0

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

"FZJ Ri'KF.gi0

如:web_reg_find("Text=<StatusCode>0</StatusCode>",//应答报文里边的信息

9TTXJB0

"SaveCount= StatusCodeCount", //统计查询字段的信息,如果找

+o vX_ k n7R&Am)v0

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

dc(}opN~kf0

LAST);   51Testing软件测试网Pj4YQ;Sd7Lo

 51Testing软件测试网` wV7V1r#o5]-wn

在脚本的最后我们可以对查询字段的信息进行统计51Testing软件测试网"i"{hp$R

// Check result

j Xb V%]Nx"BRXM0

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

)??7fW!VG$g0

lr_output_message("Send out the comment successfully."); }//在日志中输出Send out //the comment successfully51Testing软件测试网 H_8s,z3L%m_ Cv,g

 51Testing软件测试网'J4a%F%l2~/k$s

else{ //如果出现次数小于等于51Testing软件测试网6Y8o1y#x _h wc

 51Testing软件测试网A [ ]X5i:J1\!@

lr_error_message("Send out the comment unsuccessfully."); //在日志中输出Send out //the comment successfully

F wUZ)oj*k0

return(0);51Testing软件测试网 bz"p I P m%k(L)X

}

VfefU*wP:~8J0

 51Testing软件测试网2H,]:OH}2p

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

@ Gcq7i H j6R)N0

 

%f^Z~u wk!n0

------------------------------------------华丽丽的分割线-------------------------------------------51Testing软件测试网Ve}DZ$} y rX

 

CID%_gb nF/Kt |9C&_0

 51Testing软件测试网1C} i;ZUf [,g

方法二、通过Java + Fitnesse实现接口功能测试51Testing软件测试网FKE}V4{X

 

*\FDs]!K0

什么是Fitnesse?

7]*g_ S-K X#A0

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

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

:Z-Y5{9d eM:C0

FitNessewiki可以很方便的创建和编辑页面 FitNesse是一个web服务器不用过多的安装配置,很方便使用。51Testing软件测试网G5J`%[uld?(Y J

 51Testing软件测试网UIFl%tg!b

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

AJ[-gQvB:K0

我习惯使用Eclipse集成开发工具写测试代码,用fitnesse准备接口的测试数据,由此实现接口的测试数据和测试程序的分离。51Testing软件测试网&Y*o`6W8EuX

关于Fitnesse的使用大家可以参考官方网址。Fitnesse的四种常见表格是:51Testing软件测试网s5o c^6xN+i

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

f6Qo!OO9aUJL0

 51Testing软件测试网 \6C9b6H8`,^ J

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

0v:k;Z)n0dn0

// Java fixtures

;D8d%~2\l0

package info.fitnesse.fixturegallery;

#G-k-uM:K0

import fit.ColumnFixture;

U8b&qhe2l a|0

public class PublishTest extends ColumnFixture {51Testing软件测试网D qk)A%P#^

  51Testing软件测试网6@-gpJ$b L T

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

\3d$q,SP0

   public StringSNSID; //对应列名|first part|51Testing软件测试网_NJ ah:d6|v

   public StringUserID; //对应列名|second part|

dp*P5c:S;iq~s0

   private StringCommentsTypeID;

a!Jwt4J0O0

   private StringAuthorID;51Testing软件测试网.Z;qY(zj(T#d]Tg:lB

private StringCommentsContent;51Testing软件测试网R,I,B`Q

private StringUserID;51Testing软件测试网,n QbAZ`?8R

 

(K }!kvD\s0

//对参数的setget方法省略51Testing软件测试网Y.N rW,f |

}

T3x!V'VM,tOb {0

 

%|w;Y}$e I'w)g0

ColumnFixture表格里边的测试数据是:51Testing软件测试网~P6no9B%_X

//省略设置表格的存储位置信息51Testing软件测试网?4q7cT"E

51Testing软件测试网,v_ci4S.d}p

 51Testing软件测试网~q _a T$z(c8n4L7Gp

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

j1NV*v6g,Z0

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

o5P ] nq0

关于Fitnesse的详细使用方法请参考:51Testing软件测试网\h_I/Ve

http://www.51testing.com/index.php?uid/300987/action/spacelist/php/1
r9spb)?` l0

dT-e4h;w;k1o0

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