内容简介:Pandaria本身以Java库的形式发布到Maven Central中,使用Pandaria本身只需要在构建工具中添加依赖即可,本身没有额外的安装操作。工欲善其事必先利其器,IDE能够使我们编写自动化测试事半功倍,此处推荐IntelliJ IDEA, 当然你可以选择其他你喜欢的用于开发Java的IDE。安装好IntelliJ IDEA后,我们可以创建一个标准的Maven工程。
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编写API自动化测试进阶用法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。