# Randomized testing（随机测试）

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/getting-started.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/getting-started.html)（修改该链接为官网对应的链接）

译文链接 : [http://www.apache.wiki/display/Elasticsearch](http://www.apache.wiki/display/Elasticsearch)（修改该链接为 **ApacheCN** 对应的译文链接）

贡献者 : 廖建博，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

## Randomized testing（随机测试）

您目前看到的代码片段都没有显示随机测试功能，因为它们被小心隐藏在hood下。 但是，当您编写自己的测试时，您也应该使用这些功能。 在开始之前，您应该要知道，如何重复使用相同设置的失败测试，如何失败的。 幸运的是，这很容易，因为整个mvn调用与失败的测试都将一起记录，这意味着你可以简单地复制和粘贴该行并运行测试。

## generating random data（生成随机数据）

下一步是把使用静态测试数据的测试，转换为使用随机测试数据的测试。您可以随机化的数据类型与您正在测试的功能有很大的不同。看看下面的例子（注意，这个列表可以继续页面，因为分布式系统有许多很多移动的部分）：

使用任意UTF8符号搜索数据
每次运行时更改映射配置，索引和字段名称
每次运行时更改响应大小/可配置限制
创建索引时更改碎片/副本的数量
那么，你如何创建随机数据。最重要的事情是，你不应该实例化自己的随机实例，而是使用随机化测试中提供的随机实例，所有弹性搜索依赖测试类都从该实例继承。

| `getRandom()` | 返回随机实例，可以在使用特定参数调用测试时重新创建 |
| `randomBoolean()` | 返回随机布尔值 |
| `randomByte()` | 返回一个随机字节 |
| `randomShort()` | 返回随机短 |
| `randomInt()` | 返回一个随机整数 |
| `randomLong()` | 返回一个随机长 |
| `randomFloat()` | 返回随机浮点数 |
| `randomDouble()` | 返回一个随机的double |
| `randomInt(max)` | 返回0和max之间的随机整数 |
| `between()` | 返回提供的范围之间的随机值 |
| `atLeast()` | 返回至少为指定整数的随机整数 |
| `atMost()` | 返回最多指定整数的随机整数 |
| `randomLocale()` | 返回随机区域设置 |
| `randomTimeZone()` | 返回随机时区 |
| `randomFrom()` | 从列表/数组返回一个随机元素 |

此外，还有几种帮助方法，可以创建随机ASCII和Unicode字符串，请参阅随机测试类中以randomAscii，randomUnicode和randomRealisticUnicode开头的方法。后者尝试通过非任意随机创建更真实的unicode字符串。

如果要调试特定随机种子的特定问题，可以使用@Seed注释配置特定种子进行测试。如果要多次运行测试，而不是重复启动整个测试套件，可以使用@Repeat注释和任意值。每次迭代都不同于使用不同的种子运行。