使用Pandaria编写API自动化测试进阶用法
简介
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自动化测试进阶用法相关推荐
- Python Requests库进阶用法——timeouts, retries, hooks
Python HTTP 请求库在所有编程语言中是比较实用的程序.它简单.直观且在 Python 社区中无处不在. 大多数与 HTTP 接口程序使用标准库中的request或 urllib3. 由于简单 ...
- 使用Postman做API自动化测试
Postman API 自动化测试 Postman 最基本的功能用来重放请求,并且配合良好的 response 格式化工具. 高级点的用法可以使用 Postman 生成各个语言的脚本,还可以抓包,认证 ...
- 《QTP自动化测试进阶》(1)
学习<QTP自动化测试进阶>第一章. 采用不同的项目开发模型对自动化测试有不同的影响. (1)瀑布模型:瀑布模型在需求定义方面做得很好,这对自动化测试是有益的,包括可以尽早选择合适的自动化 ...
- HTTP API 自动化测试从手工测试到平台的演变
不管是 Web 系统,还是移动 APP,前后端逻辑的分离设计已经是常态化,相互之间通过 API 调用进行数据交互.在基于 API 约定的开发模式下,如何加速请求 / 响应的 API 测试,让研发人员及 ...
- api自动化测试_API测试和自动化101:基本指南
api自动化测试 API代表A pplication P AGC软件我覆盖整个院落. 通常,API用于通过使用任何通信方式来促进两个不同应用程序之间的交互. 在网络上使用API时,我们将其称为&q ...
- Android属性动画进阶用法
2019独角兽企业重金招聘Python工程师标准>>> 在上周二文章中介绍补间动画缺点的时候有提到过,补间动画是只能对View对象进行动画操作的.而属性动画就不再受这个限制,它可以对 ...
- python自动化测试脚本可以测php吗_python unittest实现api自动化测试_python
这篇文章主要为大家详细介绍了python unittest实现api自动化测试的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 项目测试对于一个项目的重要性,大家应该都知道吧,写python的 ...
- postman如何测试php接口_基于Postman的API自动化测试
基于Postman的API自动化测试 1.安装 两种安装方式,我热衷于以chrome插件形式安装 Chrome插件 Mac App 2.发送请求 Postman最基础的功能就是发送http请求,支持G ...
- canvas图形处理和进阶用法
前面的话 上一篇博客介绍了canvas基础用法,本文将更进一步,介绍canvas的图形处理和进阶用法 图形变换 图形变换是指用数学方法调整所绘形状的物理属性,其实质是坐标变形.所有的变换都依赖于后台的 ...
最新文章
- Paste模块的世界
- bzoj 2186: [Sdoi2008]沙拉公主的困惑
- 再见,Navicat!这个Pycharm的兄弟真香!
- Android---- 获取当前应用的版本号和当前android系统的版本号
- 数据库可以存php代码,php把数组保存数据库程序代码
- 简述get 和 post 的主要区别——计算机网络
- 技术竞争力之Web技术方向
- 特征工程之非线性特征提取和模型堆叠
- lt;SCRIPT src=quot;../scripts/LoadWebOffice.jsquot;gt;lt;/SCRIPTgt;
- 如何备份数据库的某张表_详解mysql数据库如何用mysqldump实现单表备份
- 改变图片局部透明度,实现透明度根据位置不而渐变
- 数字化时代品牌营销:体验 感知 共创
- st语言 数组的常用方法_st语言
- FragmentVisible
- 使用html2canvas实现超出浏览器部分截图
- Android 开发技术周报
- C++【STL】【string类的使用】
- 微软账户服务器连不上开不了机,Win10无法登录微软账户提示“内部服务器错误(500)”怎么解决?...
- c#的decode用法
- 51单片机接上拉电阻原理