文章目录
- 一、unit_tests.py
- 1.1 准备工作
- 1.2 全文本案例测试
- 1、check_url全文本匹配测试
- 2、test_exhaustive详细测试
- 1.3 setup_stage阶段设置
- 1.4 setUp设置初始链接
- 1.5 test_url设置测试链接
- 1.6 test_download_html测试下载信息是否正常
- 1.7 test_meta_refresh_redirect
- 1.8 test_meta_refresh_no_url_redirect
- 1.9 test_pre_download_parse
- 1.10 test_parse_html
- 1.11 test_meta_type_extraction测试元数据提取
- 1.12 test_meta_extraction
- 1.13 test_pre_download_nlp
- 1.14 test_pre_parse_nlp
- 1.15 test_nlp_body
- 2 TestDownloadScheme
- 3 ContentExtractorTestCase
- 4 SourceTestCase
- 5 UrlTestCase
- 6 APITestCase
- 7 MThreadingTestCase
- 8 ConfigBuildTestCase
- 9 MultiLanguageTestCase
- 10 TestNewspaperLanguagesApi
一、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)