【发布时间】:2017-07-10 06:19:36
【问题描述】:
我正在为我的 iOS swift 项目实施单元测试。我想为项目中的 POST API 实现性能测试,但我不知道如何实现该 POST API。我已经测试了 GET API,这给了我想要的结果。
这是我要实现的代码
func testPerfromancePOSTAPI() {
let session = URLSession.shared
var request = URLRequest(url: MY_URL)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
do {
request.httpBody = try JSONSerialization.data(withJSONObject: MY_SERVICE_PARA, options: .prettyPrinted)
} catch let error {
print(error.localizedDescription)
}
self.measure {
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
print("response JSON = \(json)")
}
} catch let error {
XCTFail("Expectation Failed with error: %@", file: error as! StaticString);
}
})
task.resume()
}
}
当我运行此测试时,它成功通过但不打印响应 JSON,也不给出错误并显示“时间 0.0000 秒(161% STDEV)”,而在邮递员中运行相同的 API 需要几秒钟。 请检查并帮助我解决这个问题。
【问题讨论】:
-
你检查完成块是否被执行了吗? @vivek
-
@jegadeesh 我放了调试点,但它从来没有出现在完成块中。
-
这就是问题所在。您确定您的请求正在访问服务器吗? @Vivek
-
删除 self.measure 代码并直接恢复任务。不知道self.measure里面的代码会不会被执行。
-
@jegadeesh 在这种情况下它将执行完成块,但它会被视为功能测试而不是性能测试
标签: ios swift performance-testing xctest xctestcase