robotframework——接口自动化浅谈数据驱动

一、发生背景:

          接手一个云存储项目api接口自动化,原接口自动化是java框架,由于不太擅长java,感觉比较深入了解比较费时,所以准备用python的requests模块结合unittest写一套,其他系统对接人不干了,于是退而求其次着手用robotframework构建一套,后续通过jenkins一键集成运行;

二、构建思路:

          按照之前python分层框架,设计为三明治分层结构;

         底层:公共方法区(我简称common关键字层)

         中间:动作区链接层(我定义为action关键字层)

         上层:变动颜色层(我定义为testcase层)

         底层写入公共请求方法区主要定义基本请求动作,基本请求动作,类聚到所有公共方法,或者所有想要使用的字符串正则等方法,底层练气,内部核心修养;

         中间夹杂的我叫做动作链接区,每个动作最好拆分成独立的,留一个进出关口给其他用例使用,例如登陆的post请求,调用底层post请求方法,定义好需要活动的变量,我写的是云项目所以我基本把创建新的镜像、对象等是要是再有共同方法的放入一个动作(前提是入参和后续用例使用该动作需要的出参一致,我就提取为一个动作,抽象的我copy一下改动入口和出口位置),中间层时候我会放入一些不变的公共参数;

        例如User-Agent什么伪装浏览器之类的处理,绕过系统的识别;

        上层是大家都看的见的部分,抽取所有动作然后入参相互关联,形成用例;

三、问题产生:

         (一)、虽然有teardown,但是遇到数据驱动的内容就很尴尬了,云平台生产环境涉及几十个国家地区,teardown中入数据组太长肯定不合适;

          (二)、上层用例使用arguments,将所有地区数据传入进来,领导看到估计会让我回家冷静冷静了;

          (三)、底层通过python脚本生成一套数据放到公共库中使用,这和数据驱动就有点向驳道而驰了,数据驱动本来就要求数据时可以如流水般变动的驱动测试的进行;

           (四)、强行引入ddt、unittest数据驱动,最终还是放弃了;

四、解决方案:

            (一)、上述方法被放弃后决定使用excel数据驱动,使用robotframework-Excellibrary中的ExcelLibrary来处理我需要驱动的数据,达到数据驱动的方案;

             (二)、解决思路如下:先通过excel将所有数据,通过for循环方式遍历出来,这时候每遍历一组数据时候执行一下用例,当用例成功继续下一组,当用例失败返回FAIL然后继续下一组;(之所以这样是因为我在其中没找到try语法,因为每个人都知道for循环的弊端是当其中一个遍历失败时候,那么程序下一组数据你就不会再执行了,程序直接和byebye了,所以使用了run keyword and return status来处理)

五、分享内容:

         (一)、説了这么多很抱歉,工作内容关系没有源代码分享,但是excel的操作可以分享给大家,相信大家一看就知,当然我只是菜鸟,有不当言语之处希望见谅,可留言指出让我改正,谢谢;

         (二)、分享代码部分:

            

excel
    Open Excel    C:\\excel1.xls
    #读取列数
    @{listcol}    Get Column Values    Sheet1    2
    Log Many    @{listcol}
    #读取行数
    @{listrow}    Get Row Values    Sheet1    0
    log Many    @{listrow}
    #获取列数总计
    ${colnum}    Get Column Count    Sheet1
    log    ${colnum}
    #获取行数总计
    ${rownum}    Get Row Count    Sheet1
    log    ${rownum}
    #根据行列坐标获取excel的值
    ${zuobiaovalue}    Read Cell Data By Coordinates    Sheet1    2    1
    log    ${zuobiaovalue}
    #根据列坐标读取值
    ${colvalue}    Read Cell Data By Name    Sheet1    C2
    log    ${colvalue}
    #for循环取值
    : FOR    ${row}    IN RANGE    ${rownum}
    \    ${name}    Read Cell Data By Coordinates    Sheet1    0    ${row}
    \    log    ${name}
    \    ${psw}    Read Cell Data By Coordinates    Sheet1    1    ${row}
    \    log    ${psw}
    \    ${result}    Read Cell Data By Coordinates    Sheet1    2    ${row}
    \    log    ${result}
    \    ${sheetvalues}    Create Dictionary    username=${name}    passwd=${psw}    result=${result}
    \    log    ${sheetvalues}

       

你可能感兴趣的:(robotframework)