内容简介:最近参与了一个项目,团队有自动化测试诉求,但是测试人员没有编程能力,开发人员也没有精力帮忙,探索了已有的自动化测试工具,满足不了团队需求后,决定自己造个轮子。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行的 name
和 age
属性。
准备测试数据可以直接执行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
的变量,并在后续的操作中使用这个变量。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。