轻量级API测试工具Pandaria

背景

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

  • Postman

Postman是一个不须要编码能力,且十分方便的自动化测试工具,因为项目中不少测试的验证点须要验证数据库里面数据的正确性,若是用Postman的话须要为测试建立一些没有必要的HTTP API。很遗憾, 这个轮子不知足咱们的要求。github

  • Rest-assured

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

  • 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自动化测试,就像上面这样,只须要使用抽象好的关键字,描述发送请求的过程,以及编写你的验证条件便可。json

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

验证数据库

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

或者bash

* 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属性。restful

准备测试数据能够直接执行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目前还在持续开发中,咱们发现其已经能对咱们团队带来切实的效率提高,故借此机会分享出来,但愿能帮助到相似的团队。

相关文章
相关标签/搜索