我正在使用 Vapor (XCTVapor) 和 Python 测试作为应用程序依赖项进行简单的 XCTest 设置,但它从不执行我的测试。 , 5 分钟后,它终止并显示“测试运行程序在启动后从未开始执行测试”。
static func main() async throws {
var env = try Environment.detect()
try LoggingSystem.bootstrap(from: &env)
guard let stdLibPath = Bundle.main.path(forResource: "python-stdlib", ofType: nil) else { return }
guard let libDynloadPath = Bundle.main.path(forResource: "python-stdlib/lib-dynload", ofType: nil) else { return }
setenv("PYTHONHOME", stdLibPath, 1)
setenv("PYTHONPATH", "\(stdLibPath):\(libDynloadPath)", 1)
// Temporarily disable Python
Py_Initialize()
print ("Py_Initialize complete")
// we now have a Python interpreter ready to be used
let app = Application(env)
defer { app.shutdown() }
do {
try await configure(app)
} catch {
app.logger.report(error: error)
throw error
}
try await app.execute()
}
我能够在 app.execute 上命中断点,但没有任何进展,并且测试用例上没有命中断点。我正在通过 XCode 进行构建。
在 spindump 中调度线程。
Thread 0x23a87 DispatchQueue "com.apple.main-thread"(1) 412 samples (1-412) priority 46 (base 46)
412 start + 1903 (dyld + 25631) [0x7ff80675441f]
412 main + 102 (entrypoint.swift in app + 14630) [0x1050d4926]
412 ??? (libswift_Concurrency.dylib + 227060) [0x7ffc0beb16f4]
412 ??? (libswift_Concurrency.dylib + 227107) [0x7ffc0beb1723]
412 CFRunLoopRun + 40 (CoreFoundation + 1041893) [0x7ff806c0b5e5]
412 CFRunLoopRunSpecific + 560 (CoreFoundation + 503489) [0x7ff806b87ec1]
412 __CFRunLoopRun + 1365 (CoreFoundation + 506496) [0x7ff806b88a80]
412 __CFRunLoopServiceMachPort + 145 (CoreFoundation + 511999) [0x7ff806b89fff]
412 mach_msg + 19 (libsystem_kernel.dylib + 6282) [0x7ff806a6f88a]
412 mach_msg_overwrite + 692 (libsystem_kernel.dylib + 34260) [0x7ff806a765d4]
412 mach_msg2_trap + 10 (libsystem_kernel.dylib + 5538) [0x7ff806a6f5a2]
*411 ipc_mqueue_receive_continue + 0 (kernel + 1528192) [0xffffff8000451180]
*1 ipc_mqueue_receive_continue + 0 (kernel + 1528192) [0xffffff8000451180]
所有其他线程似乎都来自 NIO 线程池。 (NIO-ELT-)和(TP-#)。每个 16 个线程
测试文件:
@testable import app
//import XCTVapor
import PythonKit
//import XCTest
import XCTVapor
final class appTests: XCTestCase {
override func setUp() async throws {
try await super.setUp()
}
override func setUpWithError() throws {
print ("setupWthError 1")
try super.setUpWithError()
print ("setupWthError 2")
}
func testPython() async throws {
print("TestPython")
let sys = Python.import("sys")
XCTAssertNotNil(sys)
print("Python Version: \(sys.version_info.major).\(sys.version_info.minor)")
print("Python Encoding: \(sys.getdefaultencoding().upper())")
print("Python Path: \(sys.path)")
_ = Python.import("math") // verifies `lib-dynload` is found and signed successfully
}
func testHelloWorld() async throws {
let app = Application(.testing)
defer { app.shutdown() }
try await configure(app)
try app.test(.GET, "hello", afterResponse: { res in
XCTAssertEqual(res.status, .ok)
XCTAssertEqual(res.body.string, "Hello, world!")
})
}
}
这还不一定是完整的答案。您没有显示您在第一个代码块中使用的导入内容,但您应该:
import App
import Vapor
我无法编译
try await app.execute()
。通常是try await app.run()
。如果你尝试这个会发生什么?