问题背景交代

注意,JulyNovel只爬取免费小说,所有vip章节全部导航至起点网站,遵循robots协议,所有数据仅供学习用途,侵删

通过编写单元测试,提高JulyNovel系统可靠性

首先我们知道,一本完整书籍归档至少需要两条url:

bookinfo_url 书籍详情;

chapter_url 章节内容;

它们前后两者是一对多的父子关系。

两个典型场景

1.JulyNovel需要在request_url插入spider.wait队列之前去判断有没有必要去爬这条url

三条典型逻辑:

盗版源 && 完本 => 无需爬

盗版源 && 未完本 => 判断是否有待更新章节

正版源 && 完本 => 判断是否存在vip章节

正版源 && 未完本 => 判断是否存在vip章节 判断是否有待更新章节

单元测试简例

test_dbutil.py

# -*- coding: utf-8 -*-

import unittest
from app.utils.operate_db import DBUtil
class TestDBUtil(unittest.TestCase): def test_init(self):
db = DBUtil()
self.assertTrue(isinstance(db, DBUtil)) def test_is__book_saved(self):
db = DBUtil()
self.assertEqual(db.is_book_saved(xbook_id='1007994514'), True)
self.assertEqual(db.is_book_saved(book_name='飞剑问道'), True) self.assertEqual(db.is_book_saved(xbook_id='??'), False)
self.assertEqual(db.is_book_saved(book_name='??'), False) def test_is__chapter_saved(self):
db = DBUtil()
self.assertEqual(db.is_chapter_saved(xchapter_id='7lqcoydR9AdMs5iq0oQwLQ2'), True)
self.assertEqual(db.is_chapter_saved(chapter_name='第237章 渡鸟之爪', xbook_id='1007994514'), True) self.assertEqual(db.is_chapter_saved(xchapter_id='??'), False)
self.assertEqual(db.is_chapter_saved(chapter_name='??', xbook_id='1007994514'), False)
self.assertEqual(db.is_chapter_saved(chapter_name='??', xbook_id='??'), False) def test_is_free_chapter(self):
db = DBUtil()
self.assertEqual(db.is_free_chapter(xchapter_id='7lqcoydR9AdMs5iq0oQwLQ2'), True)
self.assertEqual(db.is_free_chapter(chapter_name='上架感言', xbook_id='1007994514'), True) self.assertEqual(db.is_free_chapter(xchapter_id='378925041'), False)
self.assertEqual(db.is_free_chapter(chapter_name='第237章 渡鸟之爪', xbook_id='1007994514'), False) self.assertEqual(db.is_free_chapter(xchapter_id='??'), False)
self.assertEqual(db.is_free_chapter(chapter_name='??', xbook_id='1007994514'), False)
self.assertEqual(db.is_free_chapter(chapter_name='??', xbook_id='??'), False)

在命令行中执行 python -m unittest tests.test_dbutil (注:test_dbutil在tests文件夹下)

通过我的爬取发现,起点在对几千章的小说目录进行了异步展示,而几百章的小说目录仍然是同步展示,直接抓取会导致抓不到章节目录。很皮。

2.JulyNovel需要在爬取书籍时判断这些书籍、章节是否能正确按照规则被解析

pass

Python 单元测试 增强系统健壮性的更多相关文章

  1. iOS 增强程序健壮性 - - 使用 NullSafe 对 <null> 处理

    在项目开发中,和服务端交互数据时,若服务端数据为空时,会出现 <null>,客户端解析时会 Crash,为了增强程序的健壮性,减少 Crash 的发生,可以使用 NullSafe 这个类别 ...

  2. 安装第三方Python模块,增加InfoPi的健壮性

    这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet    自动检测文本编码 2.lxml    用于解析 ...

  3. 人生苦短之Python函数的健壮性

    如何评论一个开发代码写的好?清晰简洁明了?No,No,一个处女座就可以写出来了,整齐地代码,详细的注释不是代码好的标准,应该说不是最重要的标准.代码写的是否健壮才是检验的重要标准. 代码的健壮性: 当 ...

  4. Python单元测试框架

    目录 概况 系统要求 使用PyUnit构建自己的测试 安装 测试用例介绍 创建一个简单测试用例 复用设置代码:创建固件 包含多个测试方法的测试用例类 将测试用例聚合成测试套件 嵌套测试用例 测试代码的 ...

  5. python单元测试框架 pyunit

    概况 系统要求 使用PyUnit构建自己的测试 安装 测试用例介绍 创建一个简单测试用例 复用设置代码:创建固件 包含多个测试方法的测试用例类 将测试用例聚合成测试套件 嵌套测试用例 测试代码的放置位 ...

  6. 使用 CSS perfer-* 规范,提升网站的可访问性与健壮性

    文本将介绍 CSS 媒体查询中新增的几个特性功能: prefers-reduced-motion prefers-color-scheme prefers-contrast prefers-reduc ...

  7. python单元测试框架笔记

    目录 单元测试概述 什么是单元测试 单元测试什么进行? 单元测试由谁负责? 单元测试需要注意 单元测试覆盖类型 python 单元测试框架 unittest pytest 测试框架 单元测试概述 什么 ...

  8. strcpy之代码的健壮性与可维护性

    strcpy   函数的原型是: char * strcpy(char * strDest,const char * strSrc);    功能:把从strSrc地址开始且含有NULL结束符的字符串 ...

  9. 一种数据与逻辑分离的Python单元测试工具

    一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...

随机推荐

  1. python学习——练习题(8)

    """ 题目:输出 9*9 乘法口诀表. """ def answer1(): """ 自己用最普通的双重循环 ...

  2. js将秒转换为 分:秒 函数

    /** * 将秒转换为 分:秒 * s int 秒数 */ function s_to_hs(s){ //计算分钟 //算法:将秒数除以60,然后下舍入,既得到分钟数 var h; h = Math. ...

  3. Squid Linux 代理服务器

    简介: Squid 是 Linux/Unix 平台下最为流行的高性能免费应用层代理服务器,它具有权限管理灵活.性能高和效率快的特点. 代理服务器可以提供文件缓存.复制和地址过滤等服务,充分利用有限的出 ...

  4. properties 中文乱码问题的解决

    在用properties处理配置信息时,发现有时出现中文乱码的问题,后经查资料得知是由于编码不一致引起的.于是解决之. [原理解释] 我们用 API操作properties文件,如果获取的属性值是中文 ...

  5. 【转】Pixel-Fillrate

    [Pixel-Fillrate] “填充率“以每秒钟填充的像素点为单位,“三角形(多边形)生成速度“则表示每秒钟三角形(多边形)生成个数.现在的3D显卡的性能也主要看着两项指标,这两项指标的数值越大, ...

  6. python 文件的读取&更新

    [python 文件的读取&更新] 任务抽象: 读取一个文件, 更新内容后, 重新写入文件. 实际应用: 磁盘上的一个配置文件, 读入内存后为一个dict, 对dict更新后重新写入磁盘. d ...

  7. PencilWang博客目录

    在这里有一坨目录,以后自己和别人看随笔都会方便很多 一 .刷题相关 1.BZOJ BZOJ1001(最大流,最短路)(EASY+)   BZOJ1002(数学)(NORMAL+)  BZOJ1003( ...

  8. Unity游戏语音(富文本消息)解决方案GVoice

    腾迅云-GVoice https://www.qcloud.com/document/product/556/7673 集成1-2天内可搞定,博主亲测 Unity5.4.4f1 今天又试了下语音转文字 ...

  9. ubuntu18.04 安装显卡驱动

    1.使用PPA仓库进行自动化安装 sudo add-apt-repository ppa:graphics-drivers/ppa && sudo apt update 2.查询所有u ...

  10. ubuntu 14.04 Clion2016.2 安装激活与安装后添加快捷启动方式

    参考链接:http://www.cnblogs.com/conw/p/5938113.html 下载clion for linux : http://www.jetbrains.com/clion/d ...