首页 > 代码库 > sixsix团队“餐站”应用M2阶段测试报告——爬虫部分
sixsix团队“餐站”应用M2阶段测试报告——爬虫部分
爬虫 2.0 测试报告
1.单元测试
模块类 | 输入 | 预期 | 实际 | 分析 |
网页分 析 | 一个包含若干 链接的网页 | 将页面上的 URL 作初 步筛选过滤后提取 出来,并爬取相关内 容存入数据库 | 网页上的 URL 都被提取出来 放在队列中, 数据库存取正 常 | 模块功能 正常 |
队列 |
| 队列里的 URL 项有序 进入下载 | 无异常 | 模块功能 正常 |
下载 | 提供 URL 项 | 按提供的地址获取 该网页内容 | 该网页被下载 | 模块功能 正常 |
存储 | 包含店家信息 或者菜品信息 的网页 | 将所有正确信息存 入数据库 | 所有信息正确 存储入数据库 相应位置 | 模块功能 正常 |
2.分模块测试的工作没有出现任何异常。各模块和函数都工作正常。
3. 对比测试
下图为该链接 http://ele.me/place/e8706f4e4ebf 打开的网页
图二为数据库中爬取该网页得到的内容
通过以上图一和图二的对比可以看出爬取的数据和网页上的数据是一致的,没有遗漏的信 息,这只是举一个例子,其他的经过抽样测试也是正确的,这里就不一一列举了。
4.爬虫正确性和性能测试
经纬度的正确性测试:
目的:测试 GetLungAndLat.java 中得到的经纬度是否准确 测试标准:市界的地理坐标为:北纬 39”26’至 41”03’,东经 115”25’至 117”30’,
得到的经纬度超出这个范围则数据不准确
程序代码:
1.从数据库中读取经纬度
public ArrayList dbSelect(String tableName, ArrayList fields, String selCondition){
ArrayList mapInList = new ArrayList();
String selFields = "";
for (int i = 0; i<fields.size(); ++i)
selFields += fields.get(i) + ", "; String selFieldsTem = selFields.substring(0,
selFields.length() - 2);//根据 String 的索引提取子串
try{
dbstate = dbconn.createStatement();
String sql = "select " + selFieldsTem + " from " +
tableName + selCondition;
print("sql = " + sql);
try{
dbresult = dbstate.executeQuery(sql);
}catch(Exception err){
print("Sql = " + sql);
print("Exception: " + err.getMessage());
}
while(dbresult.next()){
String longitude=new String();
//String price=new String();
longitude=dbresult.getString("longitude");
//price=dbresult.getString("price");
mapInList.add(longitude);
//mapInList.add(price);
}
}catch(Exception e){
print("Exception: " + e.getMessage());
}
return mapInList;
}
2.对读取出的经纬度进行检查
ArrayList str = dc.dbSelect("store", fields, selCondition); //--->>>选择记录
if (str.size() != 0){
dc.print("select OK!");
dc.print("str‘s size = " + str.size());
for(int i = 0; i<str.size(); ++i){
storeStr=str.get(i).toString();
storeFloat=Float.parseFloat(storeStr);
storeFloat=Float.parseFloat(storeStr);
if(storeFloat<115.4||storeFloat>117.5){
if(storeFloat<115.4||storeFloat>117.5){
nolongitude++;}
longitude++;}
value=http://www.mamicode.com/nolongitude/longitude; dc.print("超出经纬度范围的个数:"); System.out.println(nolongitude);
dc.print("总店家个数:"); System.out.println(""+longitude);
System.out.println(value);
}
运行结果截图:
得到结果:
数据库中含有店家 10095 个,经纬度超出范围店家 323 个,占总店家 3.19% 经纬度正确率为 96.81%。 总结:根据以上结果可以得出,经纬度的正确率是很高的,完全可以作为 app 的数据使用。
2.边界值和无效值的处理
| 问题描述 | 解决方案 |
1 | 极少数经纬度不正确 | 经纬度的数据由百度 API 提供, 如果查询不正确,我们会假定一 个北京城区的经纬度值。 |
2 | 标签更新导致爬虫程序爬取不正 确 | 修改爬虫程序,重新分析标签 |
3 | 部分网页菜品图片不存在 | 设置一个预定的图片 |
4 | 解析经纬度值的时候,有的 json 串没有正确的经纬度值 | 当检测到这样的值的时候,就缩 减查询地名的字数,直到能查到 正确的经纬度值 |
sixsix团队“餐站”应用M2阶段测试报告——爬虫部分