51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2719|回复: 4
打印 上一主题 下一主题

[转贴] 快速搞定 selenium grid 分布式测试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-5-27 14:34:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以传统的方式部署分布式Selenium Grid集群需要耗费大量时间和机器成本来准备测试环境。
Snake用docker来搭建Selenium grid环境,用ptest框架来写代码,尝试简化这个过程。




NO.1 搭环境首先你得把docker加个阿里云加速器,不然那个等待是漫长的。
写个docker-compose.yml
hub:  image: selenium/hub  ports:    - "4444:4444"firefox:  image: selenium/node-firefox  ports:    - 5901:5900  links:    - hubchrome:  image: selenium/node-chrome  ports:    - 5902:5900  links:    - hub启动起来:
docker-compose up看起来是这样的




启动成功。
环境部分,就大功告成了。So easy!
NO.2 写代码写了一个很简单的例子,用了同事写的ptest框架。
这个框架改进了很多市面上框架用起来不爽的地方,比如:报告,并发,写log, 传参等。
  1. __author__ = 'anderson'

  2. # coding=utf-8
  3. from selenium import webdriver
  4. from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
  5. from selenium.webdriver.support.ui import WebDriverWait

  6. from ptest.decorator import TestClass, Test, BeforeMethod, AfterMethod

  7. @TestClass(run_mode="parallel")  # the test cases in this class will be executed by multiple threads
  8. class SeleniumClass:
  9.     @BeforeMethod(description="Prepare test Enviroment.")
  10.     def before(self):
  11.         preporter.info("set up driver")
  12.         browser = config.get_property("browser")
  13.         if browser == "firefox":
  14.             self.driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
  15.                                            desired_capabilities=DesiredCapabilities.FIREFOX)
  16.         elif browser == "chrome":
  17.             self.driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',
  18.                                            desired_capabilities=DesiredCapabilities.CHROME)

  19.     @Test(tags=["regression", "smoke"])
  20.     def test1(self):
  21.         preporter.info("start to test")
  22.         self.driver.get("http://www.baidu.com")
  23.         inputElement = self.driver.find_element_by_name("wd")
  24.         inputElement.send_keys("docker")
  25.         inputElement.submit()
  26.         WebDriverWait(self.driver, 20).until(lambda driver: driver.title.startswith("docker"))
  27.         assert_true(self.driver.title.startswith("docker"))

  28.     @AfterMethod(always_run=True, description="Clean up")
  29.     def after(self):
  30.         preporter.info("cleaning up")
  31.         self.driver.quit()
复制代码

运行,得到结果:




Oopos, 出错了!



仔细看log和截图,原来是没有支持中文。
解决方案是: 换docker image 源,搜到了支持中文的。
重启后再运行。




Nice!



NO.3 并发其实第二步里面已经打开了并发。运行的时候,输入并发数就可以了。
  1. ptest3 -t test -n 2 -Dbrowser=firefox
复制代码

这里的n是并发数,参数是firefox. 让firefox做为浏览器。(可以根据case 数量来设定)
当然,也可以在yml里面多注册几个hub, up to you!
感想其实在这里,我都没做啥,只是做了个搬运工而已,报告,截图,并发,重跑等等,我都不用操心,只要设置几个参数就行。好的框架,能事半功倍。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2017-5-27 15:09:39 | 只看该作者
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-14 14:48 , Processed in 0.065806 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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