class_docstr: GRPCServer test
class_docstr_tok: ["GRPCServer","test"]
code: def test_muilt_params(self):
      service = api_service.APIService(desc="test")
  
      @service.api(path="/test")
      def test(url: str, ids: T.List[int]):
          return {"url": url, "ids": ids}
  
      @service.api(path="/test_list", output_model=JSON())
      def test_list(url: str, ids: T.List[int]):
          return [url, ids]
  
      self.server = GRPCServer(service)
      self.server.start("localhost", 50001)
  
      client = Client("localhost", 50001)
      data = {"url": "my_test_url", "ids": [2, 3, 4]}
      response = client("/test", data)
      self.assertEqual(from_json(response.content), data)
  
      data = ["my_test_url", [2, 3, 4]]
      response = client("/test_list", data)
      self.assertEqual(response.content, data)
  
      # test not exist path
      response = client("/not_exist", "")
      self.assertEqual(response.code, -1)
  
      async def run_async():
          async with AsyncClient("localhost", 50001) as aclient:
              response = await aclient("/test_list", data)
              self.assertEqual(response.content, data)
  
      asyncio.run(run_async())
  
imports: import unittest
  import typing
  import asyncio
  from pydantic import BaseModel
  import numpy
  from towhee import api_service, pipe
  from towhee.serve.grpc.server import GRPCServer
  from towhee.serve.grpc.client import Client, AsyncClient
  from towhee.serve.io import JSON, NDARRAY, BYTES
  from towhee.utils.serializer import from_json
label_desc: Use image node_id 4 for calling the TestGRPC obj's underlying member method code with example usage: obj.test_muilt_params() and returns: dict, list