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

  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/jiajin/p/8577452.html
Copyright © 2011-2022 走看看