2ov!}9F+Nq;}*J0其实无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程。
z5e#m+v/oR4A5jF0
1s1zZWHr
VN0一、 用LoadRunner实现接口测试51Testing软件测试网CH2zM+n mH*r%aP%h
大家都知道LoadRunner是一种性能测试工具,但它也可以用在我们做接口测试的时候。开发人员开发出来的接口,提供给测试人员详细的接口使用说明书,该说明书最基本的要求如下:
)No5pG5Q0接口测试地址:/SNS/Publish
4?3{k2aT-e
Ju)kTl0请求报文参数说明:51Testing软件测试网%MzIC)?%}Y
参数名称51Testing软件测试网U%E s L"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"l K)F R+B%rl | String51Testing软件测试网(S,} g0i8\w | 6 !fLx
e,dq:Z4IQ6?0 |
UserID /S|@%{n5Lh R0 | 用户ID ya*]j3O{B5nVa0 | String51Testing软件测试网2yW6X_RY%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 ZG
参数名称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软件测试网)w r6PJ
} | 返回值 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:\&GE Pq(G |
<?xml
version="1.0" encoding="ISO-8859-1"?>
Mmk*j uV3gmP&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*]-Y7XDH6UZ0<StatusText>发送成功一条评论</StatusText>51Testing软件测试网,z9pA+{c&v5G(nA5X
</Publish>51Testing软件测试网!~:K
\1l
IyM
51Testing软件测试网V)w}9pk\d
g1TlWJVH0有了上述的说明书之后,测试人员可以根据文档的描述在LoadRunner书写相应的接口测试脚本。
9C2}"m6ax"t0
(N7OkPe,wq@3l0LoadRunner中涉及到向服务器发送请求的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$axe;x X"I0 "Method=POST",
D nX%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|!CB
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软件测试网tP;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.yhlpy}E
"Method=POST",51Testing软件测试网Y0x*{
F}W*F@/BP
"Referer=http://116.211.23.123/SNS/Publish.htm
",51Testing软件测试网 tJyVv
"Mode=HTTP",
\
{&Ug4im
[3T0 str,51Testing软件测试网C+O4hf!pA
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软件测试网
I3pSb D*},L'u
我们在做接口功能测试的时候会很注意接口的应答报文的信息,这时候我们可以通过LoadRunner的日志信息查看或者可以通过web_reg_find()或者web_find()这样的API函数来统计接口的运行结果,推荐使用web_reg_find(),web_reg_find()和web_find()区别请大家百度一下,详细信息太多,在这里不便叙述。51Testing软件测试网m
ES5KP"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?;j0LAST); 51Testing软件测试网WPSC8h3Q]/K&KX`
51Testing软件测试网(Zh)r7X#@+]'{P#ow
a
在脚本的最后我们可以对查询字段的信息进行统计
3m;CE}|L{0// Check result
@oSe-X+P;C F0if
(atoi(lr_eval_string("{StatusCodeCount }")) > 0){ //判断如果Welcome字符串出现次//数大于0
0@S'Y6N6E"N0lr_output_message("Send
out the comment successfully."); }//在日志中输出Send out //the comment successfully51Testing软件测试网 wxHKh_7h|
0yI~+\*i+nH
w0else{ //如果出现次数小于等于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页面上简单的输出和预计输出的表格就可实现,并且可以运行这些测试以确定是否通过。
7pm,f$|!Q0FitNesse是wiki可以很方便的创建和编辑页面 FitNesse是一个web服务器不用过多的安装配置,很方便使用。
Hd;v1ay7IX$AQHY0 51Testing软件测试网:wN}]QJ8H&x
------------------------------------------华丽丽的分割线-------------------------------------------
&p}$Q#wv0我习惯使用Eclipse集成开发工具写测试代码,用fitnesse准备接口的测试数据,由此实现接口的测试数据和测试程序的分离。
1G^:g.i:l!h7[0关于Fitnesse的使用大家可以参考官方网址。Fitnesse的四种常见表格是:
%uY(}*b.~:`#z0ColumnFixture,ActionFixture,Decision Table,ScriptTable。在工作中ColumnFixture用的最多。
"y
G3VF*J@0 51Testing软件测试网7FrrL@
下面的程序使用的是ColumnFixture表格。
%c,Z$A6v |ci0//
Java fixtures51Testing软件测试网(s][[:y7S{
package info.fitnesse.fixturegallery;
UQV8xe5t%L0import fit.ColumnFixture;
n N-ODPE0public class PublishTest extends
ColumnFixture {51Testing软件测试网z
B4n4R[q
51Testing软件测试网$C6DJQ3On.vH[
//通过url向服务器发送请求的程序段省略
\-^FK@0 public
StringSNSID; //对应列名|first part|
@Qx'QU\0 public
StringUserID; //对应列名|second part|51Testing软件测试网Rp,W|)@9AXp``
private
StringCommentsTypeID;51Testing软件测试网*dq2m
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//对参数的set和get方法省略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[ c8tGQ7JTf4u.M(p
总结:上述两种方法都是对接口做功能测试的方法,使用LoadRunner做接口测试的时候可以不用让开发人员提供测试人员相应的UI测试页面,直接调用接口做测试,但是测试程序和数据的依赖性太强;使用Fitnesse做接口测试的时候可以实现测试程序和数据的分离,只用点击Fitnesse界面的Test按钮就可以实现测试,测试消耗时间比使用LoadRunner做接口测试少。
jVL/jr!@`0 以上纯属个人见解,敬请拍砖!
7~5Y Js:KE1l F8T]0关于Fitnesse的详细使用方法请参考:51Testing软件测试网9F)|v4J&aV2a7a
cx
http://www.51testing.com/index.php?uid/300987/action/spacelist/php/1
#cuw3TaeK;rf#V0
:a#x)]O3wp^`k0