有个网友接到工作任务产生测试数据,具体任务如下:
“我们老大给了个这个的任务给我:
质量:重复率<0.1%,相似率<10%
数据根据该字段的类型和长度生成, 涵盖各种情况,包括边界值,异常值....字符串要包含所有字符集,规定的所有长度,时间跨度取前后3年以上,枚举字段要随机取完所有值....
特殊要求:
固定在一个字段里放测试标识,如在作者字段的前两个字符为"测试",便于识别和删除...”
他的解决问题思路是通过lr把现有数据库中的数据导入到参数文件中,然后发送给服务器(不知道他为什么从数据库中读取数据,然后再发送),导入到file中遇到问题是 lr报错 “check file format”。经过交流之后我们把他的问题简单化,其实就是一个目标产生数据,但是中间遇到的是两个问题,一个是数据来源问题 一个是数据如何发送问题
1.数据来源,如果是要网页文件信息,从他的方法来看,是利用lr读取数据库,那么我们来看看结合lr如何做呢?首先是利用vc写一个dll,从服务器上读取字段内容,然后在lr中读取该代码,2007年的时候当时帮大连的一个朋友写过一个dll代码,就是读取oracle数据库字段内容的,然后再lr中使用。根据以上思路写了个vc中伪代码(伪代码就是没有经过调试,或者没有实现完全的代码)如下:
_ConnectionPtr pConnection;
_RecordsetPtr pRecordSet;
ICfxDataAdoPtr pCfxDataAdo;
pRecordSet.CreateInstance(__uuidof(Recordset));
pConnection.CreateInstance(__uuidof(Connection));
// Read from database
pConnection->ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=";
pConnection->Open("","","",-1);
pRecordSet = pConnection->Execute("SELECT * FROM xxx",NULL,-1);
//获得pRecordSet字段数据
pRecordSet->Close();
pConnection->Close();
以上代码可以封装成函数放入dll后,在lr中调用dll,lr中的代码伪代码如下,
rc=lr_load_dll("xxx.dll");
if( rc != 0 ){
lr_error_message("lr_load_dll of advapi32.dll failed. Aborted for rc=%d",rc);
lr_abort();
}else{
strcpy(data,dll中调用返回的函数数据);
web_submit_form 发送出去要发送的数据包
}
我们在换一个思路,如果就是为了得到html这样的数据,那么我们是否可以自己写代码得到网站上任何的Html代码作为自己的数据,用vbs写了段代码:
Set XML = CreateObject("Microsoft.XMLHTTP")
XML.Open "GET", "http://www.51testing.com", False
XML.Send
vResponse = XML.responseText
MsgBox vResponse
以上代码调试通过
2.如何发送数据包
方法可以是利用lr发送,可以是直接发送请求,我们看如何直接发送请求,代码如下:
Dim xmlhttp
Set xmlhttp = New MSXML2.ServerXMLHTTP
xmlhttp.Open "POST", "http://xxxxxxx", False
xmlhttp.setRequestHeader "Content-Type", "xxxxx"
xmlhttp.send DataToSend
Set xmlhttp = Nothing
DataToSend
=====================================================
<HTML>
<HEAD>
<title>demo</title>
</HEAD>
<BODY>
xxxxxx
</BODY>
</HTML>
思路如上,解决问题中具体用到的技术大家可以找相应资料深入研究下。