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 以某种特性将测试用例组 ...
随机推荐
- Sass 入门 (一) 安装Sass
Sass安装 ruby安装 因为sass依赖于ruby环境,所以装sass之前先确认装了ruby.先导官网下载个ruby 在安装的时候,请勾选Add Ruby executables to your ...
- Custom Draw 基础(转载)
common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和 ...
- script放置最佳位置(转载)
html文件是自上而下的执行方式,但引入的css和javascript的顺序有所不同,css引入执行加载时, 程序仍然往下执行,而执行到<script>脚本是则中断线程,待该script脚 ...
- f.lux Ubuntu 下进行安装
这几天在搞Ubuntu 看的是我眼睛特痛,于是查了一下,有Linux 版的f.lux 于是我就行了一番的安装. 步骤 命令行 1. sudo add-apt-r ...
- 插入后获取到id
第一种方法: insert INTO student(name) VALUES("南亚");SELECT @@identity 第二种方法: insert INTO student ...
- VUE+WebPack游戏设计:'乘法防线'游戏设计
- 用C语言进行最基本的socket编程
什么是socket 你经常听到人们谈论着 “socket”,或许你还不知道它的确切含义.现在让我告诉你:它是使用 标准Unix 文件描述符 (file descriptor) 和其它程序通讯的方式.什 ...
- 相机IMU融合四部曲(二):误差状态四元数详细解读
相机IMU融合四部曲(二):误差状态四元数详细解读 极品巧克力 前言 上一篇文章,<D-LG-EKF详细解读>中,讲了理论上的SE3上相机和IMU融合的思想.但是,还没有涉及到实际的操作, ...
- STM32 FATFS文件系统移植
http://www.360doc.com/content/11/1221/10/7736891_173820469.shtml
- Java 8特性
1. Java8的新特性 1.1. Lambda表达式和函数式接口 最简单的Lambda表达式可以用逗号分隔的参数列表.->符号和功能语句块来表示.示例如下: Arrays.asList( &q ...