继续介绍QIA开发中log部分。分为两方面,一是控制在测试过程中生成哪些log文件;二是在代码中通过注册log处理函数打印log。
通过修改“C:\Qualcomm\QDART\LogConfig\QDART_Logging_Configuration.xml”来配置log的路径、命名规则以及log类型。QDART Configuration Editor也可以编辑该xml。
"File Name"建议用“Sn-%DATE_TIME%-%TECHNOLOGIES%-"的格式来命名。在每次测试之前,修改这个xml,将当前DUT的Sn填到”File Name"中,方便l测试记录的查找及可能的llog数据处理。“Log Flags”建议只勾选“XML”、“HTML”、“TXT-Debug”。
如果要获取QIA测试过程中的debug log,可通过注册消息处理函数来实现。
m_scheudler->OnDebugMessage += gcnew QSPRScheduler::OnDebugMessageEventHandler(scheduler_OnDebugMessage);
使用QSPR test测试的部分,只注册一次,重复注册会导致收到多次重复消息。使用server test 的部分每次测试都要注册:
stm_register_system_event_handler(g_STM, &g_RFCAL, ptd, DutTestEventHandler);
stm_set_log_filename(g_STM, &g_RFCAL, (_bstr_t)strxttpath);
两个消息处理函数类似
void scheduler_OnDebugMessage(String^ window, String^ text, int level, bool NoEOL)
{
if(bdisplayDebuglog)
{
CString strtext = CString(text);
MyTrace(strtext,1);
}
if(window->ToUpper()->Contains("LOG"))
{
CString strtext = CString(text);
if(buse_radiated)
{
//XML Log file "file://C:\UserDefine-_P.xml"
if(strtext.Find(_T("XML Log file \"file:"))>-1)//strresultxmlfilepath,获取测试结果的路径
{
int pos1=strtext.Find(_T("file://"));
int pos2=strtext.Find(_T("\""),pos1);
g_strRadiatedresultxmlpath=strtext.Mid(pos1+7,pos2-pos1-7);
MyTrace(g_strRadiatedresultxmlpath,1);
}
}
if(buse_qseq)
{
int pos=strtext.Find(_T("[HTML]:"));
if(pos>-1)
{
CString strhtml=strtext.Mid(pos+8);
strhtml.Replace(_T(".html"),_T(".xml"));
vector_resultxmlpath.push_back(strhtml);
}
}
}
else if (window->ToUpper()->Contains("ERROR"))
{
CString strtext = CString(text);
MyTrace(strtext,1);
}
else
{
}
}
void DutTestEventHandler(void * context, int type, const char * msg)
{
ThreadData *ptd=(ThreadData *)context;
int iWinNo=ptd->iWinNo;
CString strtext;
switch (type)
{
default:
case 1: // debug
if(bdisplayDebuglog)
{
Trace((char *)msg,ptd->iWinNo);
}
break;
case 2: // log
//XML Log file "file://C:\UserDefine-_P.xml"
if(bdisplayDebuglog)
{
Trace((char *)msg,ptd->iWinNo);
}
strtext=CString(msg);
if(strtext.Find(_T("XML Log file \"file:"))>-1)//strresultxmlfilepath,获取测试结果的路径
{
int pos1=strtext.Find(_T("file://"));
int pos2=strtext.Find(_T("\""),pos1);
g_strresultxmlpath=strtext.Mid(pos1+7,pos2-pos1-7);
MyTrace(g_strresultxmlpath,iWinNo);
}
break;
case 3: // error
if(bdisplayDebuglog)
{
Trace((char *)msg,ptd->iWinNo);
}
break;
case 4: // TPL
// This is very verbose, uncomment when needed.
break;
case 5: // HTML
break;
}
}
在代码中获取测试结果的路径,以便从中解析测试结果输出。