iOS测试推送通知(UI测试)的最佳实践

iOS测试推送通知(UI测试)的最佳实践,ios,swift,xcode,xcode-ui-testing,uitest,Ios,Swift,Xcode,Xcode Ui Testing,Uitest,我想用推送通知对我的应用程序进行UI测试,也许你们中的一些人已经找到了最佳实践。有很多教程和问题,但我没有找到令人满意的答案 启动测试 发送推送通知 点击按钮通知 做事 但是发送推送通知的最佳实践是什么 触发推送通知的Rest调用 访问终端(但如何访问?)并运行:xcrun simctl push com.example.my-app examplephush.apns 发送本地推送通知 模拟服务器 使用类似于 谢谢!:) 用于测试如果要创建测试推送通知 此库非常有用。使用终端使用单行命令

我想用推送通知对我的应用程序进行UI测试,也许你们中的一些人已经找到了最佳实践。有很多教程和问题,但我没有找到令人满意的答案

  • 启动测试
  • 发送推送通知
  • 点击按钮通知
  • 做事
  • 但是发送推送通知的最佳实践是什么

    • 触发推送通知的Rest调用
    • 访问终端(但如何访问?)并运行:
      xcrun simctl push com.example.my-app examplephush.apns
    • 发送本地推送通知
    • 模拟服务器
    • 使用类似于

    谢谢!:)

    用于测试如果要创建测试推送通知


    此库非常有用。

    使用终端使用单行命令测试推送通知

    在Mac中安装Houston,在终端中的命令下运行

  • gem安装休斯顿

    如果你面临这样的错误

    获取休斯顿-2.4.0.gem 错误:执行gem时。。。(Gem::FilePermissionError) 您没有/Library/Ruby/Gems/2.6.0目录的写入权限

    首先在终端中运行以下命令以安装Ruby

    brew安装ruby

    导出GEM\u HOME=“$HOME/.GEM”

    gem安装导轨

    成功安装后,请重新运行

    gem安装休斯顿

  • 转到pem文件文件夹并从该文件夹打开终端

  • 在命令下面运行

    apn推送“设备令牌”-c PEM_文件名-m“消息”

    比如:

    apn推送“5a4b74d5e5fc325b14d2f2641aa11bfb9744d1f88922822a5ed3512376d5f5b9”-c myapp_apns_dev.pem-m“测试”

  • 成功运行上述命令后,它将要求输入PEM密码短语,这是PEM文件的密码

    如果您的应用处于活动状态,请使用生产pem文件名

    像这样,

    apn推送“5A4B74D5E5FC325B14D2F2641AA11BF9744D1F88922822A5ED3512376D5F5B9”-c myapp_apns_pro.pem-m“测试”

    完成了

    对于UI测试,您可以使用本地通知,

    您必须为本地通知设置categoryIdentifier,还必须确保在AppExtension Info.plist文件中将相同的categoryIdentifier设置为UNNotificationExtensionCategory

    欲了解更多详情,请参考以下链接

    下面是使用类别标识符触发本地通知的示例代码

    let content = UNMutableNotificationContent()
    content.title = title
    content.body = body
    content.categoryIdentifier = "LOCAL_NOTIFICATION"
        
    if let info = userInfo {
           let dic = ["body" : "Custom Data"]
           content.userInfo = dic as [AnyHashable : Any]
     }
        
    content.sound = UNNotificationSound.init(named: UNNotificationSoundName(rawValue: sound))
                
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
                
    let request = UNNotificationRequest(identifier: "LOCAL_NOTIFICATION", content: content, trigger: trigger)
        
    let notificationCenter = UNUserNotificationCenter.current()
         notificationCenter.add(request) { (error) in
              if let error = error {
                    print("Error \(error.localizedDescription)")
               }
     }
    

    嗨,非常感谢你的回答。我已经尝试过NWPusher,但它并不令人满意。你能分享一下NWPusher面临的问题吗?但是我不能用这种方法触发UI测试的推送通知,是吗?我认为上面的信息对于推送通知自定义UI测试来说已经足够了。这实际上是一个很好的解决方案。您的代码在UI测试中不起作用,但您可以将其放在应用程序委托中并使用launchArguments。非常感谢。我稍后会发布代码:)