简介

Pandaria是一款基于Cucumber JVM的API自动化测试工具,上一篇文章介绍了它的基本功能,包括基本的HTTP操作和数据库操作。本文将介绍使用Pandaria编写自动化测试的一些高级用法。

快速开始

安装

Pandaria本身以Java库的形式发布到Maven Central中,使用Pandaria本身只需要在构建工具中添加依赖即可,本身没有额外的安装操作。工欲善其事必先利其器,IDE能够使我们编写自动化测试事半功倍,此处推荐IntelliJ IDEA, 当然你可以选择其他你喜欢的用于开发Java的IDE。

创建工程

安装好IntelliJ IDEA后,我们可以创建一个标准的Maven工程。

添加依赖

在build.gradle或者pom.xml中添加Pandaria依赖。

build.gradle

apply plugin: 'java'dependencies {testCompile("io.cucumber:cucumber-junit:4.0.0",'com.github.jakimli.pandaria:pandaria-core:0.2.3','com.github.jakimli.pandaria:pandaria-db:0.2.3','com.github.jakimli.pandaria:pandaria-mongo:0.2.3')
}
复制代码

pom.xml

<dependencies><dependency><groupId>com.github.jakimli.pandaria</groupId><artifactId>pandaria-core</artifactId><version>0.2.3</version><scope>test</scope></dependency><dependency><groupId>com.github.jakimli.pandaria</groupId><artifactId>pandaria-db</artifactId><version>0.2.3</version><scope>test</scope></dependency><dependency><groupId>com.github.jakimli.pandaria</groupId><artifactId>pandaria-mongo</artifactId><version>0.2.3</version><scope>test</scope></dependency>
</dependencies>
复制代码

这里除了pandaria-core以外,还包含了pandaria-db和pandaria-mongo两个模块,如果你的项目不需要验证数据库,或者不需要验证mongo db,你可以不添加这两个模块。

本文使用JUnit, 依赖中也添加了cucumber-junit模块。

创建Cucumber Junit入口

在工程下面创建一个RunCucumberTest.java,这个文件使用Cucumber的Junit Runner,用于运行feature文件,使用Pandaria其实就是使用Cucumber,所有Cucumber本身的功能依然适用。

RunCucumberTest.java

package com.github.jakimli.pandaria_sample;import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;@RunWith(Cucumber.class)
@CucumberOptions(plugin = "pretty",features = "classpath:features/",glue = {"com.github.jakimli.pandaria", "com.github.jakimli.pandaria_sample"})
public class RunCucumberTest {
}
复制代码

语法高亮和补全

现在可以开始编写第一个自动化测试了。

src/test/resource/features 下面创建以.feature结尾的文件,如test.feature。IntelliJ IDEA利用gherkin和Cucumber for Java两个插件提供gherkin的高亮和补全。可以在IntelliJ的插件安装中搜索这两个插件并安装,安装好后feature会高亮以及自动补全:

HTTP

全局Http Header

Pandaria支持在配置文件(application.properties)中配置全局的Http Header,所有的Http Request都会带上这些Header。

一个典型的场景是,自动化测试运行在测试环境,当需要对API进行认真的时候,通常需要一个测试账号,将对应的认证信息放到HTTP的Authorization Header中。我们可以使用http.headers.<name>来配置。如:

application.properties

http.headers.Authorization=Bear Token
复制代码

上传文件

Pandaria支持文件上传,使用attachment关键字可以指定文件路径

Scenario: upload file* uri: /files* attachment: attachments/abc.txt* send: POST* status: 200* response body:"""uploaded"""
复制代码

Mongo DB

除了关系型数据库以外,Pandaria还支持对Mongo DB的操作和校验。

插入

通常我们需要往mongo的一个集合中插入测试数据,可以这么写:

* collection: 'users' insert:
"""
{"user": "jakim"}
"""
复制代码

清除

清除测试数据:

* collection: 'users' clear
复制代码

查询和验证

同样我们可以从Mongo DB中查询数据并做校验

* collection: 'users' find all
* verify: '$[0].user'="alice"
复制代码

也可以指定查询条件

* collection: 'users' find:
"""
{"age": {$gt: 17}}
"""
* verify: '$[0].user'="jakim"* collection: 'users' find:
"""
{"age": {$lt: 17}}
"""
* verify: '$[0].user'="alice"* collection: 'users' find: filter/greater_than_17.json
* verify: '$[0].user'="jakim"
复制代码

变量

普通变量

使用Pandaria,你可以使用基本的变量功能,${<name>}用于使用普通变量如:

你可以定义envrionment变量,然后在之后的URL中使用,这样如果你需要切换环境,就只需要改envrionment变量的值就好了。

  Background:* var: 'environment'='test'Scenario: hello world* uri: https://${environment}/users/octocat/orgs* send: GET* status: 200
复制代码

你也可以在配置文件中指定变量的初始值

application.properties

variables.environment=test
复制代码
  Scenario: initial value from configuration file* verify: ${environment}="test"* var: 'environment'="production"* verify: ${environment}="production"
复制代码

如上述,在feature文件中定义会覆盖配置文件中的值。

生成随机测试数据

随机的测试数据在自动化测试中很实用,Pandaria中你可以使用#{<expression>}的形式来生成测试数据,如:

Scenario: faker in request body as doc string* uri: /faker/users* request body:"""{"name": "#{Name.fullName}", "city": "#{Address.city}"}"""* send: POST* response body:"""success"""
复制代码

这里的#{Name.fullName}#{Address.city}会被替换成随机的人名和城市名。通过配置faker.locale可以切换语言。

上一次返回报文作为下一次请求报文

Pandaria支持将第一次HTTP请求的返回内容直接作为下一个请求的Request内容, 通过@{<json path>}的形式使用。

 Scenario: request directly from last response* uri: /users/me* send: get* verify: '$.username'='jakim'* verify: '$.age'=18* verify: '$.iq'=double: 80.0* uri: /users* request body:"""{ "username": @{$.username}}"""* send: POST* status: 200* verify: '$.id'='auto-generated'* verify: '$.username'='jakim'* verify: '$.age'=18* uri: /users* request body:"""@{$}"""* send: POST* status: 200* verify: '$.id'='auto-generated'* verify: '$.username'='jakim'* verify: '$.age'=18
复制代码

校验

验证JSON Schema

你可以验证一段JSON是否遵循给定的Json shcema:

* uri: /products/1
* send: get
* verify: '$' conform to:
"""
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.com/product.schema.json",
"title": "Product",
"description": "A product in the catalog",
"type": "object"
}
"""* verify: '$' conform to: schema/product.schema.json* verify: '$.tags' conform to:
"""
{"$schema": "http://json-schema.org/draft-07/schema#","$id": "http://example.com/product.tags.schema.json","title": "product tags","description": "Product tags","type": "array","items": {"type": "string"}
}
"""
复制代码

使用Javascript自定义验证

一些基本的验证可以通过Javascript来进行,使用code关键字,如:

* var: 'age'=16
* var: 'iq'=90.0* uri: http://localhost:10080/not_important
* send: get
* verify: '$.age'=code: ${age} + 2
* verify: '$.iq'=code: ${iq} - 10* verify: '$.age'!=code: ${age} + 3
* verify: '$.iq'!=code: ${iq} - 11* verify: '$.age'=code:
"""
${age} + 2
"""
* verify: '$.iq'=code:
"""
${iq} - 10
"""
复制代码

或者

* verify code: ${name} == ${iq} / 3
* verify code:
"""
${name} != ${iq} % 3
"""
* verify code file: verification.js
复制代码

集成CI

使用Pandaria,结合Junit,运行测试就像运行单元测试一样,你只需要在CI上运行mvn test即可。

如何寻找示例

Pandaria本身采用TDD方式开发,其自己的测试本身就是示例,可到源码src/test/resources/features下面查看更多示例。

总结

本文只对一些进阶功能做基本介绍,具体使用请参考使用文档

转载于:https://juejin.im/post/5bdec21fe51d4505212ff791

使用Pandaria编写API自动化测试进阶用法相关推荐

  1. Python Requests库进阶用法——timeouts, retries, hooks

    Python HTTP 请求库在所有编程语言中是比较实用的程序.它简单.直观且在 Python 社区中无处不在. 大多数与 HTTP 接口程序使用标准库中的request或 urllib3. 由于简单 ...

  2. 使用Postman做API自动化测试

    Postman API 自动化测试 Postman 最基本的功能用来重放请求,并且配合良好的 response 格式化工具. 高级点的用法可以使用 Postman 生成各个语言的脚本,还可以抓包,认证 ...

  3. 《QTP自动化测试进阶》(1)

    学习<QTP自动化测试进阶>第一章. 采用不同的项目开发模型对自动化测试有不同的影响. (1)瀑布模型:瀑布模型在需求定义方面做得很好,这对自动化测试是有益的,包括可以尽早选择合适的自动化 ...

  4. HTTP API 自动化测试从手工测试到平台的演变

    不管是 Web 系统,还是移动 APP,前后端逻辑的分离设计已经是常态化,相互之间通过 API 调用进行数据交互.在基于 API 约定的开发模式下,如何加速请求 / 响应的 API 测试,让研发人员及 ...

  5. api自动化测试_API测试和自动化101:基本指南

    api自动化测试 API代表A pplication P AGC软件我覆盖整个院落. 通常,API用于通过使用任何通信方式来促进两个不同应用程序之间的交互. 在网络上使用API​​时,我们将其称为&q ...

  6. Android属性动画进阶用法

    2019独角兽企业重金招聘Python工程师标准>>> 在上周二文章中介绍补间动画缺点的时候有提到过,补间动画是只能对View对象进行动画操作的.而属性动画就不再受这个限制,它可以对 ...

  7. python自动化测试脚本可以测php吗_python unittest实现api自动化测试_python

    这篇文章主要为大家详细介绍了python unittest实现api自动化测试的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 项目测试对于一个项目的重要性,大家应该都知道吧,写python的 ...

  8. postman如何测试php接口_基于Postman的API自动化测试

    基于Postman的API自动化测试 1.安装 两种安装方式,我热衷于以chrome插件形式安装 Chrome插件 Mac App 2.发送请求 Postman最基础的功能就是发送http请求,支持G ...

  9. canvas图形处理和进阶用法

    前面的话 上一篇博客介绍了canvas基础用法,本文将更进一步,介绍canvas的图形处理和进阶用法 图形变换 图形变换是指用数学方法调整所绘形状的物理属性,其实质是坐标变形.所有的变换都依赖于后台的 ...

最新文章

  1. Paste模块的世界
  2. bzoj 2186: [Sdoi2008]沙拉公主的困惑
  3. 再见,Navicat!这个Pycharm的兄弟真香!
  4. Android---- 获取当前应用的版本号和当前android系统的版本号
  5. 数据库可以存php代码,php把数组保存数据库程序代码
  6. 简述get 和 post 的主要区别——计算机网络
  7. 技术竞争力之Web技术方向
  8. 特征工程之非线性特征提取和模型堆叠
  9. lt;SCRIPT src=quot;../scripts/LoadWebOffice.jsquot;gt;lt;/SCRIPTgt;
  10. 如何备份数据库的某张表_详解mysql数据库如何用mysqldump实现单表备份
  11. 改变图片局部透明度,实现透明度根据位置不而渐变
  12. 数字化时代品牌营销:体验 感知 共创
  13. st语言 数组的常用方法_st语言
  14. FragmentVisible
  15. 使用html2canvas实现超出浏览器部分截图
  16. Android 开发技术周报
  17. C++【STL】【string类的使用】
  18. 微软账户服务器连不上开不了机,Win10无法登录微软账户提示“内部服务器错误(500)”怎么解决?...
  19. c#的decode用法
  20. 51单片机接上拉电阻原理

热门文章

  1. Matlab文件和文件夹删除函数
  2. 如何购买阿里云服务器?阿里云服务器购买详细教程
  3. yarn降版本_Yarn配置
  4. antisamy java_XSS 简单理解之:AntiSamy
  5. 点击 选中该元素, 改变当前点击元素的样式,其他元素样式不变
  6. 十大排序算法 python
  7. 程序员必备十大排序算法
  8. JS处理32位整型位运算
  9. 重温WIN32 API ------ 最简单的Windows窗口封装类
  10. 正则表达式的简单用法+利用正则表达式检验身份证号码格式