http接口自动化测试框架实现_第1页
http接口自动化测试框架实现_第2页
http接口自动化测试框架实现_第3页
http接口自动化测试框架实现_第4页
http接口自动化测试框架实现_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、http接口自动化测试框架实现作者:张元礼/vincetest一、测试需求描述对服务后台一系列的http接口功能测试。输入:根据接口描述构造不同的参数输入值输出:XML文件eg:/xxx_product/test/content_book_list.jsp?listid=1二、实现方法1、选用Python脚本来驱动测试2、采用Excel表格管理测试数据,包括用例的管理、测试数据录入、测试结果显示等等,这个需要封装一个Excel的类即可。3、调用http接口采用Python封装好的API即可4、测试需要的http组装字符转处理即可5

2、、设置2个检查点,XML文件中的返回值字段(通过解析XML得到);XML文件的正确性(文件对比)6、首次执行测试采用半自动化的方式,即人工检查输出的XML文件是否正确,一旦正确将封存XML文件,为后续回归测试的预期结果,如果发现错误手工修正为预期文件。(注意不是每次测试都人工检查该文件,只首次测试的时候才检查)三、Excel表格样式四、实现代码(代码才是王道,有注释很容易就能看明白的)1、测试框架代码pythonview plaincopy1. #*2. #TestFrame.py3. #Author:Vince4. #Version:1.1.25. #Date:2011-3-146. #De

3、scription:自动化测试平台7. #*8. 9. importos,sys,urllib,httplib,profile,datetime,time10. fromxml2dictimportXML2Dict11. importwin32com.client12. fromwin32com.clientimportDispatch13. importxml.etree.ElementTreeaset14. #importMySQLdb15. 16. #Excel表格中测试结果底色17. OK_COLOR=0xffffff18. NG_COLOR=0xff19. #NT_COLOR=0xf

4、fff20. NT_COLOR=0xC0C0C021. 22. #Excel表格中测试结果汇总显示位置23. TESTTIME=1,1424. TESTRESULT=2,1425. 26. #Excel模版设置27. #self.titleindex=3#Excel中测试用例标题行索引28. #self.casebegin=4#Excel中测试用例开始行索引29. #self.argbegin=3#Excel中参数开始列索引30. #self.argcount=8#Excel中支持的参数个数31. classcreate_excel:32. def_init_(self,sFile,dtitl

5、eindex=3,dcasebegin=4,dargbegin=3,dargcount=8):33. self.xlApp=win32com.client.Dispatch(et.Application)#MS:ExcelWPS:et34. try:35. self.book=self.xlApp.Workbooks.Open(sFile)36. except:37. print_error_info()38. print打开文件失败39. exit()40. self.file=sFile41. self.titleindex=dtitleindex42. self.casebegin=dc

6、asebegin43. self.argbegin=dargbegin44. self.argcount=dargcount45. self.allresult=46. 47. self.retCol=self.argbegin+self.argcount48. self.xmlCol=self.retCol+149. self.resultCol=self.xmlCol+150. 51. defclose(self):52. #self.book.Close(SaveChanges=0)53. self.book.Save()54. self.book.Close()55. #self.xl

7、App.Quit()56. delself.xlApp57. 58. defread_data(self,iSheet,iRow,iCol):59. try:60. sht=self.book.Worksheets(iSheet)61. sValue=str(sht.Cells(iRow,iCol).Value)62. except:63. self.close()64. print(读取数据失败)65. exit()66. #去除.067. ifsValue-2:=.0:68. sValue=sValue0:-269. returnsValue70. 71. defwrite_data(se

8、lf,iSheet,iRow,iCol,sData,color=OK_COLOR):72. try:73. sht=self.book.Worksheets(iSheet)74. sht.Cells(iRow,iCol).Value=sData.decode(utf-8)75. sht.Cells(iRow,iCol).Interior.Color=color76. self.book.Save()77. except:78. self.close()79. print(写入数据失败)80. exit()81. 82. #获取用例个数83. defget_ncase(self,iSheet):

9、84. try:85. returnself.get_nrows(iSheet)-self.casebegin+186. except:87. self.close()88. print(获取Case个数失败)89. exit()90. 91. defget_nrows(self,iSheet):92. try:93. sht=self.book.Worksheets(iSheet)94. returnsht.UsedRange.Rows.Count95. except:96. self.close()97. print(获取nrows失败)98. exit()99. 100. defget_

10、ncols(self,iSheet):101. try:102. sht=self.book.Worksheets(iSheet)103. returnsht.UsedRange.Columns.Count104. except:105. self.close()106. print(获取ncols失败)107. exit()108. 109. defdel_testrecord(self,suiteid):110. try:111. #为提升性能特别从For循环提取出来112. nrows=self.get_nrows(suiteid)+1113. ncols=self.get_ncols(

11、suiteid)+1114. begincol=self.argbegin+self.argcount115. 116. #提升性能117. sht=self.book.Worksheets(suiteid)118. 119. forrowinrange(self.casebegin,nrows):120. forcolinrange(begincol,ncols):121. str=self.read_data(suiteid,row,col)122. #清除实际结果123. startpos=str.find()124. ifstartpos0:125. str=str0:startpos

12、.strip()126. self.write_data(suiteid,row,col,str,OK_COLOR)127. else:128. #提升性能129. sht.Cells(row,col).Interior.Color=OK_COLOR130. #清除TestResul列中的测试结果,设置为NT131. self.write_data(suiteid,row,self.argbegin+self.argcount+1,OK_COLOR)132. self.write_data(suiteid,row,self.resultCol,NT,NT_COLOR)133. except:1

13、34. self.close()135. print(清除数据失败)136. exit()137. 138. #执行调用139. defHTTPInvoke(IPPort,url):140. conn=httplib.HTTPConnection(IPPort)141. conn.request(GET,url)142. rsps=conn.getresponse()143. data=rsps.read()144. conn.close()145. returndata146. 147. #获取用例基本信息Interface,argcount,ArgNameList148. defget_c

14、aseinfo(Data,SuiteID):149. caseinfolist=150. sInterface=Data.read_data(SuiteID,1,2)151. argcount=int(Data.read_data(SuiteID,2,2)152. 153. #获取参数名存入ArgNameList154. ArgNameList=155. foriinrange(0,argcount):156. ArgNameList.append(Data.read_data(SuiteID,Data.titleindex,Data.argbegin+i)157. 158. caseinfo

15、list.append(sInterface)159. caseinfolist.append(argcount)160. caseinfolist.append(ArgNameList)161. returncaseinfolist162. 163. #获取输入164. defget_input(Data,SuiteID,CaseID,caseinfolist):165. sArge=166. #参数组合167. forjinrange(0,caseinfolist1):168. ifData.read_data(SuiteID,Data.casebegin+CaseID,Data.argb

16、egin+j)!=None:169. sArge=sArge+caseinfolist2j+=+Data.read_data(SuiteID,Data.casebegin+CaseID,Data.argbegin+j)+&170. 171. #去掉结尾的&字符172. ifsArge-1:=&:173. sArge=sArge0:-1174. sInput=caseinfolist0+sArge#组合全部参数175. returnsInput176. 177. #结果判断178. defassert_result(sReal,sExpect):179. sReal=str(sReal)180.

17、 sExpect=str(sExpect)181. ifsReal=sExpect:182. returnOK183. else:184. returnNG185. 186. #将测试结果写入文件187. defwrite_result(Data,SuiteId,CaseId,resultcol,*result):188. iflen(result)1:189. ret=OK190. foriinrange(0,len(result):191. ifresulti=NG:192. ret=NG193. break194. ifret=NG:195. Data.write_data(SuiteI

18、d,Data.casebegin+CaseId,resultcol,ret,NG_COLOR)196. else:197. Data.write_data(SuiteId,Data.casebegin+CaseId,resultcol,ret,OK_COLOR)198. Data.allresult.append(ret)199. else:200. ifresult0=NG:201. Data.write_data(SuiteId,Data.casebegin+CaseId,resultcol,result0,NG_COLOR)202. elifresult0=OK:203. Data.wr

19、ite_data(SuiteId,Data.casebegin+CaseId,resultcol,result0,OK_COLOR)204. else:#NT205. Data.write_data(SuiteId,Data.casebegin+CaseId,resultcol,result0,NT_COLOR)206. Data.allresult.append(result0)207. 208. #将当前结果立即打印209. printcase+str(CaseId+1)+:,Data.allresult-1210. 211. #打印测试结果212. defstatisticresult(

20、excelobj):213. allresultlist=excelobj.allresult214. count=0,0,0215. foriinrange(0,len(allresultlist):216. #printcase+str(i+1)+:,allresultlisti217. count=countflag(allresultlisti,count0,count1,count2)218. printStatisticresultasfollow:219. printOK:,count0220. printNG:,count1221. printNT:,count2222. 22

21、3. #解析XmlString返回Dict224. defget_xmlstring_dict(xml_string):225. xml=XML2Dict()226. returnxml.fromstring(xml_string)227. 228. #解析XmlFile返回Dict229. defget_xmlfile_dict(xml_file):230. xml=XML2Dict()231. returnxml.parse(xml_file)232. 233. #去除历史数据expectreal234. defdelcomment(excelobj,suiteid,iRow,iCol,s

22、tr):235. startpos=str.find()236. ifstartpos0:237. str=str0:startpos.strip()238. excelobj.write_data(suiteid,iRow,iCol,str,OK_COLOR)239. returnstr240. 241. #检查每个item(非结构体)242. defcheck_item(excelobj,suiteid,caseid,real_dict,checklist,begincol):243. ret=OK244. forcheckidinrange(0,len(checklist):245. r

23、eal=real_dictchecklistcheckidvalue246. expect=excelobj.read_data(suiteid,excelobj.casebegin+caseid,begincol+checkid)247. 248. #如果检查不一致测将实际结果写入expect字段,格式:expectreal249. #将returnNG250. result=assert_result(real,expect)251. ifresult=NG:252. writestr=expect+real+253. excelobj.write_data(suiteid,excelob

24、j.casebegin+caseid,begincol+checkid,writestr,NG_COLOR)254. ret=NG255. returnret256. 257. #检查结构体类型258. defcheck_struct_item(excelobj,suiteid,caseid,real_struct_dict,structlist,structbegin,structcount):259. ret=OK260. ifstructcount1:#传入的是List261. forstructidinrange(0,structcount):262. structdict=real_

25、struct_dictstructid263. temp=check_item(excelobj,suiteid,caseid,structdict,structlist,structbegin+structid*len(structlist)264. iftemp=NG:265. ret=NG266. 267. else:#传入的是Dict268. temp=check_item(excelobj,suiteid,caseid,real_struct_dict,structlist,structbegin)269. iftemp=NG:270. ret=NG271. 272. returnr

26、et273. 274. #获取异常函数及行号275. defprint_error_info():276. Returntheframeobjectforthecallersstackframe.277. try:278. raiseException279. except:280. f=sys.exc_info()2.tb_frame.f_back281. print(f.f_code.co_name,f.f_lineno)282. 283. #测试结果计数器,类似Switch语句实现284. defcountflag(flag,ok,ng,nt):285. calculation=OK:l

27、ambda:ok+1,ng,nt,286. NG:lambda:ok,ng+1,nt,287. NT:lambda:ok,ng,nt+1288. returncalculationflag()2、项目测试代码pythonview plaincopy1. #-*-coding:utf-8-*-2. #*3. #xxx_server_case.py4. #Author:Vince5. #Version:1.06. #Date:2011-3-107. #Description:内容服务系统测试代码8. #*9. 10. fromtestframeimport*11. fromcommon_libim

28、port*12. 13. httpString=/xxx_product/test/14. expectXmldir=os.getcwd()+/TestDir/expect/15. realXmldir=os.getcwd()+/TestDir/real/16. 17. defrun(interface_name,suiteid):18. print【+interface_name+】+TestBegin,pleasewaiting.19. globalexpectXmldir,realXmldir20. 21. #根据接口名分别创建预期结果目录和实际结果目录22.

29、expectDir=expectXmldir+interface_name23. realDir=realXmldir+interface_name24. ifos.path.exists(expectDir)=0:25. os.makedirs(expectDir)26. ifos.path.exists(realDir)=0:27. os.makedirs(realDir)28. 29. excelobj.del_testrecord(suiteid)#清除历史测试数据30. casecount=excelobj.get_ncase(suiteid)#获取case个数31. caseinf

30、olist=get_caseinfo(excelobj,suiteid)#获取Case基本信息32. 33. #遍历执行case34. forcaseidinrange(0,casecount):35. #检查是否执行该Case36. ifexcelobj.read_data(suiteid,excelobj.casebegin+caseid,2)=N:37. write_result(excelobj,suiteid,caseid,excelobj.resultCol,NT)38. continue#当前Case结束,继续执行下一个Case39. 40. #获取测试数据41. sInput=httpString+get_input(excelobj,suiteid,caseid,caseinfolist)42. XmlString=HTTPInvoke(com_ipport,sInput)#执行调用43. 44. #获取返回码并比较45. result_code=et.fromstring(XmlString).find(result_code).text46. ret1=check_result(excelobj,suiteid,caseid,result_code,excelobj.retCol)47. 48. #保存预期结果文件4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论