问题描述
|
我们正在开发一个胖客户端应用程序,该应用程序使用实体框架连接到sql Server数据库。
我们显然是使用本地数据库进行开发的,但是其中一项要求是,当以高延迟(例如200ms)通过VPN连接运行时,性能必须是可接受的
*
我认为测试这种情况的好方法是注入一些东西,这将给每个命令执行增加200ms的延迟,因此它就像真实交易一样“感觉”到,并且可以轻松地启用/禁用。
关于如何做到这一点的任何想法?
旁注:使用面向服务的体系结构在应用程序服务器上具有数据库访问权限和较粗粒度的界面,我会做不同的事情,但这不是我的主意
解决方法
在数据库服务器和客户端之间放置一个Wanem实例。 Wanem允许您使用许多配置选项来模拟广域网。不要忘记,除了相当大的滞后之外,您还必须考虑降低的网络速度。
此设置的最大优点可能是您不必对测试计算机进行任何更改。
,另一种方法是将数据库托管在虚拟机(例如VMware)中,然后可以调整虚拟机的网络性能,以便获得要测试的确切环境。
,如果您正在寻找编程解决方案,并且正在使用ObjectContext API,则还可以检查EF Provider包装器。提供程序包装器创建
DbCommand
的实例。命令由ѭ1包裹,因此您可以将简单的ѭ2引入ExecuteScalar
,ExecuteNonQuery
和ExecuteDataReader
。您只能在测试中使用提供程序包装器。
但是我同意@fvu提供的解决方案要好得多,并且也可以与DbContext API一起使用。
,为每个开发人员购买一台小型服务器(例如带有硬件raid1和16G内存的机架式设备;如果您有多个开发人员,请使用刀片服务器)。无论如何,他们确实应该有一个用于实验目的。将您喜欢的虚拟化平台放在上面(例如Vmware)。让每个开发人员在此环境中运行多个VM,一个用于数据库,一个用于应用程序,以及您需要的任何其他虚拟机。然后,您可以根据需要添加框来模拟应用程序服务器和数据库之间的延迟。
这并非不合理,并且不再需要任何软件许可;每个开发人员无论如何都需要MSDN订阅许可证才能在Microsoft世界中做任何事情。这样的订阅使您可以运行几乎任意的Microsoft软件以用于个人非生产用途。
为开发人员提供一个体面的开发环境并不昂贵,而且我认为这值得。
当然,开发人员不应在其常规开发平台上进行性能测试。性能测试需要一个专用的基于硬件的环境,该环境的配置与生产环境相同。