improve test_closespider_pagecount_no_item and corresponding test spider

This commit is contained in:
guillermo-bondonno 2024-07-11 13:26:22 -03:00
parent a40d5281cf
commit 5f0fad16f5
2 changed files with 14 additions and 9 deletions

View File

@ -283,15 +283,19 @@ class ItemSpider(FollowAllSpider):
yield {}
class MaxItemsKeepCrawlingSpider(FollowAllSpider):
def __init__(self, max_items=10, *args, **kwargs):
class MaxItemsAndRequestsSpider(FollowAllSpider):
def __init__(self, max_items=10, max_requests=10, *args, **kwargs):
super().__init__(*args, **kwargs)
self.max_items = max_items
self.items_scraped = 0
self.max_requests = max_requests
def parse(self, response):
self.items_scraped = 0
self.pages_crawled = 1 # account for the start url
for request in super().parse(response):
yield request
if self.pages_crawled < self.max_requests:
yield request
self.pages_crawled += 1
if self.items_scraped < self.max_items:
yield Item()
self.items_scraped += 1

View File

@ -7,7 +7,7 @@ from tests.spiders import (
ErrorSpider,
FollowAllSpider,
ItemSpider,
MaxItemsKeepCrawlingSpider,
MaxItemsAndRequestsSpider,
SlowSpider,
)
@ -44,20 +44,21 @@ class TestCloseSpider(TestCase):
def test_closespider_pagecount_no_item(self):
close_on = 5
max_items = 5
max_requests = close_on + max_items
crawler = get_crawler(
MaxItemsKeepCrawlingSpider,
MaxItemsAndRequestsSpider,
{
"CLOSESPIDER_PAGECOUNT_NO_ITEM": close_on,
},
)
yield crawler.crawl(max_items=max_items, mockserver=self.mockserver)
yield crawler.crawl(
max_items=max_items, max_requests=max_requests, mockserver=self.mockserver
)
reason = crawler.spider.meta["close_reason"]
self.assertEqual(reason, "closespider_pagecount_no_item")
pagecount = crawler.stats.get_value("response_received_count")
itemcount = crawler.stats.get_value("item_scraped_count")
self.assertEqual(itemcount, max_items)
self.assertLessEqual(pagecount, close_on + itemcount)
self.assertGreater(pagecount, itemcount)
@defer.inlineCallbacks
def test_closespider_errorcount(self):