async function http(options) {
  const {method, url, headers, args, body, status, schema, match, notMatch, showSchema} = options;
  assert(methods[method], `not support http method ${method}`)

  if (headers && typeof(headers) === 'object' && typeof(body) === 'object') {
    headers['Content-type'] = 'application/json; charset=utf-8'
  }
  const res = await httpRequest(method, url, headers, args, body)
  if (argv.log || options.log) {
    console.log('>>> request [%s %s] headers: %o, body: %o', 'POST', url, headers, body)
    console.log('>>> response status: %d, body: %o', res.status, res.body)
  }
  await checkResponse(res, status, schema, match, notMatch, showSchema)
  return res;
}
http request by chai-http or supertest
@param {!options} options request options
       method: http method, supported: get,put,post,delete.
       url: request url
       headers: request headers
       args: request args for get request
       body: request body for post,put,delete request.
       status: expect response status, default is 200.
       schema: expect response body schema for restful response
       match: regex pattern for matching response body.
       notMatch: regex pattern for not matching response body.
@return {res} http response object.