返回介绍

8.5 用新数据测试

发布于 2024-01-27 21:43:11 字数 2645 浏览 0 评论 0 收藏 0

前面我们已经学习了编写文档、代码脚本化、组织代码结构,现在我们应该编写一些测试,或者用新数据来测试。这可以帮我们检查代码的运行是否正确,是否与与预期相同,还可以明确代码的含义。我们将数据清洗脚本化的原因之一就是我们可以复用这些代码,因此用新数据测试可以证明我们在代码标准化上花的时间和精力是值得的。

测试刚写过的脚本的一种方法是,我们能否将其轻松应用于在 UNICEF 网站上找到的相似数据。我们来看一下。你应该已经从本书仓库(https://github.com/jackiekazil/data-wrangling)中下载了 wm.csv 和 wm_headers.csv 两个文件。这两个文件是津巴布韦 UNICEF 数据中的女性调查数据。

我们尝试在脚本中使用这些文件,替换男性调查数据。要做到这一点,我们只需修改清洗脚本中的两个文件名,将其修改为两个妇女调查数据文件的路径。我们还应该将调查类型修改为 'wm',这样我们才能区分两个数据集中的数据。

 女性数据集要比男性的大得多。如果你有未保存的数据,我们建议先保存数据,关闭其他程序,然后再进行下一步。关于这一点,可以思考一下如何在脚本中改善内存使用。

我们来看一下能否成功导入数据:

import dataset

db = dataset.connect('sqlite:///data_wrangling.db')

wm_count = db.query('select count(*) from unicef_survey where survey="wm"') ➊

count_result = wm_count.next() ➋

print count_result

❶ 我们用的是直接查询,可以快速查看 survey='wm' 的行数。这应该只包括我们将类型设为 'wm' 后第二次运行的数据行。

❷ 读取查询结果,利用查询响应的 next 方法提取出第一个结果。我们用的是 count,所以我们应该只得到一个结果。

我们从女性数据集中成功导入了超过 300 万个问题和回答。我们的脚本是有效的,我们可以看到输出结果!

利用相似数据测试脚本是确保脚本按预期运行的一种方法。从中还可以发现,你的脚本通用性很高,可以复用。但测试代码还有很多其他方法。Python 有不少很好的测试库,可以帮你编写测试脚本和应用测试数据(甚至测试 API 响应),从而保证代码正常运行。

Python 标准库中有一些内置的测试模块。unittest 库(https://docs.python.org/2/library/unittest.html)可以为 Python 代码做单元测试。它有一些好用的内置类,利用 assert 语句来测试代码是否正常运行。如果想为代码编写单元测试,我们可以写一个测试,判断 get_rows 函数返回的是不是一个列表。我们还可以判断列表长度和文件的数据行数是否相同。我们可以用这些断言测试每一个函数。

另一个流行的 Python 测试框架是 nose 库(https://nose.readthedocs.org/en/latest/)。nose 是一个非常强大的测试框架,额外插件(https://nose.readthedocs.io/en/latest/plugins/builtin.html)和配置可以提供很多功能选项。如果你的仓库很大,许多开发者负责同样的代码,有不同的测试需求,那么这个库是很好用的。

不知道先用哪一个?那么 pytest 库(http://pytest.org/latest/)可能适合你。你可以用任意一种风格编写测试,还可以在需要时换用另一种风格。它的社区也相当活跃,里面有许多演讲和教程(http://docs.pytest.org/en/latest/talks.html#talks-and-blog-postings),所以如果你想深入了解之后编写自己的测试,那么可以先用这个库。

 通常来说,测试集的结构是在每一个模块下有一个测试文件(对于我们当前的仓库结构来说,我们会在每一个目录下放一个测试文件,除了数据文件夹和配置文件夹)。有些人为文件夹中的每一个 Python 文件编写一个测试文件,所以很容易判断每项测试针对的是哪一个具体文件。其他人将测试放在一个单独的目录中,其结构与 Python 文件结构相同。

无论你选择哪种测试风格或文件结构,一定要确保前后一致、风格明确。这样你就会知道在哪里可以找到测试文件,你(和其他人)也可以在必要时运行这些测试代码。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文