【问题标题】:How to order test cases for Spoon Automated Testing in Android?如何在 Android 中为 Spoon 自动化测试订购测试用例?
【发布时间】:2014-04-03 04:16:36
【问题描述】:

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

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

【问题讨论】:

    标签: android automated-tests spoon


    【解决方案1】:

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

    将此添加到您的build.gradle:

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

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

    梯度勺 -PspoonClassName=

    接下来,在您的 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

    您已设置完毕。 现在只需将cd 设置为您的根目录,然后要执行您的测试,请输入. runAllTest.sh。

    那么,这是做什么的:

    1. 首先,它创建一个timestamp.out。我使用它是为了可以一遍又一遍地将我的结果保存到一个文件中,而不会覆盖以前的结果。你不需要这部分。
    2. 接下来,它会在您的项目的根目录中创建一个result 文件夹(如果该文件夹尚不存在)。
    3. 然后,它将在结果文件夹中创建一个名为Results-SOME-DATE的文件夹。
    4. 最后,每个测试都将运行,将结果保存到项目的正常位置。 (在 build/spoon 内)一旦测试完成,它会将结果复制到结果文件夹,并适当地命名每个测试结果,以便轻松查看所有测试运行。

    注意:此脚本是为 MAC 编写的。如果您在 Windows 或其他任何设备上,则此脚本可能需要修改。


    另外:您会发现打开每个文件夹以打开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。同样,这是为终端编写的。您可能需要根据您的操作系统进行修改。但是结构应该是一样的

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗯,问题是我的应用程序有一个数据库,那里的数据会影响它的布局,比如禁用按钮和视图。所以,我需要一种方法来确保测试用例按顺序完成。或者有没有办法通过robotium清除我的应用数据?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 2014-09-17
      • 2012-10-03
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多