问题背景交代

注意,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 编程的 19 个资源 (转)

    学习 Python 编程的 19 个资源 2018-01-07 数据与算法之美 编译:wzhvictor,英文:codecondo segmentfault.com/a/119000000418731 ...

  2. IOS省电

    1.关闭定位 2.关闭后台刷新

  3. xUtils怎么post请求上传字符串

    xUtils算是一个非常实用老牌的框架了,但是有些情况,特别是网络请求部分,总是不太方便.需要折腾下才了解用法.今天来聊聊网络模块的用法. 其实看例子就明白了,post JSON数据也是一样道理,这里 ...

  4. MySQL批量添加表字段

    ALTER TABLE custom ADD contacts2 VARCHAR(50) NOT NULL DEFAULT '' COMMENT '客户联系人2',ADD phone2 VARCHAR ...

  5. ubuntu 下安装nanomsg和nnpy

    nanomsg nanomsg是ZeroMQ作者用C语言重写的一个Socket库,其用法和模式和ZeroMQ差不多,但是具有更好的性能和更完善的接口. 首先下载源码 wget https://gith ...

  6. MySQL内置功能之事务、函数和流程控制

    主要内容: 一.事务 二.函数 三.流程控制 1️⃣  事务 一.何谓事务? 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. # ...

  7. css常用属性总结第二弹:id选择器

    承接上一篇class选择器,这一篇我们来说说css的id选择器. id选择器类似于类选择器,不过也有一些重要的差别,首先,id选择器前面有一个#号----称它为棋牌号吧,class为点号,用法就和cl ...

  8. GC类

    [GC类] GC是一个静态类. 垃圾回收器跟踪并回收托管内存中分配的对象.垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存.当使用可用内存不能满足内存请求时,垃圾回收会自动进行.或者,应 ...

  9. Spark会产生shuffle的算子

    去重 def distinct() def distinct(numPartitions: Int) 聚合 def reduceByKey(func: (V, V) => V, numParti ...

  10. VUE+WebPack游戏设计:欲望都市城市图层的设计