51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

楼主: bruce.gu
打印 上一主题 下一主题

Selenium 连续记录【有啥问题可以在这里问,一起讨论】

[复制链接]

该用户从未签到

21#
 楼主| 发表于 2008-11-26 13:02:05 | 只看该作者
所以需要自己写一个log4j filter 的扩展。可以把case id push 到ndc里,然后根据ndc来filter log到 不同的文件里。或者可以根据thread name 来filter。
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2008-11-26 19:29:23 | 只看该作者
接下去该考虑所谓的并行测试了。就是同是跑多个测试线程。这里就是引入 testng和selenium grid 的时候了。
由于junit 本身不支持parallel 所以,当时就把junit去掉改用testng来跑test了。另外selenium grid也不难,不需要他安装包里面那么多东西,只要selenium-grid-hub-standalone-1.0.2 , selenium-grid-remote-control-standalone-1.0.2 和 grid_configuration.yml 和原先的selenium server放一起。然后改一下它的build文件就ok了。

上面的GRID那些内容怎么理解?
我运行GRID,不是这么运行的啊,也不要改什么build文件。我原来一直以为是通过HUB来控制其它电脑上的RC,后来发现是其它电脑连着HUB。也就是说在另外电脑上执行,在HUB上就会运行RC电脑上的操作过程。HUB是多台RC演示的汇总。在这个问题上我好多天才转过思路,才成功在GRID上运行多个环境、平台的JUNIT。这样达到了并行测试的效果。

[ 本帖最后由 xzl 于 2008-11-26 19:34 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

23#
 楼主| 发表于 2008-12-2 15:14:37 | 只看该作者

回复 22# 的帖子

我是先用的单独的selnium server,然后后来想用grid的时候,就把需要的几个jar包加进去,改一下build file。。不需要整个grid 目录里面那么多东西。。
grid 想当与一个负载均衡器一样的东西。其实。
回复 支持 反对

使用道具 举报

该用户从未签到

24#
 楼主| 发表于 2008-12-2 15:19:24 | 只看该作者
有啥问题可以在这里讨论讨论,尽力回答
回复 支持 反对

使用道具 举报

该用户从未签到

25#
 楼主| 发表于 2008-12-2 15:24:32 | 只看该作者
因为我们的脚本分成了declaration 和 script 两部分。declaration的主要部分就是定义element的locator. 现在在想怎么能够 自动获得这个locator 而不需要一个一个去同过firebug出来source 然后自己去写。
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2008-12-3 11:37:27 | 只看该作者
ajax的东思好像不好录制的,有什么解决办法么?
回复 支持 反对

使用道具 举报

该用户从未签到

27#
发表于 2008-12-3 11:38:17 | 只看该作者
还有对于从本地上传的操作可以怎么处理
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2008-12-3 17:33:53 | 只看该作者
我不认为GRID是一个负载均衡器。
我用GRID的目的是为了节省资源。如果每个电脑都跑RC的话,假若是多种环境、多种浏览器,那么就需要浪费多台电脑,而且一运行RC的话,这台电脑就没法做其它的事情(屏幕上经常跳出页面来,这样导致使用这台机器的人无法做其它事情).如果用GIRD,多台电脑仍然可以做自已的事情,多台电脑的事情都交给运行GRID的电脑去工作.
通俗地说,也就是说我们测试部有5个工程师,一段相同的脚本跑在5台不同环境下,需要消耗我们5个测试工程师的时间,但我们把这些事情交给一台HUB(也就是装有GRID),让这台HUB去做事情,其它5台电脑照样去做事情.从HUB中发现这个脚本在哪种环境下跑不起来,或者碰到了环境不兼容等问题,而不是让每台电脑去运行代码来发现问题.
我觉得这才是我们为什么要引用GRID的原因了.
不知道我有没有表达清楚我的意思?
GRID的目的是为了达到"并行测试"的目的.

[ 本帖最后由 xzl 于 2008-12-3 17:35 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

29#
 楼主| 发表于 2008-12-4 09:55:43 | 只看该作者
不好意思,不是很懂你的意思呀。我们使用grid 目的是到达平行运行test,加快测试速度。 也就是TestNG的多线程运行。比如你有100个case,本来一个一个运行需要100分钟完成,现在有5个机器(selenium remote control)注册到Grid上,然后同时分5个线程去跑test的话, 那就只要100/5=20分钟时间(假设每个case花同样的时间。)

你的情况是一个case 需要在不同的环境下跑,比如 一个case 需要在5个不同的环境下跑。那你怎么做的?
是不是 5个不同环境的机器(selenium remote control)注册到grid 上面。 然后这个case 连续运行5次?grid就去每个环境下跑一遍?


原帖由 xzl 于 2008-12-3 17:33 发表
我不认为GRID是一个负载均衡器。
我用GRID的目的是为了节省资源。如果每个电脑都跑RC的话,假若是多种环境、多种浏览器,那么就需要浪费多台电脑,而且一运行RC的话,这台电脑就没法做其它的事情(屏幕上经常跳出页 ...
回复 支持 反对

使用道具 举报

该用户从未签到

30#
 楼主| 发表于 2008-12-4 10:00:54 | 只看该作者
IDE对于ajax 的录制是有问题。我们在使用过程中基本是靠手动获取要用到的element的locator(firebug + xpath checker), 然后再写 element的action.
IDE 是一个firefox 的plugin, 有兴趣的话可以研究一下他,自己也可以写一个适合自己项目用的录制脚本的东西。偶们现在没时间搞这个东西。
主要原理好像就是通过javascript Element event  去获取 event.target 然后根据html source 做一些解析,得到element 以及action.
原帖由 rting 于 2008-12-3 11:37 发表
ajax的东思好像不好录制的,有什么解决办法么?
回复 支持 反对

使用道具 举报

该用户从未签到

31#
 楼主| 发表于 2008-12-4 10:13:51 | 只看该作者
上传选择文件也是处理不了的,因为那是一个window的UI不是 javascript 所能访问到的。
不过我们的UI上传文件一般用的<input type='file'> 这种,直接在文本框里输入文件的path.
原帖由 rting 于 2008-12-3 11:38 发表
还有对于从本地上传的操作可以怎么处理
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2008-12-4 19:42:43 | 只看该作者
你的情况是一个case 需要在不同的环境下跑,比如 一个case 需要在5个不同的环境下跑。那你怎么做的?

是的,我运用GRID的目的不是为了加快速度。我用GRID的目的是测试多个环境。比如一个大型招聘网站,客户有用windows操作系统的,然后又分N种IE,客户也有用LINEX、APPLE等操作系统的,这么多的环境,你就用在很多电脑安装在这个环境下。
当我们每台电脑都安装了不同的环境,如果不用GRID,就需要在每台电脑上都去跑RC。如果用GRID,只需在一台良好的服务器下安装GRID的,其它电脑连着这台服务器,这些机器照样可以从事其它工作,不受影响,而这些多环境全部交给服务器去运行、处理。这台装有GRID的服务器就代替多台电脑进行工作。(这种方法已经在大型招聘网站的程序运行过)
也可以照你的意思理解, 5个不同环境的机器(selenium remote control)注册到grid 上面。 然后这个case 连续(并行)运行5次?grid就去每个环境下跑一遍?
而你的思想是节省时间,负载均衡这些思想我倒没有试过。
回复 支持 反对

使用道具 举报

该用户从未签到

33#
发表于 2008-12-4 19:51:13 | 只看该作者
IDE对于ajax 的录制??
假如要良好运用SELENIUM的话,是不用IDE进行录制的,当然可以用来作辅助。
最好全是用手去写脚本。
在写脚本之前先分析需求、设计用例,按照用例写脚本。
SELENIUM对系统是持续集成或者模块不断增加,特别是系统在多个国家,并且每个国家的程序方式又有些不同的时候,SELENIUM威力大一些。如果只针对单纯的小系统,最好不要用SELENIUM,因为成本代价是比较大的。
本地上传文件确实没有什么好办法,就如bruce.gu的方法。
还有一个就是验证码的问题,也是不太好解决的。不过验证码问题有解决方案。
回复 支持 反对

使用道具 举报

该用户从未签到

34#
 楼主| 发表于 2008-12-5 09:40:48 | 只看该作者
是的,我们也是完全靠手写脚本。不过我们写的脚本不是selenium.command(),我们经过包装之后的脚本是 control.action()
比如combobox.select()

原帖由 xzl 于 2008-12-4 19:51 发表
IDE对于ajax 的录制??
假如要良好运用SELENIUM的话,是不用IDE进行录制的,当然可以用来作辅助。
最好全是用手去写脚本。
在写脚本之前先分析需求、设计用例,按照用例写脚本。
SELENIUM对系统是持续集成或者模 ...
回复 支持 反对

使用道具 举报

该用户从未签到

35#
发表于 2008-12-5 10:44:53 | 只看该作者
我们是借用ECLIPSE平台。用的是selenium.command()。

[ 本帖最后由 xzl 于 2008-12-5 10:46 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

36#
 楼主| 发表于 2008-12-8 09:50:43 | 只看该作者
对的,我们也是java @ Eclipse
原帖由 xzl 于 2008-12-5 10:44 发表
我们是借用ECLIPSE平台。用的是selenium.command()。
回复 支持 反对

使用道具 举报

该用户从未签到

37#
发表于 2008-12-11 00:26:53 | 只看该作者
啊,天哪,终于有人说这个了~~~
楼主,我们的环境和你描述的差不多,有个问题问一下啊?
就是我随机一个51位的串写到一个文本框中,事实上只写进去50个,然后生成一个文件是显示这个文本框中字串的,我怎么验证显示出来的这个和我随机的那个不同呢??
回复 支持 反对

使用道具 举报

该用户从未签到

38#
 楼主| 发表于 2008-12-11 13:33:18 | 只看该作者
不知道你具体情况到底怎么样,你用seleniu.type? 输入一个51位的字符串,然后用selenium.getValue取得文本框的字符串,然后两个结果比较一下。如果相同就说明有问题?不相同就说明没问题?
不知道你是不是这样做的。不过上面的步骤有可能得到结果是一致的。因为一般控制输入长度是javascript写的。所以需要selenium.fireEvent去触发这个js事件。不触发的话 直接用type 51位。应该是可以成功的。

不过我没试过输入位数的控制,我试了只允许输入数字的情况。



原帖由 zihuadou 于 2008-12-11 00:26 发表
啊,天哪,终于有人说这个了~~~
楼主,我们的环境和你描述的差不多,有个问题问一下啊?
就是我随机一个51位的串写到一个文本框中,事实上只写进去50个,然后生成一个文件是显示这个文本框中字串的,我怎么验证显示 ...
回复 支持 反对

使用道具 举报

该用户从未签到

39#
发表于 2008-12-15 22:38:18 | 只看该作者
多谢啊,你说的差不多,我看到一个assertNotEquals(), 不过关于这个东西我就是弄不对,去junit api 里看了,就好像没有这个命令,真是不知道怎么弄好了,不过貌似可以用别的方法去解决~~~
回复 支持 反对

使用道具 举报

该用户从未签到

40#
 楼主| 发表于 2008-12-16 09:35:16 | 只看该作者
这些方法自己都可以写的。

assertNotEquals() 没有可以用assertFalse(stringA.equals(stringB))或者assertTrue(!stringA.equals(stringB))来替代。

原帖由 zihuadou 于 2008-12-15 22:38 发表
多谢啊,你说的差不多,我看到一个assertNotEquals(), 不过关于这个东西我就是弄不对,去junit api 里看了,就好像没有这个命令,真是不知道怎么弄好了,不过貌似可以用别的方法去解决~~~
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-24 02:48 , Processed in 0.083203 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表