原始需求:平台在新的版本要支持对标准Rest风格的接口的接入,对用户提交的delete,post,put,update请求要正确的转发。而且请求的url格式要转换成isp能接收的格式,即资源占位符格式。

       需求理解:在本次的测试中隐含了两个大的需求点。如下:

       A.在新的需求中需要测试占位符是否能正确的转换,即客户发起http://sipserver?param1=AAA&param2=BBB&param3=CCC,能否路由到

       http://ispserver/AAA/BBB?param3=CCC

或者http://ispserver/AAA?param2=BBB&param3=CCC的请求

       B.需要测试delete,post,put,update,get的操作符能否正确的被传递。即用户通过sip向isp发起一个delete请求,那么是否能得到正确的isp响应。

       测试模型如下图

    

openai chatgpt 接口文档 openapi接口测试_string

       

                         图一

       由上图可见如果要验证A的需求,首先需要有Rest风格的服务。由于目前网上已经有很丰富的OPEN API 如YAHOO的API和google的API都是标准的Rest风格的接口。所以在实战中选择了Yahoo的接口来测试SIP平台的路由功能。

如果要验证B的需求,那么想在网上找合适的接口来测试就比较麻烦,所以我们决定自己来搭建Rest风格的服务来进行测试。

本文将对上面两种方法逐一进行介绍。

方法一直接调用Yahoo接口(测试需求点A

前置条件:注册yahoo接口到SIP平台上,暴露为alitest.ali-002-restyahoo

测试步骤:一、直接访问yahoo的接口,得到返回值A

          二、通过sip访问服务alitest.ali-002-restyahoo,得到返回值B

          三、验证A是否等于B

测试代码如下(代码中使用了httpunit,至于如何使用这个工具的工作原理,本文不做详细介绍):

public class TestRestful {   
       
    private String api_server = "http://10.2.226.19:8180/sip/rest";   
    static String mysql_url = "jdbc:mysql://10.2.226.19:3306/sip";   
 
    @Test   
    public void TestAccessYahooFromSip() throws Exception   
    {   
       String url = "http://boss.yahooapis.com/ysearch/web/v1/car?appid=xq88cS3V34GQE7xg    
  
    9l 
  2pkbYC 
  
    0A 
  6YDWHCCcfihbPfaXmUikf002N9z80CAC.Ys47hehhxeQg0Gd4-&format=xml"; 
  
       WebConversation conversation = new WebConversation();   
       GetMethodWebRequest request = new GetMethodWebRequest(url);   
       WebResponse response = conversation.getResponse(request);   
       String ExpXmlText = response.getText();   
       System.out.println(ExpXmlText);   
          
       String sip_appkey = "test_app003";// app_id   
       String sip_apiname = "alitest.ali-002-restyahoo";   
       String sip_appsecret = "secret_app003";   
       String sessionid = "sddddeee2";   
       String side = "ysearch";   
       String type = "web";   
       String version = "v1";   
       String content = "car";   
       String appid = "xq88cS3V34GQE7xg   
    9l 
  2pkbYC 
  
    0A 
  6YDWHCCcfihbPfaXmUikf002N9z80CAC.Ys47hehhxeQg0Gd4-"; 
  
       String format = "xml";   
       String sip_thirdpart = "true";   
       DeleteHisRec(sip_apiname);   
       util.SIPHelp.Crush_Sip();   
       Map<String, String> map = new HashMap<String, String>();   
       map.put("side", side);   
       map.put("type", type);   
       map.put("version", version);   
       map.put("content", content);   
       map.put("appid", appid);   
       map.put("format", format);   
       map.put("sip_thirdpart",sip_thirdpart);   
       map.put("sip_httpmethod","get");   
          
       url = util.SIPHelp.prepareUrl(sip_appkey, sip_apiname, sip_appsecret, api_server, sessionid, map);   
       //发起请求   
       //System.out.println(url);   
       request = new GetMethodWebRequest(url);   
       response = conversation.getResponse(request);   
       String ActXmlText = response.getText();   
       //XMLAssert.assertXMLEqual("对比XML结果", ExpXmlText, ActXmlText);   
       String path1 = "/ysearchresponse/resultset_web/result/title";   
       XMLAssert.assertXpathValuesEqual(path1,ExpXmlText,path1,ActXmlText);   
       System.out.println(ActXmlText);   
   }   
}

       方法二通过自己构建的Restful服务来进行平台透传行为(get,delete,put,post){需求点B测试}

       前置条件:搭建Restful服务。      本文只是简单介绍一下搭建过程。

1.  安装ruby、rails、mysql。安装mysql是rails的特性,它要依照数据库来创建资源。

2.  创建空的rails web应用骨架

rails mybook

3.  创建用于访问的资源,rails将自动完成各种操作的map(路由或映射)

ruby script/generate scaffold book name:string isbn:string

这个命令的意思是创建一个资源(可以认为是一个数据结构)

在这里是书,它包含书名和刊物号两个字段。

在做完1,2,3的步骤之后我们会发现在mybook/config/routes.rb的代码中多了map.resources :books

这说明在该服务中books已经是标明是一种资源,而且系统自动为他创建了new,delete,edit等服务

启动服务:ruby localdir/scripts/server

在客户端如果输入类似http://10.0.68.183:3000/books/new

将得到如下页面

    

openai chatgpt 接口文档 openapi接口测试_string_02

    

         图二

同理如果输入http://10.0.68.183:3000/books/

将得到如下页面

  

openai chatgpt 接口文档 openapi接口测试_平台_03

     

       图三

那么如何验证这是一个标准rest的服务呢,我们打开http watch对某本书的记录进行删除操作。我们观察post data发现是以我们期望的操作_method=delete发起请求的,所以确认我们的Restful服务请求已经搭建成功。

openai chatgpt 接口文档 openapi接口测试_openai chatgpt 接口文档_04

              图四

 

在测试前置条件准备妥当之后,我们就通过java代码进行测试。步骤如下

一、由于直接通过网页可以删除服务,说明我们准备的服务没有问题

二、通过SIP来访问某个接口,并且传递Action是删除操作。(根据SIP平台的要求操作附通过sip_httpmethod来发送,同时需要发送参数sip_thirdpart=true)

三、检查book{n}是否被删除

测试代码如下(本用例直接使用httpclient来访问服务):

@Test   
    public void TestSipActionDelete() throws Exception   
    {   
       String sip_appkey = "test_app003";// app_id   
       String sip_apiname = "alitest.ali-002-restdelete";   
       String sip_appsecret = "secret_app003";   
       String sessionid = "sddddeee3";   
       String num ="11";   
       String sip_thirdpart = "true";   
       DeleteHisRec(sip_apiname);   
       util.SIPHelp.Crush_Sip();   
       Map<String, String> map = new HashMap<String, String>();   
       map.put("num", num);   
       map.put("sip_thirdpart",sip_thirdpart);   
       map.put("sip_httpmethod","delete");   
       String url = util.SIPHelp.prepareUrl(sip_appkey, sip_apiname, sip_appsecret, api_server, sessionid, map);   
       deleteAtom(null,url,"POST",200);   
}   
           
private int deleteAtom(String token, String url, String httpMethod,   
           int exceptedResponseCode) throws MalformedURLException, IOException{   
       String result;   
       HttpURLConnection conn = (HttpURLConnection)(new URL(url)).openConnection();   
          
       conn.setDoInput(true);   
       conn.setDoOutput(true);   
          
       // 设置请求头信息   
       conn.setRequestMethod(httpMethod);   
       conn.setRequestProperty("Content-Type", "text/xml");   
          
       // 获取服务器应答信息   
       int responseCode = conn.getResponseCode();   
          
       System.out.println("responseCode : " + responseCode);   
       if (responseCode == exceptedResponseCode){   
           result = toString(conn.getInputStream());   
           System.out.println(result);   
       }   
       return responseCode;   
    }