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
Python 单元测试 增强系统健壮性的更多相关文章
- iOS 增强程序健壮性 - - 使用 NullSafe 对 <null> 处理
在项目开发中,和服务端交互数据时,若服务端数据为空时,会出现 <null>,客户端解析时会 Crash,为了增强程序的健壮性,减少 Crash 的发生,可以使用 NullSafe 这个类别 ...
- 安装第三方Python模块,增加InfoPi的健壮性
这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet 自动检测文本编码 2.lxml 用于解析 ...
- 人生苦短之Python函数的健壮性
如何评论一个开发代码写的好?清晰简洁明了?No,No,一个处女座就可以写出来了,整齐地代码,详细的注释不是代码好的标准,应该说不是最重要的标准.代码写的是否健壮才是检验的重要标准. 代码的健壮性: 当 ...
- Python单元测试框架
目录 概况 系统要求 使用PyUnit构建自己的测试 安装 测试用例介绍 创建一个简单测试用例 复用设置代码:创建固件 包含多个测试方法的测试用例类 将测试用例聚合成测试套件 嵌套测试用例 测试代码的 ...
- python单元测试框架 pyunit
概况 系统要求 使用PyUnit构建自己的测试 安装 测试用例介绍 创建一个简单测试用例 复用设置代码:创建固件 包含多个测试方法的测试用例类 将测试用例聚合成测试套件 嵌套测试用例 测试代码的放置位 ...
- 使用 CSS perfer-* 规范,提升网站的可访问性与健壮性
文本将介绍 CSS 媒体查询中新增的几个特性功能: prefers-reduced-motion prefers-color-scheme prefers-contrast prefers-reduc ...
- python单元测试框架笔记
目录 单元测试概述 什么是单元测试 单元测试什么进行? 单元测试由谁负责? 单元测试需要注意 单元测试覆盖类型 python 单元测试框架 unittest pytest 测试框架 单元测试概述 什么 ...
- strcpy之代码的健壮性与可维护性
strcpy 函数的原型是: char * strcpy(char * strDest,const char * strSrc); 功能:把从strSrc地址开始且含有NULL结束符的字符串 ...
- 一种数据与逻辑分离的Python单元测试工具
一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...
随机推荐
- 转 CentOS下面安装RVM+ruby+Rails
CentOS6.2下面安装RVM+ruby+Rails (1)RVM官方网站应该是改版过一次, 使用 curl -L https://get.rvm.io | bash -s stable 下载并安装 ...
- Form表单标签的Enctype属性的作用及应用示例介绍
Enctype :指定将数据回发到服务器时浏览器使用的编码类型.用于表单里有图片上传. 编码类型有以下三种: application/x-www-form-urlencoded: 在发送前编码所有字符 ...
- STL - Vector迭代器简单应用之计算元素和
Description 用vector向量容器装入10个整数,然后,使用迭代器iterator和accumulate算法统计出这10个元素的和 Solution #include "stda ...
- Eclipse将控制台输出信息保存为文件
当你在Eclipse中 running/debugging一个应用程序的时候,有关该应用程序的运行调试信息及日志信息都会输出到控制台(console )显示,但是Eclipse只会显示最后一部分的日志 ...
- 【311】Python 构建 ArcMap 标注表达式
参考:构建标注表达式(官方帮助) 参考:计算字段示例(官方帮助) 说明:以上两者的方法略有不同,一个是通过字段表达式显示标注,一个通过字段计算新的字段,使用的工具方法也不同,前者通过 Layer.la ...
- CBCentralManager Class 的相关分析
Overview 总体概述 CBCentralManager objects are used to manage discovered or connected remote peripheral ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 16—Recommender Systems 推荐系统
Lecture 16 Recommender Systems 推荐系统 16.1 问题形式化 Problem Formulation 在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到 ...
- tomcat的配置文件server.conf中的元素的理解
tomcat的配置文件server.conf中的元素的理解 tomcat作为一个servlet服务器本身的配置文件是tomcat_home/conf/server.conf,这个配置文件中有很多元素, ...
- Kafka总结的一张图
- GameObject.Find 使用技巧
GameObject.Find是全局搜索 如果你已经知道这个元件在哪个元件里面的话,且担心场景中有重名元件,可以这样写 GameObject.Find ("Canvas/Panel/Imag ...