当前正在将我的UITest运行结果集成到TestRail中,因此在每次测试运行后,它将在testrail中将我的测试标记为Pass \ Fail。

我的想法是:

  • 在CI中创建一个“预构建”脚本,该脚本将在testrail中创建测试运行。
  • 在执行自动化过程中,在测试tearDown()中获取测试结果(如果测试失败或未失败),请将其全部保存到json文件中。 -,这是第一个问题,如果测试失败,我如何获得?
  • 完成所有测试后,运行“后构建”脚本以获取更新的json文件并将请求发送到测试rail(将标记通过测试/失败测试)

  • 已经从事此工作的任何人,它听起来很适合您吗?
    有什么建议吗?


    测试示例:
    import XCTest
    
    class MyUITests: XCTestCase {
    
        override func setUp() {
            super.setUp()
            continueAfterFailure = false
            appEntry.app.launch()
            dismissSystemAlerts()
        }
    
        override func tearDown() {
            super.tearDown()
        }
    
        func test_Elements() {
            // MARK: Sample test
            // my test actions are here
        }
    }
    

    最佳答案

    这就是我的实现方式。
    首先,我的CI中有预构建脚本,它将在TestRail中创建新的Test Run。然后,UITestObserver将API发送给TR以更新状态。

    我添加的新类:

    import Foundation
    import XCTest
    
    class UITestObserver: NSObject, XCTestObservation {
        // Handle Test Case Failure
        public func testCase(_ testCase: XCTestCase,
                             didFailWithDescription description: String,
                             inFile filePath: String?,
                             atLine lineNumber: Int) {
            var testCaseId: [String] = []
            if let MyTestCaseID = testCase as? BaseTest { testCaseId = MyTestCaseID.inegrateTestRailId() }
            if testCaseId != ["NA"] {
                postTestRailAddResultAPI(for: testCase, testCaseId: testCaseId, description: description)
            }
        }
    
        // Handle Test Case Pass
        public func testCaseDidFinish(_ testCase: XCTestCase) {
            let testRun = testCase.testRun!
            let verb = testRun.hasSucceeded
            var testCaseId: [String] = []
            if let MyTestCaseID = testCase as? BaseTest { testCaseId = MyTestCaseID.inegrateTestRailId() }
            if verb == true && testCaseId != ["NA"] {
                postTestRailAddResultAPI(for: testCase, testCaseId: testCaseId, description: "PASS")
        }
    }
    

    在BaseTest setUp中添加了以下行:
    XCTestObservationCenter.shared.addTestObserver(UITestObserver())
    

    并实现了函数postTestRailAddResultAPI,该函数发送实际请求以更新状态。
    现在,我所有的测试都有testCaseId,它存储TestRail TestCase number的值,这就是它知道要更新哪个TC的方式。

    10-06 00:51