轻量级API测试框架Pandaria

栏目: 数据库 · 发布时间: 7年前

内容简介:最近参与了一个项目,团队有自动化测试诉求,但是测试人员没有编程能力,开发人员也没有精力帮忙,探索了已有的自动化测试工具,满足不了团队需求后,决定自己造个轮子。Postman是一个不需要编码能力,且十分方便的自动化测试工具,由于项目中很多测试的验证点需要验证数据库里面数据的正确性,如果用Postman的话需要为测试创建一些没有必要的HTTP API。很遗憾, 这个轮子不满足我们的要求。我们探索的第二个工具是Rest-assured. 虽然他对API测试相关操作封装了很简洁美观的DSL, 由于其直接是Java

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

  • 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 的变量,并在后续的操作中使用这个变量。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro JavaScript Design Patterns

Pro JavaScript Design Patterns

Dustin Diaz、Ross Harmes / Apress / 2007-12-16 / USD 44.99

As a web developer, you’ll already know that JavaScript™ is a powerful language, allowing you to add an impressive array of dynamic functionality to otherwise static web sites. But there is more power......一起来看看 《Pro JavaScript Design Patterns》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具