轻量级API测试框架Pandaria

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

内容简介:最近参与了一个项目,团队有自动化测试诉求,但是测试人员没有编程能力,开发人员也没有精力帮忙,探索了已有的自动化测试工具,满足不了团队需求后,决定自己造个轮子。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 的变量,并在后续的操作中使用这个变量。


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

查看所有标签

猜你喜欢:

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

Python标准库

Python标准库

Doug Hellmann / 刘炽 / 机械工业出版社华章公司 / 2012-6-15 / 139.00元

本书由资深Python专家亲自执笔,Python语言的核心开发人员作序推荐,权威性毋庸置疑。 对于程序员而言,标准库与语言本身同样重要,它好比一个百宝箱,能为各种常见的任务提供完美的解决方案,所以本书是所有Python程序员都必备的工具书!本书以案例驱动的方式讲解了标准库中一百多个模块的使用方法(如何工作)和工作原理(为什么要这样工作),比标准库的官方文档更容易理解(一个简单的示例比一份手册......一起来看看 《Python标准库》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

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

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具