带有OpenGL和嵌入式WebView的本机移动应用程序(iOS/Android)测试框架
我有一个跨平台的移动应用程序:带有OpenGL和嵌入式WebView的本机移动应用程序(iOS/Android)测试框架,android,c++,ios,testing,opengl-es,Android,C++,Ios,Testing,Opengl Es,我有一个跨平台的移动应用程序: 90%使用跨平台C编写++ 其中8%依赖于平台(GUI代码)。对于iOS,我们使用Objective C。对于Android,我们使用Java 其中2%是嵌入式WebView(WebKit+Webhooks) 找到一个合适的测试框架一直是一个挑战 我们可以用C++谷歌测试框架进行大量的测试。尽管如此,我们还是希望进行端到端测试(如Selenium),在OpenGL视图和Webview中拖动/双击 我已经看过了Appium和Selenium,它们可以测试除了Op
- 90%使用跨平台C编写++
- 其中8%依赖于平台(GUI代码)。对于iOS,我们使用Objective C。对于Android,我们使用Java
- 其中2%是嵌入式WebView(WebKit+Webhooks)
<> Po>是否有一个测试OpenGL应用程序的好框架?< /P> < P>我以前编写过C++单元测试(Linux上的Qt)和OpenGL。我不知道它为什么不适合Java 对我起作用的是:
- 抽象您的OpenGL上下文提供程序,以便代码的其余部分独立于它。在我的例子中,主应用程序使用了Qt的QGLWidget,但unittests使用了基于pbuffer的应用程序,我可以创建它,而无需任何窗口基础设施(除了指定的X11显示)。后来我添加了一个“屏幕外Mesa”(纯软件OpenGL实现),这样他们甚至可以在没有GPU的无头构建机器上工作
- 保持OpenGL代码独立于GUI代码。在我的例子中,OpenGL“渲染引擎”对Qt类一无所知(例如鼠标事件)。定义您自己的可测试API,它与任何特定的GUI概念无关,并为其编写测试
- 在单元测试中,使用glReadPixels从帧缓冲区读回内容,或者用一些关于哪些像素应该是特定值的断言来点击它们,或者沿着回归测试路线,将帧缓冲区捕获与您知道是好的存储图像进行比较(或者是手动验证,或者是因为它是从其他参考模型生成的)
- 允许在任何图像回归测试中有点模糊;大多数OpenGL实现产生的输出略有不同
- (我没有这样做,但是…)理想情况下,您希望能够测试GUI层,方法是断言它会对您的渲染引擎进行预期的调用序列,以响应GUI活动。如果它这样做,并且由于上述测试,您对渲染层有信心…那么,无需实际执行渲染。因此,为渲染层创建一个合适的模拟对象用于GUI测试(我可以想象“鼠标从这里拖动到那里会导致调用渲染层来设置特定的变换矩阵”之类的测试)