如何测试/运用android的屏幕旋转行为?

时间:2017-04-10 09:40:35

标签: android unit-testing

我想测试以下所有可能组合的Android行为"输入":

具体来说,我想看看输入如何影响以下"输出":

  • getWindowManager().getDefaultDisplay() .getRotation()(4个可能的值)

因此,这需要至少测试所有15*2*4*4=480个可能的输入状态。

此外,由于旋转行为通常取决于历史 输入(不仅仅是当前输入值), 我想测试(至少)从一个输入状态到"相邻"的所有可能的转换。输入状态, 即输入状态与给定输入状态相差一个输入参数。 此类输入状态转换的数量为:

      (number of input states) * (number of states adjacent to a given input state)
    = (15*2*4*4) * ((15-1) + (2-1) + (4-1) + (4-1))
    = 480 * 21
    = 10080

此外,有时输出取决于先前的输出以及先前和当前 输入(例如SCREEN_ORIENTATION_LOCKEDSCREEN_ORIENTATION_SENSOR_LANDSCAPE)。 给定输入状态的可能输出数量可以在1到4之间, 所以这会将必须测试的转换次数乘以最多4:

    10080 * 4 = 40320

要测试很多转换,因此测试必须是编程/脚本化的。 四个输入参数中的三个可以直接以编程方式进行控制; 不能直接控制的是设备的物理定位。

那么,如何编写脚本呢?我可以想到以下方法。

方法#1 :使用可编写脚本的模拟加速度计替换(物理或仿真)设备的加速度计 在测试期间。但是,如果我理解正确,那么Android的模拟加速度计就不存在了。

方法#2 :使用Android模拟器,脚本按下"逆时针旋转"和 "顺时针旋转"在主机上使用交互式自动化工具的按钮(例如applescript / autohotkey / xdotool)。

还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

事实证明这实际上是以下优秀问题的重复:   How can i simulate accelerometer in android emulator? 来自@ user1302884的excellent answer: 不幸的是,这个问题没有得到尊重,并且被关闭为主题(?!)所以我不会将其标记为副本。

但这里的答案是:不需要使用applescript / autohotkey / xdotool来驱动模拟器的ui; 相反,telnet到模拟器并告诉它你想要“向上”的方向。

telnet localhost 5554  # or whatever the port is
  telnet> sensor # to get help on the sensor command
  telnet> sensor get acceleration
      acceleration = 0:9.81:0  # if in natural orientation
  telnet> sensor get acceleration
      acceleration = -9.81:0:0  # if rotated 90 degrees CW from natural orientation
  telnet> sensor set orientation -1:1:0  # to set to 45 degrees CW from natural orientation

如果模拟显示器在响应中显示旋转了指定的度数,那将是很好的,但你不能拥有一切。