有一个外网bug想开的

       今天我又遇到外网bug了,真是不幸,又要掏银子了。掏银子事小(只是象征性惩罚),失面子事大,而且bug粗听上去还是非常低级别的。就是有个发送消息的接口(开发者调用这个接口,可以向旺旺的群里边发送消息,听上去非常强大,其实是需要授权的)。但是如果消息参数含空格如:a b的时候,在群的聊天对话筐中看到的却是a+b。究竟是怎么回事呢,难道真的是犯了低级错误了,没有验证到。 下面详细描述一下。不过在描述之前我向先把两个名词解释一下: 

名次解释:

       ISP:互联网服务提供商,象goole,yahoo,淘宝,支付宝等提供API给开发者的服务提供者

SIP:服务集成平台,互联网服务提供商,可以在这个平台上公布接口给开发者使用。方便开发者寻找合适的应用,同时对访问的安全性,频度等都进行过滤。对资源进行合理分流。
      
在实际测试中,我们是针对SIP的平台有单独的测试用例,保证平台本身逻辑的正确性,如对访问的拦截机制,对访问的路由方式,支持访问的接口类型等测试。而针对ISP我们会对ISP服务本身进行测试。就好比一家自来水公司,在对自来水提供服务的过程中。既要对水本身的质量进行检查。还要对自来水管道,压阀设备,笼头进行检查一样。

而在这次测试用例中我们对ISP提供的接口,即发送消息的接口进行了测试,测试代码片段如下:

    @Test

    public void testCase_HaveSpace() throws Exception {

       String tribId = "26813477";

       String message = " 你好!消息中含特殊字符,且含中文我爱,/"&";

       //String message ="aaa";

      

       String ExpXmlText ="<?xml version=/"1.0/" encoding=/"utf-8/"?>" +"/r/n"+

       "<SendTribMessage>" +"/r/n"+

       "   <ret>10000</ret>" +"/r/n"+

       "</SendTribMessage>";

       //testCase 负责拼装URL 并向isp发送请求,并对请求进行断言,此处略

       testCase(tribId,message,ExpXmlText);

}

在代码中很显然 参数message是包含空格的。而测试的结果也是正确的。这时候基本排除ISP的问题,于是我又去检查SIP,看SIP是否有对参数包含空格的情况进行测试。实际情况是SIP居然也已经对参数是空格的情况进行了检查,代码如下:

    @Test

    public void testCase17() throws Exception {

       String sip_appkey = "test_app004";// app_id

       String sip_apiname = "alitest.ali-001-login16";

       String sip_appsecret = "secret_app004";

       String sessionid = "sddddeee";

       String pk = " ";//URLEncoder.encode("中文","utf-8");

       String sip_username = "aaabbb";//URLEncoder.encode("中文","utf-8");

      

       String url = prepareUrl3(sip_appkey, sip_apiname, sip_appsecret,

              api_server, sessionid,pk,sip_username);

       WebConversation conversation = new WebConversation();

       WebRequest request = new PostMethodWebRequest(url);

       WebResponse response = conversation.getResponse(request);

       String res = new String(response.getText().getBytes(

              response.getCharacterSet()),"utf-8");

       String exp = " sip_username 没有得到中国";

       assertEquals(exp,res);

    }

 

很显然参数pk中包含的空格,那是为什么呢。

而客户报上来的错误是将空格转换成了+号,于是我们就去google了一把,终于发现了一篇类似的文章http://blog.csdn.net/sweetsoft/archive/ 2008/10/15 /3081544.aspx原来由于我们平台要求用户在发起请求的时候都用utf-8编码,而平台会做一次解码再编码(还是utf-8),再发送给isp。而java” ”utf-8解码支持两种格式,一种是%20,一种是+号,SIP平台默认是用+号来解码编码的,也就是说传给ISP的时候是+号代替” ”的,如果ISP也是java的编写的服务,自然能够进行解码的,这就是为什么我直接测试SIP,不会出错的原因,因为我的测试服务也是使用java写的。但是这次群消息的接口是由C++写的,而C++只支持对20%的解码。

    问题是找到了,但是由这个问题,我们发现更严重或者说更重要的问题。就是原来我们测试体系是存在一定问题的。原来我们SIPISP是分开来测试的,也就是说ISP服务接上来的时候默认SIP是不会和它由冲突的,或者由于不兼容带来的bug是不存在的。因为我们和自来水公司是不同的,我们的管道可能用来输送自来水,也有可能用来输送石油。所以单独测试水质和管道是不行的。必须进行集成测试,也就是说必须在产品上线之前,对SIPISP服务进行联调测试。但是是不是把ISP服务本身的业务逻辑,拿过来在SIP上重新跑一遍呢。重新跑一遍其实会带来两个问题。

1.  跑一遍了以后是否能保证兼容性测试

2.  是否有资源支持全部重新跑一遍

第二个问题自然是不用回答了,即使有资源,这样做也是一种浪费。好比做手工测试如果在集成测试阶段,把每个模块本身的业务逻辑都跑一遍,估计哪个有测试经验的人都不会这么干。

第一个问题我估计也够呛,因为兼容性问题,好比今天的问题本身就不是在做ISP服务测试的时候能发现的,那重新跑也不会发现新问题。

那究竟该怎么做呢,现在我还没有很好的答案,路漫漫其修远兮 吾将上下而求索,呵呵

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值