示例#1
0
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
示例#2
0
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
示例#3
0
  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)
示例#4
0
  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)
示例#5
0
  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))
示例#6
0
  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)
示例#7
0
 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'))
示例#8
0
 def setUp(self):
   self.generator = generator.RandomBidGenerator()