当前位置: 首页>>WEB开发>>正文


将生产数据库转换为测试数据

webfans WEB开发 , 去评论

问题描述

测试越接近生产,就越能模仿生产行为。我想将生产中的数据库备份复制到我们的测试环境中,但是我需要更改以便测试工作,并且不要干扰生产或不小心通过电子邮件发送真实客户(除了使用测试URL设置web/%secure/base_url)?

考虑这个问题的另一种方法是考虑如何从我自己的生产数据中生成像Magento Sample Data这样的东西。

最佳解决办法

1)DB转储

执行导出时,只能导出以下表的结构:

core_cache
core_cache_option
core_cache_tag
log_customer
log_quote
log_summary
log_summary_type
log_url
log_url_info
log_visitor
log_visitor_info
log_visitor_online
enterprise_logging_event
enterprise_logging_event_changes
index_event
index_process_event
report_event
report_viewed_product_index
dataflow_batch_export
dataflow_batch_import

此外,core_url_rewrite只能与结构一起导入,并在导入后运行目录URL重写reindex,除非您需要所有这些记录(用于各种测试)。

您也可以清理废弃的推车(提示:sales_flat_quote),如果您不需要它们也可以删除订单并保留有限的数量

2)配置设置

  • 网络/(不安全|安全)/base_url

  • 联络邮箱地址

  • 禁用电子邮件(system/smtp/disable),这样您就不会错误地发送电子邮件

3)匿名客户信息

  • 您可以将Anonygento模块用于Magento

  • 编写自己的脚本来模糊客户信息/销售订单/等

4)模块设置

  • 您可以为付款/装运模块启用沙盒模式并进行正确设置

  • 检查用于各种集成的模块(禁用或将它们设置为沙箱模式)

次佳解决办法

我们编写了一个脚本来处理分支的数据库转储。阅读this article

基本原则是它读取local.xml以获取数据库凭据,然后在此基础上转储数据。它将转储拆分为两部分,仅结构,然后是数据。但关键是它通过跳过non-essential data来加速传统的转储过程,并且最关键的是防止转储期间的任何表锁,否则会阻塞/挂起您的实时站点。

当您获得MySQL转储时,只需使用sed即可轻松更改URL

sed -i 's/www.mydomain.com/staging.mydomain.com/g' ./var/db.sql

然后在您的新数据库中运行mysql导入。

因此,如果没有脚本,非常基本的版本将如下所示。

mysqldump -hHostname -uUsername LiveDbname -p > db.sql
sed -i 's/www.mydomain.com/staging.mydomain.com/g' db.sql
mysql -hHostname -uUsername DevDbname -p < db.sql

如果以这种方式更改DB中的URL,则根本没有必要删除local.xml文件或re-run安装程序。

我们的Magento GIT Guide涵盖了整个分支过程。这是创建开发分支的一个很好的过程,但确实缩小了实时DB。因此测试与现场网站上的测试不完全相同。

因此,对于暂存站点,执行vanilla数据库转储,sed替换,数据库导入就足够了。并将尽可能地镜像/匹配现场。

在防止与客户沟通方面 – 我们从未发现它是必需品,因为我们总是故意为测试创建帐户,从不使用真正的客户订单进行测试。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2602.html,转载请务必附带本地址声明。