newspaper-unit_tests源码分析

一、unit_tests.py

1.1 准备工作

1、def print_test(method)

打印出测试所用的函数名,函数运行时间以及状态。
具体的方法下面详述。

2、def mock_resource_with(filename, resource_type)

通过从预下载的文件中提取文本来模拟HTTP请求。
源路径为:data/test_prepare_urls.txt

内容如下:

http://example.com/cat/123/ ./123/ http://example.com/cat/
http://example.com/cat/123/ 123/ http://example.com/cat/
http://example.com/cat/123/ http://example.com/cat/123/ http://example.com/cat/
http://example.com/123/ /123/ http://example.com/cat/
3、def get_base_domain(url)

uk.reuters.com=>reuters.com,得到最基础的域名

4、def check_url(*args, **kwargs)

判断当前url是否是全文本案例

1.2 全文本案例测试

1、check_url全文本匹配测试

如果不是全文本,则跳过该测试用例
如果是全文本则执行测试操作

主要获得两个参数的BOOL,一个是出版日期,一个是文本信息,使用Article获取到文本信息进行比对。

思路:
在这里插入图片描述

2、test_exhaustive详细测试

测试的是一个数组,里面是一些url

打开文本:fulltext_url_list.txt,按照行依次读取作为url进行下一步的测试
在这里插入图片描述

在这里插入图片描述

1.3 setup_stage阶段设置

分为以下阶段
1、初始化
2、下载
3、解析
4、元数据
5、nlp

根据当前传入的参数的阶段名称stage_name,来进行匹配,执行对应的操作。

1.4 setUp设置初始链接

提前设置测试链接,一个源链接
url='http://www.cnn.com/2013/11/27/travel/weather-‘thanksgiving/index.html?iref=allsearch’)

在测试之前调用。

1.5 test_url设置测试链接

每次都将url='http://www.cnn.com/2013/11/27/travel/weather-‘thanksgiving/index.html?iref=allsearch’)
这个链接作为第一个测试用例,在该用例测试无误的情况下继续其他测试用例。

1.6 test_download_html测试下载信息是否正常

1、设置当前阶段为下载阶段
2、获取到cnn_article.html的html链接
3、下载该页面
4、断言,判断是否相等(页面下载状态、页面下载异常信息、页面文章的长度是否等于75406)

1.7 test_meta_refresh_redirect

在这个单元测试中,访问了example.com。。。哪个不好
找出如何模拟实际重定向

配置一个google_meta_refresh的html和配置方案,判断标题是否等于Example Domain

1.8 test_meta_refresh_no_url_redirect

同上,配置一个ap_meta_refresh的html和配置方案,判断标题是否等于News from The Associated Press

1.9 test_pre_download_parse

在“download()”之前调用“parse()”会产生错误

1.10 test_parse_html

1、设置当前阶段为解析阶段
2、设置一些数据,如作者,title,语言等
3、解析
4、nlp
5、判断正文文本和全文本是否相等。
6、这个部分还测试了头部的新闻图片,匹配图片是否相等(单独测)
7、断言,测试作者,标题,新闻顶部图片、名字,出版日期等。

1.11 test_meta_type_extraction测试元数据提取

1、测试当前阶段为原数据阶段
2、匹配文章和原数据类型是否一致

1.12 test_meta_extraction

一个元数据匹配信息,拿生成的数据和真实数据一一比对
如:

'title': 'After storm, forecasters see smooth sailing for Thanksgiving - CNN.com',
'author': 'Dana A. Ford, James S.A. Corey, Chien-Ming Wang, and Tom Watkins, CNN',
'news_keywords': 'winter storm,holiday travel,Thanksgiving storm,Thanksgiving winter storm'

作用不止于此,这段干嘛的没看懂

# if the value for a meta key is another dict, that dict ought to be
        # filled with keys and values
        dict_values = [v for v in list(meta.values()) if isinstance(v, dict)]
        self.assertTrue(all([len(d) > 0 for d in dict_values]))

        # there are exactly 5 top-level "og:type" type keys
        is_dict = lambda v: isinstance(v, dict)
        self.assertEqual(5, len([i for i in meta.values() if is_dict(i)]))

        # there are exactly 12 top-level "pubdate" type keys
        is_string = lambda v: isinstance(v, str)
        self.assertEqual(12, len([i for i in meta.values() if is_string(i)]))

1.13 test_pre_download_nlp

在下载文章之前测试运行NLP算法

1.14 test_pre_parse_nlp

在解析文章之前测试运行NLP算法

1.15 test_nlp_body

根据已经写好的关键字和摘要进行测试

2 TestDownloadScheme

2.1 test_download_file_success

测试下载网页是否成功,且长度是否匹配

2.2 test_download_file_failure

测试下载网页是否失败,是否有异常信息

3 ContentExtractorTestCase

里面有很多的方法,有的看不懂了,大概就是一些测试匹配各种字符串,以及测试配置、标题、域名、规范链接等

4 SourceTestCase

4.1 test_source_url_input_none

是空链接就跳过该链接,不进入下载擦耦走

4.2 test_source_build

测试链接为http://cnn.com
生成一个源对象,验证它没有错误,打印出来所有有效类别和源URL

剩下的源也是这样子经过测试的,但是可能并不能很好把所有的分类提取出来,因为这个分类主要是从html中去获取的,这里模仿的主要是cnn的官网主页。

4.3 test_cache_categories

测试链接为http://uk.yahoo.com
匹配类别

5 UrlTestCase

5.1 test_valid_urls

测试链接是否有效
在打开test_urls.tx测试其中所有的链接是否有效,如果有效则将其加入到列表中。
在这里插入图片描述

这里面共有40个链接,每个链接的第一个字节均是0或者1,1代表有效,0代表其他。

5.2 test_pubdate

检查url中的无关数据,是不是包含发布日期
打开test_urls_pubdate.txt文件,查看链接中是否包含日期,包含为1,不包含为0
在这里插入图片描述

5.3 test_prepare_url

把传入的url规范化,可以删除参数、哈希标记。如果是一个相对的url,它会将其与源域合并以生成一个abs url。
在这里插入图片描述
没看懂这个是要做什么,看根据框架得到的规范化的链接和实际的域名是否一致?

6 APITestCase

test_hot_trending确保链接是否可以运行
test_popular_urls确保方法可以运行

7 MThreadingTestCase

test_download_works

8 ConfigBuildTestCase

测试config building设置是否有效。
注意:不需要模拟响应,只是初始化对象,而不是实际调用下载
在这里初始化的内容有:
test_article_default_params:Article(url、中文、是否记忆)
test_article_custom_params:Source(url、中文、是否记忆、是否使用元数据、行数)
test_source_default_params:Source(url)
test_source_custom_params:Source(url、中文】树否记忆、行数)

9 MultiLanguageTestCase

语言测试,不同国家语言测试,获取文本与原数据进行匹配
test_chinese_fulltext_extract
test_arabic_fulltext_extract
test_spanish_fulltext_extract
test_japanese_fulltext_extract
test_japanese_fulltext_extract2
test_thai_fulltext_extract

10 TestNewspaperLanguagesApi

test_languages_api_call:自己的语言

11 TestDownloadPdf

11.1 test_article_pdf_ignoring

测试下载pdf的链接,忽略
文章链接https://www.adobe.com/pdf/pdfs/ISO32000-1PublicPatentLicense.pdf

11.2 test_article_pdf_fetching

取到pdf来进行比较

最后,主函数入口,如果已经存在,移除不进入到单元测试。
进入测试:
unittest.main(verbosity=0, argv=argv)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Αиcíеиτеǎг

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值