

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 生成测试数据
<a name="test-data-generation"></a>

测试数据的生成涉及生成和维护用于运行性能测试用例的大量数据。生成的这些数据充当测试用例的输入，因此可以在各种数据上测试应用程序。

通常，生成测试数据是一个复杂的过程。但是，使用创建不当的数据集可能会导致生产环境中的应用程序行为不可预测。性能测试的测试数据生成不同于传统的测试数据生成方法。它需要真实场景，而且大多数客户都希望使用与实际生产数据相似的数据来测试其工作负载。每次测试运行后，生成的测试数据通常还需要重置或刷新到其原始状态，这会增加时间和精力。

生成测试数据包括以下主要注意事项：
+ **准确性**-数据的准确性在测试的各个方面都很重要。不准确的数据会产生不准确的结果。例如，当生成信用卡交易时，它不应该是针对将来的某个日期。
+ **有效性**-数据应该对用例有效。例如，在测试信用卡交易时，不建议每位用户每天生成 10,000 笔交易，因为这与有效的用例场景大相径庭。
+ **自动化** — 自动生成测试数据可以带来时间和精力的好处。它还可以实现有效的测试自动化。手动生成测试数据可能会对质量和时间要求产生影响。

  根据用例，可以采用不同的机制，如下所示：
  + **API 驱动** — 在这种情况下，开发人员提供了测试数据生成 API，测试人员可以使用该API来生成数据。使用诸如之类的测试工具 [JMeter](https://jmeter.apache.org/)，测试人员可以使用商业 API 扩展数据生成。例如，如果您有用于添加用户的 API，则可以使用相同的 API 来创建数百个具有不同个人资料的用户。同样，您可以通过调用 delete API 操作来删除用户。对于复杂的工作流程应用程序，开发人员可以提供一个可以跨不同组件生成数据集的复合 API。使用这种方法，测试人员可以编写自动化程序，根据自己的要求生成和删除数据集。

    但是，如果系统很复杂或者每次调用的 API 响应时间很长，则设置和删除数据可能需要很长时间。
  + **SQL 语句驱动** — 另一种方法是使用后端 SQL 语句生成大量数据。开发人员可以提供基于模板的 SQL 语句来生成测试数据。测试人员可以使用语句来填充数据，也可以在这些语句之上创建包装脚本来自动生成测试数据。使用这种方法，如果测试完成后需要重置数据，测试人员可以非常快速地填充和删除数据。但是，这种方法需要直接访问应用程序的数据库，而这在典型的安全环境中可能无法实现。此外，无效的查询可能会导致数据填充不正确，从而产生偏斜的结果。开发人员还必须不断更新应用程序代码中的 SQL 语句，以反映随着时间的推移对应用程序所做的更改。

## 测试数据生成工具
<a name="data-tools"></a>

AWS 提供了可用于生成测试数据的原生自定义工具：
+ **亚马逊 Kinesis 数据生成器** — 亚马逊 Kinesis 数据生成器 (KDG) 简化了生成数据并将其发送到亚马逊 Kinesis 的任务。该工具提供了一个用户友好的用户界面，可直接在您的浏览器中运行。有关更多信息和参考实现，请参阅 “[使用全新 Amazon Kinesis 数据生成器测试您的流数据解决方案](https://aws.amazon.com/blogs/big-data/test-your-streaming-data-solution-with-the-new-amazon-kinesis-data-generator/)” 博客文章。
+ **AWS Glue 测试数据生成器** — AWS Glue 测试数据生成器提供了一个可配置的框架，用于使用 AWS Glue PySpark 无服务器作业生成测试数据。所需的测试数据描述可通过 YAML 配置文件进行完全配置。有关更多信息和参考实现，请参阅[AWS Glue 测试数据生成器](https://github.com/aws-samples/aws-glue-test-data-generator) GitHub 存储库。