def test_ApacheLogRecord_usage(self): """测试基本使用.""" line = '''31.57.137.99 - - [11/Aug/2019:05:00:21 +0800] "GET /index.htm HTTP/1.0" 200 3203''' record = ApacheLogRecord.from_line(line) self.assertEqual(True, record.has_characteristic('article'), 'expect value is True') uri = record.get('uri') self.assertEqual(False, ApacheLogRecord.is_resource_file(uri), 'expect value is False')
def test_export(self, mock_get_title): mock_get_title.return_value = 'mock_title' full_report = FullReport() ip_report = IpReport() article_report = ArticleReport() line = '''31.57.137.99 - - [11/Aug/2019:05:00:21 +0800] "GET /index.htm HTTP/1.0" 200 3203''' record = ApacheLogRecord.from_line(line) full_report.add_record(record) ip_report.add_record(record) article_report.add_record(record) d1 = full_report.export_report() d2 = ip_report.export_report() d3 = article_report.export_report() d1_uri, d1_ip, d1_pv = next(d1.datas) self.assertEqual((d1_uri, d1_ip, d1_pv), ('/index.htm', '31.57.137.99', '1'), u'数据不一致') d2_ip, d2_count, d2_article_cnt = next(d2.datas) self.assertEqual((d2_ip, d2_count, d2_article_cnt), ('31.57.137.99', '1', '1'), u'数据不一致') d3_uri, d3_title, d3_pv, d3_ip_cnt = next(d3.datas) self.assertEqual((d3_uri, d3_title, d3_pv, d3_ip_cnt), ('/index.htm', 'mock_title', '1', '1'), u'数据长度不符')
def do_work(self): """ :return: """ lines = self.gen_lines() for line in lines: record = ApacheLogRecord.from_line(line) if record is None: continue self.parse_record(record)
def fetch_title(self): assert self.ops.fetch_title assert self.ops.domain lines = self.gen_lines() for line in lines: record = ApacheLogRecord.from_line(line) if record is None: continue if not record.has_characteristic('article'): continue uri = record.get('uri') TitleManager.fetch_title(self.ops.domain, uri) TitleManager.close()
def test_is_article(self, record): """测试 判断uri是否是文章类请求.""" data_model = [ '/test/index.html', '/test/index', '/test', '/test/index.html?param=xx', '/test/index.html?param=xx¶m2=yy', '/', '/test/index.doc', '/test/index.pdf', '/test/index.docx', '/test/index.html', '/test/html' ] record.side_effect = data_model expects = [ True, False, False, True, True, False, True, True, True, True, False ] obj = ApacheLogRecord({}) for idx, expect in enumerate(expects): result = ApacheLogRecordParser.is_article(obj) self.assertEqual(expect, result, 'result=%s, uri=%s' % (expect, data_model[idx]))
def test_output(self): full_report = FullReport() line = '''31.57.137.99 - - [11/Aug/2019:05:00:21 +0800] "GET /index.htm HTTP/1.0" 200 3203''' record = ApacheLogRecord.from_line(line) full_report.add_record(record) d1 = full_report.export_report() out = StringIO() d1.output(out) expect_val = '''## 完整报告 |URL|IP|访问次数| |:---:|:---:|:---:| |/index.htm|31.57.137.99|1| ''' self.assertEqual(expect_val, out.getvalue(), '打印结果和预期不符, result:%s' % out.getvalue())
def test_add_recoed(self, mock_get_title): mock_get_title.return_value = 'mock_title' full_report = FullReport() ip_report = IpReport() article_report = ArticleReport() line = '''31.57.137.99 - - [11/Aug/2019:05:00:21 +0800] "GET /index.htm HTTP/1.0" 200 3203''' record = ApacheLogRecord.from_line(line) full_report.add_record(record) ip_report.add_record(record) article_report.add_record(record) self.assertEqual(1, len(full_report.model), u'输据长度不符') self.assertEqual(1, len(ip_report.model), u'输据长度不符') self.assertEqual(1, len(article_report.model), u'输据长度不符') uri, ip = list(full_report.model.keys())[0] self.assertEqual('/index.htm', uri, u'uri数据错误') self.assertEqual('31.57.137.99', ip, u'ip数据错误')
def test_ApacheLogRecord_not_find_judge_func(self): line = '''31.57.137.99 - - [11/Aug/2019:05:00:21 +0800] "GET /index.htm HTTP/1.0" 200 3203''' record = ApacheLogRecord.from_line(line) ret = record.has_characteristic('test_not_find') self.assertEqual(False, ret, 'expect value is False, ret:%s' % ret)
def test_ApacheLogRecord_is_resoure_file(self): line = '''31.57.137.99 - - [11/Aug/2019:05:00:21 +0800] "GET /index.ico HTTP/1.0" 200 3203''' record = ApacheLogRecord.from_line(line) self.assertIsNone(record, 'expect value is None, record:%s' % record)
def test_ApacheLogRecord_not_match_line(self): """测试日志不正确,匹配不到行.""" line = '''0] "GET /index.htm HTTP/1.0" 200 3203''' record = ApacheLogRecord.from_line(line) self.assertIsNone(record, 'expect value is None, record:%s' % record)