zoukankan      html  css  js  c++  java
  • Python 单元测试 增强系统健壮性

    问题背景交代

    注意,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

  • 相关阅读:
    LeetCode 275. H-Index II
    LeetCode 274. H-Index
    LeetCode Gray Code
    LeetCode 260. Single Number III
    LeetCode Word Pattern
    LeetCode Nim Game
    LeetCode 128. Longest Consecutive Sequence
    LeetCode 208. Implement Trie (Prefix Tree)
    LeetCode 130. Surrounded Regions
    LeetCode 200. Number of Islands
  • 原文地址:https://www.cnblogs.com/jiajin/p/8577452.html
Copyright © 2011-2022 走看看