Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby introduction to QA people

Avatar for SiweiShen SiweiShen
January 03, 2013
63

Ruby introduction to QA people

how to use ruby in QA work.

Avatar for SiweiShen

SiweiShen

January 03, 2013
Tweet

Transcript

  1. RUBY: 新 言的代表 兴语 • 可 性更好 读 : File.read(“some_file.txt”)

    • 代 更少: 码 JAVA 代 的 码 1/3 ~ 1/5 • 文档丰富,社区火爆,各 工具 出不 种 层 穷 • JAVA 者 终结 • 缺点 1 : RUBY 程序 太少 员 • 缺点 2 : 英文要求高(文档全英文) 对
  2. 例子 1 :部署 • 我要做一次部署,人肉的 是: 步骤 • 1. 从

    GIT 下 代 到本地 载 码 • 2. 上 最新代 到服 器 传 码 务 • 3. 做某些 服 器 境的 置(数据 等) 针对 务 环 设 库 • 4. 重启服 器 务 • 5. 万一出 了,回 到前一个版本 错 滚 .
  3. SHELL 脚本: • 1. git clone git://scm.org/your_project.git • 2. scp

    your_project [email protected]:/target_dir • 3. ssh server.com • 3.1 $ cp database.property config/ • 3.2 $ cp other_files... • 3.3 $ tomcat restart • 4. Roll back? 度太大 实现难
  4. Ruby 脚本 : • 1. 配置好 config/deploy.rb set :deploy_to “target_folder”

    set :user_name “kcv478” • 2. 部署 : $cap deploy • ssh to server • checkout code • copy config files.. • restart server • rollback if failed...
  5. 例子 2 :替 某些文本 换 • 在 去的一个 目中,由于服 器的某个

    置 过 项 务 设 问 , 次部署的 候,都需要修改 题 每 时 4 个 css 文 件,一个 js 文件,和 3 个文本文件,它 要 们 做的事情都是一个: • 把 url(“some_image_path”) • 替 成 换 url(“sub_uri/some_image_path”)
  6. SHELL 脚本:使用了 expect #!/usr/bin/expect # open public/stylesheets/application.css send ":e public/stylesheets/application.css\r"

    sleep 2 expect "application.css" # execute replace command send ":%s/url(\\/im/url(\\/$sub_uri\\/im/g\r" sleep 2 expect ] send ":w\r" expect written
  7. 例子 3 : 找包含特定字符的文件 查 • SHELL: find . -name

    \*.rb -print0 | xargs -0 grep some_method • RUBY: (注意可 性) 读 dir['**/*.rb'].search(/some_method/)
  8. : 大部分 候,用 结论 绝 时 RUBY • http://stackoverflow.com/questions/2342894/ruby-or- python-instead-of-shell

    • 极其 的情况可以使用 简单 纯shell: $ who | grep -i admin | cut -c10-20 • 其他情况,全用 RUBY :
  9. 例子 4 : Java, Python, Ruby 比较 • java 的配置文件

    (Maven) <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.25.0</version> </dependency> <dependency> <groupId>com.opera</groupId> <artifactId>operadriver</artifactId> </dependency> </dependencies>
  10. 例子 4 : Java, Python, Ruby 比较 • Python 的配置文件

    (Fabric) def deploy(setup_initial_data = None, server_password = None ): deployed_to = fabric.operations.prompt("Where do you want it deployed?", default = settings["default_deployed_to"]) print " === now executing the deploy script” print “, result will be saved as:{0}".format(log_file) command = “ deploy command... “ local(command.format(server_password, log_file, user, portal_server, deployed_to), capture=True)
  11. 例子 4 : Java, Python, Ruby 比较 • Ruby 的配置文件

    (Capistrano) • namespace :deploy do set :use_sudo, true task :start do run "/opt/nginx/sbin/nginx" end task :stop do run "/opt/nginx/sbin/nginx -s stop" end end
  12. 直 感受:可 性 观 读 • 在可 性上, 读 Java

    < Python < Ruby • Ruby 更接近于自然 言 语
  13. 例子 5 Ruby 行 进 Selenium 测试 • 1. admin.html:

    出 导 : java: 182 行 Ruby: 95 行
  14. Java public class Admin { private WebDriver driver; private String

    baseUrl; private StringBuffer verificationErrors = new StringBuffer(); @Before public void setUp() throws Exception { driver = new FirefoxDriver(); baseUrl = "https://admin-qa300.blurdev.com/"; driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); }
  15. Ruby 代码 def setup @driver = Selenium::WebDriver.for :firefox @base_url =

    "https://adminqa300.blurdev.com/" @driver.manage.timeouts.implicit_wait = 30 end
  16. Ruby 使用的工具 (RubyGem) : • 自 化部署: 动 Capistrano •

    自 化 : 动 测试 Selenium, Water • 日常 用自 化: 内置了无数方法 应 动 • google 一下 , 有更多工具等着你~
  17. 与其他 言比 的 : 语 较 结论 • Java ,

    Python 能做的 , Ruby 都能做 • web 开发 • 自 化 动 测试 • 运维 • 代替 SHELL 脚本 • 可 性 最好 读 • 上手 ,适合新手 简单
  18. 缺点: • 除了 JRUBY ,目前只支持 程 单线 • 国内 Ruby

    程序 太少 员 • 速度比 JAVA 慢一点儿,不适合做 3D 的 实时类 游 。 戏
  19. 对QA 人 的建 : 员 议 • 日常操作中 使用 RUBY

    代替 SHELL 脚本 • JAVA 的 目自 化,尽量 是用 项 动 还 Java + selenium. 可以得到技 支持 这样 术