美文网首页Pandaria
轻量级API测试工具Pandaria

轻量级API测试工具Pandaria

作者: Jakim | 来源:发表于2018-11-05 19:19 被阅读0次

    背景

    最近参与了一个项目,团队有自动化测试诉求,但是测试人员没有编程能力,开发人员也没有精力帮忙,探索了已有的自动化测试工具,满足不了团队需求后,决定自己造个轮子。

    • Postman

    Postman是一个不需要编码能力,且十分方便的自动化测试工具,由于项目中很多测试的验证点需要验证数据库里面数据的正确性,如果用Postman的话需要为测试创建一些没有必要的HTTP API。很遗憾, 这个轮子不满足我们的要求。

    • Rest-assured

    我们探索的第二个工具是Rest-assured. 虽然他对API测试相关操作封装了很简洁美观的DSL, 由于其直接是Java代码,像数据库校验什么的毫无困难。但是要编写基于Rest-assured的自动化测试,还得有一定的编码基础,很遗憾,这个轮子我们用不来。

    • Cucumber

    Cucumber支持自然语言形式编写自动化测试,自然语言调用的是代码,如果对cucumber做了足够好的封装,编写测试的人不需要编写代码也能写自动化测试。那就需要做足够通用的封装,所以Pandaria就是基于cucumber jvm封装的HTTP(S) API自动化测试的DSL。Cucumber本身功能非常实用,使用pandaria依然能够直接使用cucumber jvm的所有功能。

    Pandaria

    在测试团队缺乏编码能力,以及需要验证数据库的需求背景下,我们尝试着基于cucumber做封装,使不会写代码的测试人员也能编写自动化测试。之后我们很惊讶的发现这种方式非常有效,所以将这个工具分享出来,希望能对有相同诉求的团队有所帮助。

    测试HTTP API

      Scenario: simple get
        * uri: /users/me
        * send: GET
        * status: 200
        * verify: '$.username'='jakim'
        * verify: '$.age'=18
    

    使用pandaria写API自动化测试,就像上面这样,只需要使用抽象好的关键字,描述发送请求的过程,以及编写你的验证条件即可。

    上述代码解读: 往相对路径uri为/users/me的地址发送GET请求,并验证返回状态为200,且返回体里面json path为$.username的值为'jakim',json path $.age处的值为18

    验证数据库

    * query:
    """
    SELECT NAME, AGE FROM USERS
    """
    * verify: '$[0].name'='jakim'
    * verify: '$[0].age'=18
    

    或者

    * query: select.sql
    * verify: '$[0].name'='jakim'
    * verify: '$[0].age'=18
    

    select.sql

    SELECT NAME, AGE FROM USERS
    

    测试人员只用写SQL就能像校验json一样校验数据库内容。上述代码会使用SQL语句SELECT NAME, AGE FROM USERS到数据库中查询,并验证返回结果的第1行的nameage属性。

    准备测试数据可以直接执行SQL文件:

    * execute sql: prepare_users.sql
    * execute sql:
    """
    insert into users(name) values('test');
    """
    

    等待功能

    自动化测试经常需要等待一件事情完成,特别是异步操作时,这时候通常的做法是等待一定的时间,验证结果,如果不通过,则重试一定的次数,直到验证成功,或者超过最大次数失败。使用Pandaria可以这么写:

    * wait: 1000ms times: 3
    * uri: /sequence
    * send: GET
    * response body:
    """
    3
    """
    

    上述代码会往/sequence发请求,并验证返回消息体是否等于3,如果等于则继续往下执行,如果失败则等待1000ms,然后重试,如果重试超过最大3次,则测试失败。

    也可以等待数据库中数据满足某个条件

    * wait: 1000ms times: 3
    * query: select.sql
    * verify: '$[0].name'='jakim'
    * verify: '$[0].age'=18
    

    变量

    很多时候restful api的uri的路径中包含数据库自增长的ID, 其可能是一个异步操作生成,导致我们不能直接从API返回结果中拿到,只能从数据库中根据测试数据的条件查找,并在后续API测试中使用,使用pandaria我们可以这么写:

    * query:
    """
    select id from users where name='test-user-name';
    """
    * var: 'auto_generated_id'<-'$[0].id'
    
    * uri: /users/${auto_generated_id}
    * send: GET
    * verify: '$.id'=${auto_generated_id}
    * verify: '$.name'='test-user-name'
    

    上述代码首先从数据库查出自增长的id,然后使用<-操作符将结果中的id定义为名为auto_generated_id的变量,并在后续的操作中使用这个变量。

    总结

    Pandaria目前还在持续开发中,我们发现其已经能对我们团队带来切实的效率提升,故借此机会分享出来,希望能帮助到类似的团队。

    相关文章

      网友评论

        本文标题:轻量级API测试工具Pandaria

        本文链接:https://www.haomeiwen.com/subject/kzcexqtx.html