51Testing软件测试论坛

标题: 点击本网站内所有的Link [打印本页]

作者: trademark    时间: 2008-9-24 15:38
标题: 点击本网站内所有的Link
我的设计思想是,首先获取首页的所有链接,这是第一层。
然后点击第一层里的第一个链接,获取这个链接下的所有链接,这是第二层
然后点击第二层里的第一个链接,获取这个链接下的所有链接,这是第三层
....
直到首页的第一个链接全部跑完了,再回过来跑首页的第二个链接,然后再一层一层的跑

期间要加很多判断:
1.判断link是否有用(网页打不开)
2.判断是不是本网站内的链接,链到别人的网站去的这个就不需要检测
3.判断每次将要点的链接是不是已经点过的,点过的就不用再点了

这个脚本怎么设计啊,请大家帮我看看啊
作者: rcpp    时间: 2008-9-24 15:42
这个脚本可以写,但是几乎是不能用的
qtp做这个事情性能是非常差的,差到……我不知道怎么形容

如果你想懒一点,用xenu
如果真要自己写,用java实现一个也不难,有个html的parser可以直接拿去用的
作者: 假装不在    时间: 2008-9-24 15:45
半年前我写过,写了1200多行代码。
作者: rcpp    时间: 2008-9-24 15:46
标题: 回复 3# 的帖子
用qtp????
作者: 假装不在    时间: 2008-9-24 15:48

是呀,基本适合所有html的网站页面
作者: hsjzfling    时间: 2008-9-24 15:59
写当然是没问题的,慢一些也是肯定的,但未必就是完全不能用吧~~

有几个概念LZ还是要定义清楚咯,比如"链接"涵盖的范围?除了Link,图片链接算不算链接~比如本网站的定义,等等

代码的思路也不会很复杂,用childobjects方法取到第一个页面上的所有"链接",循环判断每个链接,满足条件的就点击,然后递归。

有一点要特别注意下,就是点击链接后页面的打开方式,是在新窗口打开还是在本页面内打开,这个区别蛮大的,具体的处理方法上也就会有所不同。
作者: 假装不在    时间: 2008-9-24 16:14
思路还可以,我那时候的思路是,
page1点击出来的所有New_Page_DifIE或者New_Page_SameIE的,都记录在一个datadrive里面
然后做了返回或者关闭的工作。直到把page1的所有连接都点完了,再去做datadrive里面的第2个页面或者连接的点击操作

过程中包括了错误捕获,对象重捕获,错误恢复等等。
注意点:
1,这里面如果做了New_Page_SameIE,需要注意的是link的重新捕获,因为这些对象会因为页面变化而过期。
2,要注意页面的frame捕获,因为frame就像一个page一样,不过和page操作也差不多。
3,如果使用xenu,它的缺点是无法做登陆后的连接点击,要克服这点除了开发给你提供特定的页面或者“连接登陆”(点连接后直接登陆,因为把用户名和密码写在里面)
4,或者通过写进send session或者cookies的方法去实现(这点主要是针对第3点)
5,需要注意的是,如果内部做的测试,有时候不小心因为一些友情连接,点击到外网,那真的是没完没了。所以做这个操作的时候,你需要把连接的link做个提取,使用正则表达式去取出http://localhost或者http://192.168.....内网的自己地址。因为一般我们的服务器都建在内网。但如果你是在做外网的操作。哪么你或者需要写个正则表达式再去匹配这一类网站的link。

[ 本帖最后由 假装不在 于 2008-9-24 16:20 编辑 ]
作者: 假装不在    时间: 2008-9-24 16:22
不知不觉我又说了哪么多。,这个是我项目里面的一套脚本。一个中小型的,大概1个半小时可以跑完它。
虽然没有xneu快,但是可以实现登陆后的。如果可以做登陆的检测,哪么我们当然使用xneu了。
其实这套脚本我有个讲稿,但是不知道丢哪里去了。

[ 本帖最后由 假装不在 于 2008-9-24 16:25 编辑 ]
作者: hsjzfling    时间: 2008-9-24 16:30
ls太有心了。。。
这个我最多想想就算了,肯定不会真的去做的,更何况是写1200行代码
作者: 假装不在    时间: 2008-9-24 16:34
原帖由 hsjzfling 于 2008-9-24 16:30 发表
ls太有心了。。。
这个我最多想想就算了,肯定不会真的去做的,更何况是写1200行代码



其实,没有动手去做,想的,永远不会碰到什么问题,最多就是几个技术点的问题。
例如link过期这些,是在项目前没想到的。

不过这个是第1个版本的。现在公司项目里面已经写到第三套了。第2套是用递归。控制性或者也叫维护性不是哪么好,维护到哭了。类似我之前说的时间对象内存等等问题会出现,而且很难控制。

[ 本帖最后由 假装不在 于 2008-9-24 16:35 编辑 ]
作者: trademark    时间: 2008-9-24 16:51
标题: 回复 6# 的帖子
图片之类的都算的,无须重新打开页面,只要在本页面内点击就行了
作者: trademark    时间: 2008-9-24 16:53
能不能共享一下你的脚本?
作者: trademark    时间: 2008-9-24 16:54
原帖由 假装不在 于 2008-9-24 16:34 发表



其实,没有动手去做,想的,永远不会碰到什么问题,最多就是几个技术点的问题。
例如link过期这些,是在项目前没想到的。

不过这个是第1个版本的。现在公司项目里面已经写到第三套了。第2套是用递归。 ...


加我msn:wangyuanwy2002@hotmail.com
作者: 假装不在    时间: 2008-9-24 17:03
原帖由 trademark 于 2008-9-24 16:53 发表
能不能共享一下你的脚本?



哈哈,这个是公司的东西,不能共享。
作者: trademark    时间: 2008-9-24 17:26
哎,说到头了,大家都只是参与一下,没有一个实际的思路出来
作者: hsjzfling    时间: 2008-9-24 17:33
原帖由 假装不在 于 2008-9-24 16:34 发表



其实,没有动手去做,想的,永远不会碰到什么问题,最多就是几个技术点的问题。
例如link过期这些,是在项目前没想到的。

不过这个是第1个版本的。现在公司项目里面已经写到第三套了。第2套是用递归。 ...


既然用递归了,那当然就不应该单纯的记链接对象咯,否则多半会遇到对象过期的问题。应该将链接的url/href保存下来,对于一个非submit的链接来说,点击link来打开页面与输入网址来打开应该是没有差别的吧~~这样就可以忽略掉对象过期的问题咯
作者: trademark    时间: 2008-9-25 09:19
讨论一天了,原来都只是来参与一下的
作者: 假装不在    时间: 2008-9-25 09:42
已经讨论了很多了。这些够你用的。不一定要看到脚本才叫实际。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2