1

我开发了一个脚本,其唯一目的是检查网站/服务是否启动并运行。它这样做的方式是,它使用其 url 连接到页面并使用用户凭据登录到站点。如果登录成功,则服务运行良好。

该脚本是用 Java 编写的并使用 HTMLUnit。这就是我的问题。如何确保登录后返回的HTML页面(填写表单后单击登录/登录按钮)是登录后的“帐户主页”。换句话说,我如何确定登录操作是否成功。

这就是我现在的做法。帐户页面通常有一些与用户相关的信息。例如,如果我登录到 yahoo 邮件,它将在页面右上角显示“欢迎,用户名”,或者页面上将始终显示“撰写”或“收件箱”。我正在使用这个逻辑来测试是否成功。

这是我在测试这个脚本时的观察。我遇到过这条规则失效的案例。

  • 有时登录后返回的页面是一个错误页面,要求您
    检查输入的凭据。

  • 有时返回的页面可能会要求您打开 javascript 或
    在浏览器中启用 cookie。

  • 我遇到过服务器返回的页面与登录前页面相同的情况(没有解释原因)

  • 一些网页本质上是动态的,因此内容会不时变化。在这种情况下,关键字搜索可能会导致误报
    。这就是为什么这种搜索字符串是否存在的逻辑
    完全取决于“搜索字符串/关键字”的选择。

我想说的是,预先为这些案例编码是不现实的。

我尝试比较登录前和登录后页面的 url,但发现
有很多情况两者是相同的。因此,即使这种方法也不是决定性的。

我需要确定登录是否成功的可靠方法。我不是专业的网络开发人员。服务器是否在新页面中返回任何可以解决的状态代码?HTMLUnit 是否具有测试成功和失败的能力。

感谢您的帮助/评论。谢谢!!!

4

1 回答 1

1

嗯......这是一个棘手的问题。这是因为您无法控制服务器。如果您要求 A,您可能会收到 A,但您应该准备好收到 B、C 和 D……您可能会错过 E。

我需要确定登录是否成功的可靠方法。

根据您的评论,寻找“Welcome <Username>”字符串应该是非常确定的。换句话说(更程序化)的话,如果你在结果页面中有那个字符串,那么你就已经登录了。你肯定有机会。

现在,您已经提到在某些情况下您尝试登录但没有收到该字符串。在这些情况下,根据您的示例,您几乎总是不应该登录。

但是,正如您所说,他们可以将该字符串从“欢迎,<用户名>”更改为“您又来了!” 你会得到假阴性。但是,您不太可能在应用该逻辑时得到误报。

那么,有没有办法让猜测用户是否登录成功100%,如果用户未登录也100%成功?不,没有。理解这一点的最简单方法是以类似人类的方式使用网络:

场景一:

  1. 尝试登录
  2. 您会看到一个红色标签,上面写着“用户和密码不正确
  3. 你推断你没有登录。你是对的

场景二:

  1. 尝试登录
  2. 您会看到“欢迎 <用户名>”
  3. 您推断您已登录。您是对的

场景 3:

  1. 尝试登录
  2. 您收到“启用 javascript”消息
  3. 您推断您未登录。但是,这恰好只是来自服务器的建议,您实际上已登录。您刷新页面,然后看到“欢迎”。因此,即使作为人类,您也失败了

场景四:

  1. 尝试登录
  2. 你得到一个超时
  3. 你推断你没有登录。但是,登录请求到达了你登录的服务器,当服务器用 HtmlPage 回复时,你的互联网连接、ISP 或只是互联网中断了一毫秒,你的数据包丢失了。所以在这里你甚至作为一个人也失败了

这些只是一些场景,但还有更多。现在想一想:即使是人脑也不能 100% 确定登录试验的结果……我们怎么能指望无头浏览器呢?:)

于 2013-08-29T19:54:53.113 回答