郑海鹏
(淮南联合大学信息工程学院 安徽淮南 232001)
目前,数据获取的渠道主要有三种:自有、爬取或购买。其中数据爬取方式属于数据自动获取的范畴,可以通过Python编写Web站点数据获取自动化测试用例加以实现,并可将获取到的实验数据用于数据分析。自动化测试通常用于替代人工方式,去执行那些繁杂的、高重复性的操作,进而节约大量的人力资源。Selenium为Web站点数据自动获取提供了基础框架,凭借其自身强大的功能,市场占有额越来越高。本文以Python+Selenium为核心,利用Web Driver数据驱动实现了数据自动获取功能。
Selenium通常用来编写Web应用的自动化测试脚本。早期Selenium1.x主要使用Selenium RC(Selenium Remote Control)进行自动化测试。Selenium2.x集成了Selenium和Web Driver的功能。Selenium可以用来模拟用户在浏览器中的操作。软件测试开发人员能够使用不同的编程语言如Java、Scala、Python等编写测试脚本,并且兼容在Google Chrome、IE、Firefox等浏览器中运行测试脚本[1]。基于Selenium是开源的,测试人员可以按需进行个性化定制。
Selenium主要由IDE、Grid和RC三个组件构成[2],其中IDE为浏览器插件,提供脚本编辑、录制及回放功能,录制脚本可以转换为Java、Python、PHP等多种脚本语言;Grid实际上是一个jar包,由hub节点及node节点构成,可在Dos命令行下执行。主要用于测试脚本的分布式处理,允许在多机及异构环境下运行测试脚本;RC(Remote Control)作为Selenium核心组件,由selenium Server和Client Libraries组成。其中Selenium Server用于控制浏览器行为,Client Libraries则在自动化测试脚本执行过程中,用以控制selenium Server库,以便达到自动化测试目的[3]。在Selenium2.x及后续版本中,使用Web Driver替代了Selenium RC。其中,Web Driver API是客户端、Web Driver作为浏览器驱动。对于程序执行过程中的每一条Selenium脚本,均会创建一个HTTP请求,并将该HTTP请求发送给浏览器的驱动Web Driver,由 Web Driver中HTTP Server接收这些 HTTP请求,依据HTTP Server接收到的请求,来具体操控对应浏览器。浏览器执行具体的测试步骤,并将执行结果返回给 HTTP Server,HTTP Server又将结果返回给 Selenium的脚本[4](Selenium工作流程图如图1所示)。其详细工作流程如下:
图1 Selenium工作流程
1)编写基于Selenium支持的测试脚本程序。
2)执行测试脚本程序。
3)Selenium Client向Web Driver发送请求。
4)Web Driver接收、解析相关请求,并将请求发送给浏览器。
5)浏览器接收请求后,执行对应操作,返回执行结果。
(一)实验数据需求分析。本文实验数据来源于域名为http://www.ahcyfc.com的安徽朝阳房产网。打开网站中二手房首页,仔细查看其中的某条二手房房产信息(如图2所示),对其中数据做需求分析,为后续的数据获取及Web前端展示做铺垫,需要从中提取的房屋详细信息包括:二手房所在小区、户型、建筑面积、房屋朝向、总价、每平米单价、实际看房人数。编写Python程序导入Selenium库,用以实现该网站数据自动化获取操作。
图2 二手房详细信息
(二)脚本设计。Selenium兼容多种浏览器。编写测试脚本过程中,需指明具体浏览器,本文使用 Firefox。
1.驱动并打开浏览器。
2.定位到对应元素。Selenium在操作浏览器时,应先定位到对应的元素。目前,主要有八种定位方法,如表1所示。
表1 Selenium元素定位方法功能描述
在获取二手房详细信息的需求过程中,需要定位二手房所在小区、户型、建筑面积、房屋朝向、总价、每平米单价、实际看房人数等数据对象。
3.设置Selenium定位方法参数。设置Selenium定位方法参数的实际作用是利用数据驱动将数据和脚本相分离[5]。本研究主要利用的Selenium定位方法为:find_element_by_xpath,即根据路径表达式来定位二手房测试实验数据。
全选一条二手房信息,选择:右击->审查元素,或按F12键来查看网页源码,发现房屋详细信息的路径为:
图3 房屋详细信息的路径
根据实验需求,对二手房所在小区等7个对象数据进行参数设置。具体脚本设计如下:
(一)数据驱动。在自动获取实验数据过程中,采用CSV文件格式来存放实验数据,在get_houseInfo()方法的末尾加入如下数据驱动脚本代码:
(二)程序实现。编写主程序,在主程序中调用get_houseInfo()方法,具体实现代码如下:
运行程序,显示实验数据获取过程(如图4所示),并将实验数据保存至House.csv文件中(如图5所示),进而实现了实验数据的自动获取。
图4 控制台输出自动获取到的实验数据
图5 将实验数据保存至House.csv文件
本文数据分析针对淮南二手房的每平米单价与房屋面积之间做K-Means聚类关联分析,给即将买房的人提供买房意见,具体实现过程主要代码如下(聚类结果如图6所示):
图6 房屋单价及面积聚类离散图
依据聚类结果,将淮南市二手房大体划分为以下五种类型:
1.郊区型(红色区域):此类房型多数地处郊区、面积适中,价格低廉。对于购房资金不充足的买房人而言,将是不错的选择。
2.市区中心型(地段好、橙色区域):此类房型多数地处淮南市核心地段(交通便捷、多数为学区房),均价最高,而且物以稀为贵在房子上也能验证。这类房子数量并不多。建议有一定经济实力的买家购买,可以获取周边更好的配套设施及教育资源。
3.刚需型(浅黄色区域) :此类房型多数地处市内,交通便捷,出行办事方便,面积、价格适中,房源充足。但地段一般,建议有结婚需求的年轻人购买。
4.“破旧小”型(浅绿色区域):此类房型面积最小,建筑历史年代久远,集中处于旧城、老城区。但其价格并不便宜。若短期内没有拆迁需求,不建议购买。
5.大户型(蓝色区域):此类房型面积最大,价格合理,多为别墅、复式大户型。建议成功人士购买。
本研究实现了Web网站数据的自动获取功能,并对获取到的实验数据做了简明的数据分析。实验表明:基于Selenium的自动化测试框架,用于实现数据的自动获取,在很大程度上提高了数据的获取效率[6],可以节省大量的人力资源。