网站的前端通常并没 有自动化测试,尽管前端才是整个项目中真正与用户零距离接触的唯一一个部分。
想象有一个由测试驱动的网络开发项目。每天进行测试以保证网络接口的每个环节的功能 都是正常的。每当有新的特性加入网站,或者一个元素的位置改变时,就执行一组自动化 测试
测试
测试和单元测试
虽然不同公司的单元测试定义和实践方法大相径庭,但是一个单元测试通常包含以下 特点。
• 每个单元测试用于测试一个零件(component)功能的一个方面
• 每个单元测试都可以完全独立地运行,一个单元测试需要的所有启动(setup)和卸载 (teardown)都必须通过这个单元测试本身去处理。单元测试不能对其他测试造成干扰, 而且不论按何种顺序排列,它们都必须能够正常地运行。
• 每个单元测试通常至少包含一个断言(assertion)
• 单元测试与生产代码是分离的
Python单元测试
Python 的单元测试模块 unittest
先导入模块然后 继承 unittest.TestCase 类,就可以实现下面的功能:
• 为每个单元测试的开始和结束提供 setUp 和 tearDown 函数
• 提供不同类型的“断言”语句让测试成功或失败
• 把所有以 test_ 开头的函数当作单元测试运行,忽略不带 test_ 的函数
与网站进行交互
就像你可以在浏览器里对网站上的不同元素执行一系列操作一样,Selenium 也可以对任何 给定元素执行很多操作,如下所示:
myElement.click() myElement.click_and_hold() myElement.release() myElement.double_click() myElement.send_keys_to_element("content to enter")
。Selenium 可以轻松地完成鼠标拖放动作(drag-and-drop)
Python单元测试与Selenium单元测试的 选择
Python 的单元测试语法严谨冗长,更适合为大多数大型项目写测试,而 Selenium 的测试方 式灵活且功能强大,可以成为一些网站功能测试的首选。那么应该使用哪个呢?
答案是:不需要选择。Selenium 可以轻易地获取网站的信息,而单元测试可以评估这些信 息是否满足通过测试的条件。因此,你没有理由拒绝把 Selenium 导入 Python 的单元测试, 两者组合是最佳拍档。
分布式计算
PySocks 是一个非常简单的 Python 代理服务器通信模块,它可以和 Tor 配合使用
从网站主机运行
无论现在还是将来,遇到一个网络数据采集项目时,你都应该问问自己以下几个问题。
• 我需要回答或要解决的问题是什么? • 什么数据可以帮助我,它们都在哪里? • 网站是如何展示数据的?我能准确地识别网站代码中包含信息的部分吗? • 该如何定位这些数据并获取它们? • 为了让数据更实用,我应该做怎样的处理和分析? • 怎样才能让采集过程更好,更快,更稳定