我在使用Grinder时遇到了一些运气。它基于 Java,但您也可以使用 Jython 或 Clojure 编写脚本。
您说您想利用您团队当前的 Selenium 脚本和专业性能测试。您没有描述您的回归测试脚本,但您可能想重新考虑它们是否合适。特别是,您应该考虑两个问题:Selenium 是否适合性能测试以及功能测试是否适合性能测试?
首先,您可能已经意识到,Selenium 是一种非常耗费资源的方式来引发系统负载。让我引用 Selenium Grid FAQ 中的第一个问题:
问:你会推荐使用 Selenium Grid 进行性能/负载测试吗?
答:Selenium Grid 不是为性能和负载测试而设计的 [...] 主要原因是使用真实浏览器进行性能/负载测试是一个非常糟糕的主意,因为扩展负载和实际负载很难/昂贵。负载非常不一致。
[...]
例如,要模拟 200 个并发用户,您需要 200 个并发浏览器以及基于 Selenium Grid 的负载测试框架。即使您在 Linux 上使用 Firefox(因此是最有效的设置),您也可能需要至少 10 台机器来产生这种负载。当 JMeter/Grinder/httperf 可以在单台机器上生成相同类型的负载时,这真是太疯狂了。
其次,功能测试和性能测试的需求之间存在张力。功能测试侧重于各种情况下的正确行为,包括一些可能很少发生但对用户体验很重要的行为。性能测试侧重于系统在预期负载下的响应方式。如果您的功能测试没有为典型用户的工作流程建模,则它不属于性能测试。例如,当您输入 2 位数的电话号码时,知道页面会生成一个很好的错误消息可能很重要,但询问 100 个用户同时这样做时会发生什么是毫无意义的。
即使功能测试确实模拟了典型的用户行为,它仍然可能不适合性能测试。功能测试侧重于处理一组输入并检查结果是否与其预期值匹配。如果测试涉及多个步骤,它还可以检查中间结果以进行诊断。根据我的经验,性能测试省去了所有检查,因为它减慢了性能测试。(更准确地说,可能有一些线程检查预期结果与实际结果,但大多数线程只是尝试加载系统而不担心正确的结果。)