http接口自动化测试框架实现(3)

发表于:2011-09-01来源:未知作者:领测软件测试网采编点击数: 标签:自动化测试
#将测试结果写入文件 def write_result(Data, SuiteId, CaseId, resultcol, *result): if len(result)1: ret=OK for i in range(0, len(result)): if result[i]==NG: ret=NG break if ret==NG: Data.write_

  #将测试结果写入文件

  def write_result(Data, SuiteId, CaseId, resultcol, *result):

  if len(result)>1:

  ret='OK'

  for i in range(0, len(result)):

  if result[i]=='NG':

  ret='NG'

  break

  if ret=='NG':

  Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,ret, NG_COLOR)

  else:

  Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,ret, OK_COLOR)

  Data.allresult.append(ret)

  else:

  if result[0]=='NG':

  Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,result[0], NG_COLOR)

  elif result[0]=='OK':

  Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,result[0], OK_COLOR)

  else: #NT

  Data.write_data(SuiteId, Data.casebegin+CaseId, resultcol,result[0], NT_COLOR)

  Data.allresult.append(result[0])

  #将当前结果立即打印

  print 'case'+str(CaseId+1)+':', Data.allresult[-1]

  #打印测试结果

  def statisticresult(excelobj):

  allresultlist=excelobj.allresult

  count=[0, 0, 0]

  for i in range(0, len(allresultlist)):

  #print 'case'+str(i+1)+':', allresultlist[i]

  count=countflag(allresultlist[i],count[0], count[1], count[2])

  print 'Statistic result as follow:'

  print 'OK:', count[0]

  print 'NG:', count[1]

  print 'NT:', count[2]

  #解析XmlString返回Dict

  def get_xmlstring_dict(xml_string):

  xml = XML2Dict()

  return xml.fromstring(xml_string)

  #解析XmlFile返回Dict

  def get_xmlfile_dict(xml_file):

  xml = XML2Dict()

  return xml.parse(xml_file)

  #去除历史数据expect[real]

  def delcomment(excelobj, suiteid, iRow, iCol, str):

  startpos = str.find('[')

  if startpos>0:

  str = str[0:startpos].strip()

  excelobj.write_data(suiteid, iRow, iCol, str, OK_COLOR)

  return str

  #检查每个item (非结构体)

  def check_item(excelobj, suiteid, caseid,real_dict, checklist, begincol):

  ret='OK'

  for checkid in range(0, len(checklist)):

  real=real_dict[checklist[checkid]]['value']

  expect=excelobj.read_data(suiteid, excelobj.casebegin+caseid, begincol+checkid)

  #如果检查不一致测将实际结果写入expect字段,格式:expect[real]

  #将return NG

  result=assert_result(real, expect)

  if result=='NG':

  writestr=expect+'['+real+']'

  excelobj.write_data(suiteid, excelobj.casebegin+caseid, begincol+checkid, writestr, NG_COLOR)

  ret='NG'

  return ret

  #检查结构体类型

  def check_struct_item(excelobj, suiteid, caseid,real_struct_dict, structlist, structbegin, structcount):

  ret='OK'

  if structcount>1: #传入的是List

  for structid in range(0, structcount):

  structdict=real_struct_dict[structid]

  temp=check_item(excelobj, suiteid, caseid,structdict, structlist, structbegin+structid*len(structlist))

  if temp=='NG':

  ret='NG'

  else: #传入的是Dict

  temp=check_item(excelobj, suiteid, caseid,real_struct_dict, structlist, structbegin)

  if temp=='NG':

  ret='NG'

  return ret

  #获取异常函数及行号

  def print_error_info():

  """Return the frame object for the caller's stack frame."""

  try:

  raise Exception

  except:

  f = sys.exc_info()[2].tb_frame.f_back

  print (f.f_code.co_name, f.f_lineno)

  #测试结果计数器,类似Switch语句实现

  def countflag(flag,ok, ng, nt):

  calculation = {'OK':lambda:[ok+1, ng, nt],

  'NG':lambda:[ok, ng+1, nt],

  'NT':lambda:[ok, ng, nt+1]}

  return calculation[flag]()

  2、项目测试代码

  view plaincopy to clipboardprint?

  # -*- coding: utf-8 -*-

  #****************************************************************

  # xxx_server_case.py

  # Author : Vince

  # Version : 1.0

  # Date : 2011-3-10

  # Description: 内容服务系统测试代码

  #****************************************************************

  from testframe import *

  from common_lib import *

  httpString='http://xxx.com/xxx_product/test/'

  expectXmldir=os.getcwd()+'/TestDir/expect/'

  realXmldir=os.getcwd()+'/TestDir/real/'

  def run(interface_name, suiteid):

  print '【'+interface_name+'】' + ' Test Begin,please waiting...'

  global expectXmldir, realXmldir

  #根据接口名分别创建预期结果目录和实际结果目录

  expectDir=expectXmldir+interface_name

  realDir=realXmldir+interface_name

  if os.path.exists(expectDir) == 0:

  os.makedirs(expectDir)

  if os.path.exists(realDir) == 0:

  os.makedirs(realDir)

  excelobj.del_testrecord(suiteid) #清除历史测试数据

  casecount=excelobj.get_ncase(suiteid) #获取case个数

  caseinfolist=get_caseinfo(excelobj, suiteid) #获取Case基本信息

  #遍历执行case

  for caseid in range(0, casecount):

  #检查是否执行该Case

  if excelobj.read_data(suiteid,excelobj.casebegin+caseid, 2)=='N':

  write_result(excelobj, suiteid, caseid, excelobj.resultCol, 'NT')

  continue #当前Case结束,继续执行下一个Case

  #获取测试数据

  sInput=httpString+get_input(excelobj, suiteid, caseid, caseinfolist)

  XmlString=HTTPInvoke(com_ipport, sInput) #执行调用

  #获取返回码并比较

  result_code=et.fromstring(XmlString).find("result_code").text

  ret1=check_result(excelobj, suiteid, caseid,result_code, excelobj.retCol)

  #保存预期结果文件

  expectPath=expectDir+'/'+str(caseid+1)+'.xml'

  #saveXmlfile(expectPath, XmlString)

  #保存实际结果文件

  realPath=realDir+'/'+str(caseid+1)+'.xml'

  saveXmlfile(realPath, XmlString)

  #比较预期结果和实际结果

  ret2= check_xmlfile(excelobj, suiteid, caseid,expectPath, realPath)

  #写测试结果

  write_result(excelobj, suiteid, caseid, excelobj.resultCol, ret1, ret2)

  print '【'+interface_name+'】' + ' Test End!'

  

原文转自:http://www.ltesting.net