文章目录
前言
程序的基本功能就是通过输入一组数据,得出我们期望的输出。我们测试的目标就是通过设计一组或者多组数据,得出期望的数据,通过次来验证程序功能是否满足需求。根据测试类型的分类,其中功能测试(人工)执行都是手工输入,耗时耗力。白盒、mock、性能、自动化都是通过书写脚本进行测试程序的自动执行。但是面临多组数据或者批量数据的时候,我们只能事先设计批量数据,因此脚本中就会出现大批自定义变量或者读取文本,影响脚本的运行空间以及美观易读。最重要的是这种方式也是有限度的,程序变更后修改量大且麻烦的很。因此今天给大家推荐一款数据生成器——Spock-Genesis。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Spock-Genesis是什么?
主要是使用 Spock 测试框架进行基于属性测试的惰性数据生成器.
提供测试数据,特别是在尝试测试广泛的输入时,如果不是不可能手工完成的话,也是很乏味的。生成输入允许进行更彻底的测试,而无需显著增加工作量。在Spock中,数据驱动测试可以使用任何Iterable提供的数据。Spock Genesis提供了一系列从Generator扩展而来的类来满足这个接口。在可能的情况下,生成器是惰性的和无限的。
二、使用步骤
1.添加Spock-Genesis依赖
<dependency>
<groupId>com.nagternal</groupId>
<artifactId>spock-genesis</artifactId>
<version>0.6.0</version>
<scope>test</scope>
</dependency>
由于Spock-Genesis是依赖于spock框架,因此需要spock框架的支持
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>2.0-groovy-3.0</version>
</dependency>
然而groovy语言的应用能够更加方便
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>3.0.7</version>
<type>pom</type>
</dependency>
2.示例
被测试对象Person
static class Person {
int id
String name
String title
Date birthDate
char gender
}
测试脚本
def 'pogo'() {
expect:
person instanceof Person
person.gender in ['M', 'F', 'T', 'U'].collect { it as char }
person.id > 199
person.id < 10001
person.birthDate >= Date.parse('MM/dd/yyyy', '01/01/1940')
person.birthDate <= new Date()
where:
person << Gen.type(Person,
id: Gen.integer(200..10000),
name: Gen.string(~/[A-Z][a-z]+( [A-Z][a-z]+)?/),
birthDate: Gen.date(Date.parse('MM/dd/yyyy'
), new Date()),
title: Gen.these('', null).then(Gen.any('Dr.', 'Mr.',
'Ms.', 'Mrs.')),
gender: Gen.character('MFTU')
).take(3)
}
——Java.Testing.with.Spock 示例
总结
该文章主要是让大家看一下Spock-Genesis的基本实例,后续会分批介绍一下各种数据类型如何自动生成随机数据。