def CreateRequesters(num_senders, max_qps, url, logger_obj, google_ids=None, seconds=0, requests=0, interval=0): """Creates num_senders threads, and a sender.HTTPSender object for each. Args: num_senders: The number of sender threads to create. max_qps: Max overall qps. url: The URL to which senders will send requests. logger_obj: A log.Logger object. google_ids: A list of Google user IDs or None to randomly generate user ids. seconds: The number of seconds to continue sending requests. requests: The number of requests to send. interval: The number of seconds to wait between thread creation. Returns: A list of Requester objects. """ seconds = seconds or 0 requests = requests or 0 # Create at most max_qps/10 threads, giving each thread at least 10 QPS. num_senders = min(num_senders, max_qps / 10) num_senders = max(num_senders, 1) # Avoid setting num_senders to 0. send_rate_per_sender = num_senders / float(max_qps) requests_per_sender = requests / num_senders requesters = [] for i in xrange(num_senders): generator_obj = generator.RandomBidGenerator(google_ids) sender_obj = sender.HTTPSender(url) requester = Requester(generator_obj, logger_obj, sender_obj, send_rate_per_sender, seconds, requests_per_sender) requester.name = 'requester-thread-%d' % i requesters.append(requester) if interval: time.sleep(interval) return requesters
def CreateRequesters(num_senders, max_qps, url, logger_obj, tanx_ids=None, seconds=0, requests=0, interval=0, mobile_rate=0, mobile_device_ids=None, video_rate=0, video_ad_type=0): """创建num_senders线程,并为每个创建sender.HTTPSender对象 Args: num_senders:发件人线程创建 max_qps:最大的整体QPS url:发件人将请求发送到的URL logger_obj:log.Logger对象 tanx_ids:Tanx用户ID或没有随机生成的用户ID列表 seconds:继续发送请求的秒数。 requests:请求发送。 interval:秒之间等待的线程创建的数量。 mobile_rate: 按照多少比例产生含有mobile消息的bid请求 mobile_device_ids: mobile消息内部的device_id列表 video_rate: 产生视频广告bid请求的比例 video_ad_type: 视频广告的类型, 0表示非线性广告, 1表示线性广告 Returns: A list of Requester objects. """ seconds = seconds or 0 requests = requests or 0 # Create at most max_qps/10 threads, giving each thread at least 10 QPS. num_senders = min(num_senders, max_qps / 10) num_senders = max(num_senders, 1) # Avoid setting num_senders to 0. send_rate_per_sender = num_senders / float(max_qps) requests_per_sender = requests / num_senders requesters = [] for i in xrange(num_senders): generator_obj = generator.RandomBidGenerator(tanx_ids, mobile_rate, mobile_device_ids, video_rate, video_ad_type) sender_obj = sender.HTTPSender(url) requester = Requester(generator_obj, logger_obj, sender_obj, send_rate_per_sender, seconds, requests_per_sender) requester.name = 'requester-thread-%d' % i requesters.append(requester) if interval: time.sleep(interval) return requesters
def testGeneratingOneRandomHtmlBidRequest(self): """Tests that generating one random html bid request works.""" self.generator = generator.RandomBidGenerator(instream_video_proportion=0.0) bid_request = self.generator.GenerateBidRequest() self.CheckCommonBidRequest(bid_request) # Html specific expectations. for adslot in bid_request.adslot: self.assertEqual(len(adslot.height), 1) self.assertEqual(len(adslot.width), 1) self.assertNotEqual(adslot.height[0], 0) self.assertNotEqual(adslot.width[0], 0) for vendor in adslot.allowed_vendor_type: self.assertTrue(vendor in generator.VENDOR_TYPES)
def testGenerateGoogleIdFromList(self): """Tests generating a Google ID from a list.""" # Real sample values from the Cookie Matching service. google_ids = [ 'CAESEBs2zXrUdzP08NfyRcwuOic', 'CAESEGDp9dG8BR26gKybOFwKVnQ', 'CAESELGsXo_3kPoHM2EdtzhqvSs', 'CAESEPOq9BSD5GWBmb716V8R-uo', 'CAESEJaOYa0vEUojtGMTlkf9UoM', 'CAESECwK0aD3FY0QIaU6cA1ln2A', ] self.generator = generator.RandomBidGenerator(google_ids) bid_request = realtime_bidding_pb2.BidRequest() self.generator._GenerateGoogleID(bid_request) self.assertTrue(bid_request.HasField('google_user_id')) self.assertTrue(bid_request.google_user_id in google_ids)
def testGenerateAdGroupIdsFromList(self): """Tests generating AdGroup IDs from a list.""" adgroup_ids = [ 5642578842, 5663180187, 5663180325 ] self.generator = generator.RandomBidGenerator(adgroup_ids_list=adgroup_ids) bid_request = realtime_bidding_pb2.BidRequest() self.generator._GenerateAdSlot(bid_request) self.assertEqual(1, len(bid_request.adslot)) adslot = bid_request.adslot[0] self.assertTrue(adslot.matching_ad_data) for matching_ad_data in adslot.matching_ad_data: self.assertTrue(matching_ad_data.adgroup_id in adgroup_ids, '%s not in %s' % (matching_ad_data.adgroup_id, adgroup_ids))
def testGeneratingOneRandomVideoBidRequest(self): """Tests that generating one random instream video bid request works.""" self.generator = generator.RandomBidGenerator(instream_video_proportion=1.0) bid_request = self.generator.GenerateBidRequest() self.CheckCommonBidRequest(bid_request) # Instream video specific expectations. self.assertTrue(bid_request.HasField('video')) self.assertTrue(bid_request.video.HasField('videoad_start_delay')) # -1 = post roll, 0 = pre roll, positive number = mid roll. self.assertTrue(bid_request.video.videoad_start_delay >= -1) if bid_request.video.HasField('max_ad_duration'): # Duration must always be positive. self.assertTrue(bid_request.video.max_ad_duration > 0) for adslot in bid_request.adslot: self.assertEqual(len(adslot.height), 0) self.assertEqual(len(adslot.width), 0) for vendor in adslot.allowed_vendor_type: self.assertTrue(vendor in generator.INSTREAM_VIDEO_VENDOR_TYPES)
def testGenerateRandomGoogleId(self): """Tests generating a random Google ID.""" self.generator = generator.RandomBidGenerator() bid_request = realtime_bidding_pb2.BidRequest() self.generator._GenerateGoogleID(bid_request) self.assertTrue(bid_request.HasField('google_user_id'))
def setUp(self): self.generator = generator.RandomBidGenerator()