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 以某种特性将测试用例组 ...
随机推荐
- C#:Json数据反序列化为Dictionary并根据关键字获取指定的值
转自曾是土木人原文 C#:Json数据反序列化为Dictionary并根据关键字获取指定的值 Json数据: { "dataSet": { "header": ...
- 「小程序JAVA实战」小程序 loading 提示框与页面跳转(37)
转自:https://idig8.com/2018/09/02/xiaochengxujavashizhanxiaochengxu-loading-tishikuangyuyemiantiaozhua ...
- Spring+Log4j的集成总结
导入依赖的jar包 <log4j.version>1.2.16</log4j.version> <!-- 自动引入slf4j-api.jar,log4j.jar,以及sl ...
- 解决MySql 数据库 提示:1045 access denied for user 'root'@'localhost' using password yes
今天想用用MySQL 数据库 谁知道老提示 1045 access denied for user 'root'@'localhost' using password yes 最后在csdn 上找到 ...
- Agile1001社区10月份活动:一张图解读企业级产品思维
活动信息 主题:一张图解读企业级产品思维 地点:北京市海淀区苏州街3号大恒科技大厦南座4层 时间: 2017-10-15 14:00 - 17:00 报名链接:http://www.hdb.com/p ...
- 解决OpenFeign默认无法上传文件的问题
前言 最近在项目中使用OpenFeign时,发现其不支持文件上传功能.网上找了很多资料,最后找到feign-form和feign-form-spring的解决方案.但其默认只支持单文件上传,不支持多文 ...
- MyCat的安装及基本使用(MySQL分库分表)
1.Mycat的简介 1.1 数据库集群产生的背景 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数 ...
- linux下echo与time服务的程序实现
一.针对ECHO服务的TCP客户软件的实现 1.网络拓扑结构: 2.源码: #include <stdio.h> #include <stdlib.h> #include &l ...
- 高性能Web服务器Nginx的配置与部署研究(11)应用模块之Memcached模块的两大应用场景
一.应用场景1 最近在一个项目中,用到了Nginx的Memcached模块,所以就在这个系列教程中提前把Memcached模块拿出来写了.另外发现最近我的 博客文章频频被很多用采集器的网站拿走,帮我发 ...
- 746. Min Cost Climbing Stairs 最不费力的加权爬楼梯
[抄题]: On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once yo ...