负载测试苹果推送通知服务器应用程序

问题描述:

我开发了一个服务器应用程序,可以发送推送消息到苹果服务器。我已经用几个设备测试过它,并且能够在设备上获取消息。问题是,我无法知道当我的数据库中有大约一百万个设备时,我的应用程序将如何执行。在这种情况下是否有加载测试服务器应用程序的方法?负载测试苹果推送通知服务器应用程序

难道你不能使用测试数据吗?您可以用测试脚本填充数据库。像随机设备ID ..? Apple APS当然不会接受这些信息,但是你可以测试你的能力,不是吗?

+0

我可以这样做,但它会像发送100万条消息到无效的设备ID到苹果。有没有机会苹果服务器以某种方式将其视为某种攻击(试图加载服务器将无效的请求)并阻止我们的应用程序一起。 – prashant 2012-03-09 15:36:49

+0

您也可以使用所有可以获取的设备并将其ID插入数据库多次。你会得到一个推送通知的音乐会:) – alex 2012-03-09 15:38:58

+0

在理想的情况下,我希望有一个虚拟服务器运行在与苹果相同的端口上,它只是吃掉所有扔到它的东西。这样我就可以在不打扰苹果的情况下测试我的应用程序。当然,我在这里做了一些小的假设,但是我认为这与我在生产环境中的接近。 – prashant 2012-03-09 15:48:51

我看到你想要什么,而我确实面临同样的问题,对我来说工作是逆向工程。 我刚刚查看了库并检查了验证deviceToken的函数。所以,虽然创建虚拟设备令牌,我只是确保生成的令牌是有效的每个库。

下面的代码会让你生成有效的设备令牌,现在它对你使用这个函数产生多少令牌。

def generateRandomDeviceTokenAndAppendItToJson(tokenLength: Int) { 
    val randomlyGeneratedDeviceToken = new StringBuilder() 
     randomlyGeneratedDeviceToken.append("   \"") 
     (1 to tokenLength) foreach { 
     times: Int => 
     if (tokenLength equals Device.Apple) 
     randomlyGeneratedDeviceToken.append(validCharacter().toString.charAt(0)) 
     else 
     randomlyGeneratedDeviceToken.append(Random.alphanumeric.head) 
     } 
     randomlyGeneratedDeviceToken.append("\",") 
     println(randomlyGeneratedDeviceToken) 
     writer.write(randomlyGeneratedDeviceToken.toString()) 
     } 

     private def validCharacter(): Int = { 
     val a = Random.alphanumeric.head 
     if ('0' <= a && a <= '9') 
     return (a - '0') 
     else if ('a' <= a && a <= 'f') 
     return ((a - 'a') + 10) 
     else if ('A' <= a && a <= 'F') 
     return ((a - 'A') + 10) 
     validCharacter() 
    } 

苹果deviceToken是64个字符,所以你需要迭代64次。