コード例 #1
0
    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')
コード例 #2
0
    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'数据长度不符')
コード例 #3
0
    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)
コード例 #4
0
    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()
コード例 #5
0
    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&param2=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]))
コード例 #6
0
    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())
コード例 #7
0
    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数据错误')
コード例 #8
0
 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)
コード例 #9
0
 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)
コード例 #10
0
 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)