Comprobar el time de respuesta de la API en iOS usando Swift 3?

Sé que probar el time de respuesta de la API básicamente lo hace el server o el lado del backend, pero como estoy trabajando para una aplicación, también necesito verificar el time de respuesta de api desde iOS End.

Cómo puedo hacer esto ? Leí algunos enlaces donde dice hacer esto usando el inicio del timer y el final del timer y luego encuentro el time de respuesta por endTime – startTime pero esto no parece ser útil.

Quiero usar Xcode (incluso si XCTest está allí).

Aquí está mi API (escribí todo el método de consumo de web services en classs separadas en la class ApiManager):

LoginVC :

//Call Webservice let apiManager = ApiManager() apiManager.delegate = self apiManager.getUserInfoAPI() 

ApiManager :

 func getUserInfoAPI() { //Header let headers = [ "Accept" : "application/json", "Content-Type" : "application/json", ] //Call Web API using Alamofire library AlamoFireShanetworkingManagerInit() Alamofire.request(HCConstants.URL, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { response in do{ //Checking For Error if let error = response.result.error { //Stop AcitivityIndicator self.hideHud() //Call failure delegate method //print(error) self.delegate?.APIFailureResponse(HCConstants.EXCEPTION_MESSAGES.SERVICE_FAILURE) return } //Store Response let responseValue = try JSONSerialization.jsonObject(with: response.data!, options: JSONSerialization.ReadingOptions()) as! Dictionary<String, AnyObject> print(responseValue) //Save token if let mEmail = responseValue[HCConstants.Email] as? String { UserDefaults.standard.setValue(mEmail, forKey: HCConstants. mEmail) } //Stop AcitivityIndicator self.hideHud() //Check Success Flag if let _ = responseValue["info"] as? String { //Call success delegate method self.delegate?.apiSuccessResponse(responseValue) } else { //Failure message self.delegate?.APIFailureResponse(responseValue["message"] as? String ?? HCConstants.EXCEPTION_MESSAGES.SERVICE_FAILURE) } } catch {print("Exception is there "} } } 

No hay necesidad de un Timer , solo puede usar los objects Date . Debe crear un object Date que represente la date actual al momento de iniciar su request de API y en completionHandler de su request de API, use Date().timeIntervalSince(date: startDate) para calcular la cantidad de segundos que pasó.

Suponiendo que tiene una function para sus requestes que está devolviendo un cierre como un manejador de finalización, así es como puede medir su time de ejecución:

 let startDate = Date() callMyAPI(completion: { returnValue in let executionTime = Date().timeIntervalSince(date: startDate) }) 

Xcode en sí mismo no tiene herramientas de perfil, pero puede utilizar Time Profiler en Instruments, sin embargo, no estoy seguro de si daría los resultados correctos para funciones asíncronas.

Solución para su function específica: puede save la date de startDate justo después de la llamada a la function. Luego puede medir el time de ejecución en varios lugares (incluidos cada uno): inmediatamente después de que finaliza la request de networking (al comienzo del manejador de finalización) y en cada if statement antes de que se llame a su método de delegado.

 func getUserInfoAPI() { let startDate = Date() ... Alamofire.request(HCConstants.URL, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON { response in //calculate the time here if you only care about the time taken for the network request let requestExecutionTime = Date().timeIntervalSince(date: startDate) do{ if let error = response.result.error { self.hideHud() let executionTimeWithError = Date().timeIntervalSince(date: startDate) self.delegate?.APIFailureResponse(HCConstants.EXCEPTION_MESSAGES.SERVICE_FAILURE) return } //Store Response ... //Check Success Flag if let _ = responseValue["info"] as? String { //Call success delegate method let executionTimeWithSuccess = Date().timeIntervalSince(date: startDate) self.delegate?.apiSuccessResponse(responseValue) } else { //Failure message let executionTimeWithFailure = Date().timeIntervalSince(date: startDate) self.delegate?.APIFailureResponse(responseValue["message"] as? String ?? HCConstants.EXCEPTION_MESSAGES.SERVICE_FAILURE) } } catch {print("Exception is there "} } }