我有一个跨平台的移动应用程序:
找到合适的测试框架一直充满挑战。
我们可以使用C ++ Google Test Framework进行大量测试。不过,我们希望进行端到端测试(如Selenium),在OpenGL视图和Webview周围进行拖动/双击。
我看过Appium和Selenium,它可以测试除OpenGL接口之外的所有内容(WebvViews的触发),但我找不到任何OpenGL测试的例子。
是否有一个测试OpenGL应用程序的良好框架?
答案 0 :(得分:0)
我已经为C ++编写了单元测试(Qt on Linux)& OpenGL之前。我不知道它也不适用于Java。
对我有用的东西是:
抽象您的OpenGL上下文提供程序,以便您的其余代码独立于它。在我的情况下,主应用程序使用Qt的QGLWidget,但是单元测试使用了基于pbuffer的单元测试,我可以创建没有窗口基础设施(除了指定的X11 DISPLAY)。后来我添加了一个“offscreen Mesa”(纯软件OpenGL实现),所以他们甚至可以在没有GPU的无头构建机器上工作。
保持您的OpenGL代码独立于您的GUI代码。在我的例子中,OpenGL“渲染引擎”对Qt类(例如鼠标事件)一无所知。定义您自己的可测试API,它不依赖于任何特定的GUI概念,并为其编写测试。
在单元测试中,使用glReadPixels从帧缓冲区读取内容,并使用一些关于哪些像素应该是特定值的断言来点击它们,或者沿着回归测试路径向下并将帧缓冲区捕获与存储的比较您知道的图像是好的(来自手动验证,或者是因为它是从其他参考模型生成的)。
在任何图像回归测试中都要稍微模糊一些;大多数OpenGL实现产生的输出略有不同。
(我没有这样做,但是......)理想情况下,您希望能够通过声明它对渲染引擎的预期调用序列响应GUI活动来测试GUI层。如果它这样做,并且由于上述测试你对渲染层有信心......好吧,不需要实际进行渲染。因此,在GUI测试时创建一个合适的渲染层模拟对象(我想象“鼠标从这里拖到那里导致调用渲染层来设置特定的变换矩阵”......这样的东西)。
希望它有所帮助!我发现它.. 参考文献Automated testing for OpenGL application