selenium 自动化测试

132 阅读4分钟

\

本篇主要介绍下测试时遇到的关于函数返回码的bug。

函数的返回值往往作为操作是否成功的标志,在函数内部,可能出现许多异常场景,针对每种异常场景,需要返回不同的值,以便上层调用函数处理。

 被调函数是否能够在不同场景下返回对应的返回码;调用函数能否根据不同返回码正确处理,也是白盒测试时需要重点关注的内容。
 
 下面就以上两个场景分别列举1个测试时发现的问题。
     
     <br style="box-sizing: border-box;"/>
     
     返回码Bug1:
     
     <br style="box-sizing:    \ border-box;"/>
     
     Bug描述: 异常情况下返回了代表正确场景的returncode。
     
     <br style="box-sizing:    \ border-box;"/>
     
     <br style="box-sizing: border-box;"/>
     
     变量ret存储函数返回码,初值为QCONF_OK,代表未发生异常/错误的正确场景。函数内部发生异常时,未给ret变量重新赋值,导致最后返回ret时,值仍然为QCONF_OK。上层调用时会根据被调函数的返回值分别进行处理,这样调用函数处就会全部转到正常逻辑处理分支,即便在出现异常的情况下。出现这个问题,还是不太容易排查。
         
         <br style="box-sizing: border-box;"/>
         
         解决方法
         
         <br style="box-sizing: border-box;"    />
         
         每个异常分支,分别给ret赋予不同的值,方便上层调用处根据ret的值针对性处理。
         
         <br style="box-sizing: border-box;"    />
         
         返回码Bug2:
         
         Bug描述: 调用处对被调函数返回码判断错误,导致分支不可达。
         
         <br style="box-sizing: border-box;"    />
         
         <br style="box-sizing: border-box;"/>
         
         以上代码中获取被调函数的返回值,存储到ret变量中。后面接着判断ret值如果为-1,则重试。这里是想判断被调函数是否处理失败。而反观被调函数会发现,所有分支下,返回值都不会为-1。因此,调用处的语句块永远不会被执行。被调函数所有可能的返回码如下:
             
             <br style="box-sizing: border-box;"/>
             
             <br style="box-sizing: border-box;"    />
             
             出现这个错误的原因在于代码不规范,对于返回码的赋值,有时使用宏,有时直接使用数字,这里想当然的认为被调函数在处理失败时应该返回-1.
             
             <br    \ style="box-sizing: border-box;"/>
             
             解决方法
             
             <br style="box-sizing: border-box;"    />
             
             将判断条件改成if(QCONF_OK != ret)代表被调函数可能出现的所有非正常情况。
             
             <br style="box-sizing: border-box;"    />
             
             总结
             
             针对以上出现的情况,做了一个简单的总结如下:
             
             检查规则
             
             容易出bug的点
             
             建议
             
             确保函数内所有分支下的返回码都正确。
                 
                 1.     正确分支:返回正确的返回码。
                 
                 2.     异常分支:根据不同的异常情况分别返回不同的异常码。
                 
                 <br style="box-sizing:    \ border-box;"/>
                 
                 可能函数开头给存储返回码的变量赋了初值。当函数内包含循环,并且循环体内有continue、break,或者嵌套的分支比较多时,可能导致在某些情况下,忘记了对该变量赋值,最后直接返回了该变量。
                     
                     1、统一的约定:函数内存储返回码的变量初始化时,行为必须一致;(比如:都要求初始化为表示正确值的返回码)
                     
                     2、对于函数内的每个错误的分支、以及循环break后跳至的点,一直到return处,有对变量赋值。
                         
                         <br style="box-sizing: border-box;"/>
                         
                         调用处的处理:
                         
                         对被调函数返回码进行判断,并根据返回值进行相应的处理。
                             
                             <br style="box-sizing: border-box;"/>
                             
                             1、保证被调用函数包含各种错误通路,并返回相应的返回码;
                             
                             2、返回码统一用宏,不要直接使用数字,宏命名能做到见名知意;
                                 
                                 3、调用处分情况对返回码进行判断;
                                 
                                 4、对被调用函数进行修改涉及到返回码时,同时对调用处进行修改。
                                 
                                 <br style="box-sizing:    \ border-box;"/>
                                 
                                 回顾:
                                 
                                 [白盒测试项目实践经验总结(一)](http://mp.weixin.qq.com/s?__biz=MzI3MzI3NzYyMw==&amp;mid=2247484806&amp;idx=1&amp;sn=f4a03264414f4d3b58f588dec3c9c570&amp;chksm=eb24f25edc537b48feef84f8ff37c9d2f0c434e84e98f658ce5c62004b5de36992490e67efe9&amp;scene=21#wechat_redirect)<br    \ style="box-sizing: border-box;"/>
                                 
                                 [白盒测试项目实践经验总结(二)—边界值问题](http://mp.weixin.qq.com/s?__biz=MzI3MzI3NzYyMw==&amp;mid=2247485227&amp;idx=1&amp;sn=b30c772aa3e2152d3c1135cc6edd7da0&amp;chksm=eb24f0f3dc5379e516c222ee8b31cb4a8426a05a2f8215d2226a7f6688fc7fcc22e84ff0de60&amp;scene=21#wechat_redirect)<br    \ style="box-sizing: border-box;"/>
                                 
                                 Qtest是360旗下的专业测试团队!
                                 
                                 是WEB平台部测试技术平台化、效率化的先锋力量!
                                     
                                     <br style="box-sizing: border-box;"/>