#将测试结果写入文件
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!'