如何在Android中订购Spoon自动化测试的测试用例?

时间:2014-04-03 04:16:36

标签: android automated-tests spoon

我添加了一个suite()方法来按照我想要的方式对我的测试进行排序,因此当我通过Android JUnit运行它们时,它们会相应地执行。但后来我注意到,当我使用Spoon执行时,使用cmd的那个,我的测试用例按字母顺序执行,这是默认顺序。

为什么会发生这种情况?如果不重命名我的测试用例,你将如何应对呢?

2 个答案:

答案 0 :(得分:2)

jUnit测试的理念是测试用例不应该相互依赖,所以顺序不应该很重要。这就是为什么你发现它很难做到的原因。您可能需要考虑使用“setUp”方法为测试用例创建初始条件,而不是让它们相互构建。

答案 1 :(得分:2)

我和你有同样的问题;我需要一个特定的订单,我的测试需要运行。我正在测试的应用程序太复杂,无法以不可预测的顺序运行。我的解决方案是:

将此添加到您的build.gradle

spoon {
     if (project.hasProperty('spoonClassName')){
         className = project.spoonClassName
      }
}

现在,您可以使用如下命令执行特定的类:

  

gradle spoon -PspoonClassName =< com.your.pakage.ClassName>

接下来,在Android项目的根目录下创建一个文件:runAllTests.sh

修改您的.sh,如下所示:

 #!/bin/sh
 date +%b-%dT%H.%M > timestamp.out

 sites="$HOME"/path/to/project/root

 timestamp="$(cat "$sites"/timestamp.out)"
 result_folder="$sites"/results
 destdir="$result_folder/Results-$timestamp"

 mkdir -p "$destdir"
 echo "Directory created: ${destdir##*/}"

 <---------- Here you start running the test --------------->

 echo "Starting Master Setup"
 gradle spoon -PspoonClassName=com.espresso.test.MasterSetup
 cp -r "$sites"/app/build/spoon "$destdir"/MasterSetup
 echo "Results saved to MasterSetup"

 echo "Starting WorkoutSchedule"
 gradle spoon -PspoonClassName=com.espresso.test.WorkoutSchedule
 cp -f "$sites"/app/build/spoon "$destdir"/WorkoutSchedule
 echo "Results saved to WorkoutSchedule"

 echo "Starting Setting.test"
 gradle spoon -PspoonClassName=com.espresso.test.Settings
 cp -r "$sites"/app/build/spoon "$destdir"/Settings
 echo "Results saved to Settings"

然后,提供脚本权限

  1. cd到脚本
  2. 输入chmod u+x runAllTest.sh
  3. 您已设置。现在只需cd到您的根目录,然后执行测试,请输入. runAllTest.sh

    所以,这样做:

    1. 首先,它创建一个timestamp.out。我使用这个,所以我可以反复将结果保存到文件中,而不会覆盖之前的结果。你不需要这个部分。
    2. 接下来,它会在项目的根目录中创建一个result文件夹(如果它尚不存在)。
    3. 然后,它将在名为Results-SOME-DATE的结果文件夹中创建一个文件夹。
    4. 最后,每个测试都会运行,将结果保存到项目的正常位置。 (内部构建/勺子)一旦测试完成,它将结果复制到结果文件夹,并适当地命名每个测试结果,以便很容易看到所有测试都运行。
    5. 注意:此脚本是为MAC编写的。如果你的窗口或其他任何东西,这个脚本可能需要修改。


      此外:您会发现打开每个文件夹以打开index.html会很不方便。所以我写了这个脚本来添加到你的bash_profile

      function open-results () {
        # the browser to open up `index.html' in.
        browser='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
      
        # let the user know what directory we're looking in
        printf "looking in %s" "$(pwd)"
        echo ...
      
        for paths in $(find ./ -name 'debug' -type d); do
          for files in $(find "$paths" -name 'index.html'); do
           open -a "$browser" "$files"
          done
        done
        echo done
       } 
      

      现在,cd位于Results-SOME-DATE的终端,并输入open-results。再次,这是为终端写的。您可能需要根据您的操作系统进行修改。但结构应该是相同的

      我希望这会有所帮助。