gpt4 book ai didi

perl - 测试 Web 应用程序的最佳方法是什么,尤其是在并发访问方面?

转载 作者:行者123 更新时间:2023-12-04 23:06:47 25 4
gpt4 key购买 nike

我正在开发一个使用 CGI.pm 实现用户交互的 Web 应用程序。现在我喜欢通过实现单元测试来测试我的更改。这些是我的要求:

  1. 波斯语方式
  2. 轻松实现单元测试以验证简单的工作流程。我的网络应用程序主要由两种形式组成显示和改变平面文件数据库的内容。
  3. 允许测试多个用户的并发访问。这应该确保例如锁定以正确的方式执行。我对绩效衡量不感兴趣。
  4. 与 Ecplise 集成(EPIC)
  5. 可读和口语单元测试

到目前为止,我已经找到了这些包:CGI::Test , Test::HTTP , HTTP::WebTestTest::WWW::Mechanize .

  • CGI::Test 作为一个项目接缝相当死气沉沉,最后一次更改是在 2003 年 10 月。
  • Test::HTTP 专注于 HTTP 连接。
  • HTTP::WebTest 正在根据测试规范运行测试。更多软件包,但最后一次更改是在 2003 年 9 月。
  • Test::WWW::Mechanize 全面而现代的界面。由多人维护一段时间。可读测试,但接缝侧重于测试静态页面(也许这是不正确的,但仅基于方法的数量)。可以使用 submit_form_ok 填写表单,但没有示例显示可以检查返回的页面。测试并发访问对我来说也不明显。

所以我的研究将导致 Test::WWW::Mechanize。这是正确的方法吗?

预先感谢您的帮助。

最佳答案

Test::WWW::Mechanize 是一个很好的方法。

Test::WWW::Mechanize 是 WWW::Mechanize 的子类Test::WWW::Mechanize->new 返回一个对象,该对象是 LWP::UserAgent 的子类.因此,如果您阅读并理解这些库的文档,将会对您有很大帮助。例如,WWW::Mechanize 文档将向您解释如何提交表单和检索其内容。

例子

这是一个测试 2 个用户同时访问并显示如何检查结果的示例(改编自 Catalyst testing tutorial ):

my $ua1 = Test::WWW::Mechanize->new;  # user agent 1, Bud
my $ua2 = Test::WWW::Mechanize->new; # user agent 2, Ace

# Log in as each user
$ua1->get_ok("http://localhost/login?username=Bud&password=xxx", "Login 'Bud'");
$ua2->get_ok("http://localhost/login?username=Ace&password=xxx", "Login 'Ace'");

# Go back to the login page and it should show that we are already logged in
$_->get_ok("http://localhost/login", "Return to '/login'") for $ua1, $ua2;
$_->title_is("Login", "Check for login page") for $ua1, $ua2;
$_->content_contains("Please Note: You are already logged in as ",
"Check we ARE logged in" ) for $ua1, $ua2;

简要说明:

get_ok($url, $msg):

检查以确保可以检索到 $url。测试失败时显示 $msg。

title_is($title, $msg):

检查 <title>...</title> 标签的内容。测试失败时显示 $msg。

content_contains($content, $msg):

检查正则表达式 $content 是否匹配 html 正文中的任何内容。测试失败时显示 $msg。

更多需要考虑的事情

您可能想看看 Test::WWW::Mechanize::CGI .它允许您在不运行网络服务器的情况下进行测试。

WWW::Mechanize::FAQ如果您正在寻找示例,可能对您有用。

关于perl - 测试 Web 应用程序的最佳方法是什么,尤其是在并发访问方面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com