OPEN API平台测试之Restful服务接入

原始需求:平台在新的版本要支持对标准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的操作符能否正确的被传递。即用户通过sipisp发起一个delete请求,那么是否能得到正确的isp响应。

       测试模型如下图

    

OPEN API平台测试之Restful服务接入_第1张图片       

                         图一

       由上图可见如果要验证A的需求,首先需要有Rest风格的服务。由于目前网上已经有很丰富的OPEN API YAHOOAPIgoogleAPI都是标准的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.  安装rubyrailsmysql。安装mysqlrails的特性,它要依照数据库来创建资源。

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

rails mybook

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

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

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

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

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

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

启动服务:ruby localdir/scripts/server

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

将得到如下页面

    

OPEN API平台测试之Restful服务接入_第2张图片    

         图二

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

将得到如下页面

  

OPEN API平台测试之Restful服务接入_第3张图片     

       图三

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

 

              图四

 

在测试前置条件准备妥当之后,我们就通过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;

    }

 

你可能感兴趣的:(String,api,测试,Yahoo,delete,平台)