4

是否有任何已知方法可以影响XCUITest调用测试方法的顺序?目前,以哪种顺序调用哪种测试方法似乎是完全任意的。

这使得无法定义特定的顺序。一般来说,Xcode 管理 XCUITest 运行的方式是次优的,因为您必须为每个测试用例定义一个测试函数。最好只从一种方法启动一个完整的测试会话,以便可以在例如会话:功能:场景中构建自己的测试。

...这正是我想要做的,因为我们遵循 Calabash 风格的测试结构,而我围绕 XCUITest 编写的框架提供了许多附加功能(例如 Testrail 集成)。

我试图以这样一种方式来实现框架,即所有功能和场景都是从一个test()方法组织和开始的。如果 Xcode 允许,这将起作用,但事实证明在每个场景之间终止和启动应用程序是有问题的,因为它会导致主线程停止甚至崩溃。因此,我为我们的框架添加了支持,以使用老式的 Xcode 方式为每个测试定义一个方法,但顺序被 Xcode 弄乱了,这弄乱了 Testrail 的日志和报告的生成。

4

2 回答 2

5

XCUITest 按字母升序执行测试(除非是随机的)。您可以像下面这样命名测试方法以按照您想要的顺序运行

test01FirstCase() { //test code }

test02ThirdCaseButRunsSecond() { //test code }

test03SecondCaseButRunsThird() { //test code }

于 2019-05-23T06:30:58.800 回答
0

如果您希望您的应用程序在每个测试方法后不启动和终止,那么只需将XCUIApplication().launch()方法从 Setup 方法中取出并将其放入第一个测试函数中,这就是应用程序仅启动一次而第二次测试执行将准确开始的方式从第一次测试结束的那一点开始。

如果要保持执行顺序,一种方法是定义以下顺序中的任何一种

      func Test01(){} 
      func Test01(){}
      func Test_A(){}
      func Test_B(){}
      func Test01_AnyString(){}
      func Test02_AnyString(){}

或者如果您想从单一方法开始所有执行,请按照以下步骤操作

     func Test01_veryFirstTestMethod(){

           secondTestMethod()
           thirdTestMethod()
           forthTestMethod()
           so on............
}

注意:你的secondTestMethod, thirdTestMethod,forthTestMethod在函数声明中不会有 test 关键字

于 2019-06-21T07:49:07.180 回答