Slide 1

Slide 1 text

RUBY: 新 言的代表 兴语 ● 可 性更好 读 : File.read(“some_file.txt”) ● 代 更少: 码 JAVA 代 的 码 1/3 ~ 1/5 ● 文档丰富,社区火爆,各 工具 出不 种 层 穷 ● JAVA 者 终结 ● 缺点 1 : RUBY 程序 太少 员 ● 缺点 2 : 英文要求高(文档全英文) 对

Slide 2

Slide 2 text

例子 1 :部署 ● 我要做一次部署,人肉的 是: 步骤 ● 1. 从 GIT 下 代 到本地 载 码 ● 2. 上 最新代 到服 器 传 码 务 ● 3. 做某些 服 器 境的 置(数据 等) 针对 务 环 设 库 ● 4. 重启服 器 务 ● 5. 万一出 了,回 到前一个版本 错 滚 .

Slide 3

Slide 3 text

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? 度太大 实现难

Slide 4

Slide 4 text

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...

Slide 5

Slide 5 text

例子 2 :替 某些文本 换 ● 在 去的一个 目中,由于服 器的某个 置 过 项 务 设 问 , 次部署的 候,都需要修改 题 每 时 4 个 css 文 件,一个 js 文件,和 3 个文本文件,它 要 们 做的事情都是一个: ● 把 url(“some_image_path”) ● 替 成 换 url(“sub_uri/some_image_path”)

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

RUBY 脚本 content = File.read(“application.css”) File.write(“application.css”, 'w') do |file| file.puts content.gsub “url(“, “url(/sub_uri/” end

Slide 8

Slide 8 text

例子 3 : 找包含特定字符的文件 查 ● SHELL: find . -name \*.rb -print0 | xargs -0 grep some_method ● RUBY: (注意可 性) 读 dir['**/*.rb'].search(/some_method/)

Slide 9

Slide 9 text

: 大部分 候,用 结论 绝 时 RUBY ● http://stackoverflow.com/questions/2342894/ruby-or- python-instead-of-shell ● 极其 的情况可以使用 简单 纯shell: $ who | grep -i admin | cut -c10-20 ● 其他情况,全用 RUBY :

Slide 10

Slide 10 text

例子 4 : Java, Python, Ruby 比较 ● java 的配置文件 (Maven) org.seleniumhq.selenium selenium-java 2.25.0 com.opera operadriver

Slide 11

Slide 11 text

例子 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)

Slide 12

Slide 12 text

例子 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

Slide 13

Slide 13 text

直 感受:可 性 观 读 ● 在可 性上, 读 Java < Python < Ruby ● Ruby 更接近于自然 言 语

Slide 14

Slide 14 text

例子 5 Ruby 行 进 Selenium 测试 ● 1. admin.html: 出 导 : java: 182 行 Ruby: 95 行

Slide 15

Slide 15 text

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); }

Slide 16

Slide 16 text

Ruby 代码 def setup @driver = Selenium::WebDriver.for :firefox @base_url = "https://adminqa300.blurdev.com/" @driver.manage.timeouts.implicit_wait = 30 end

Slide 17

Slide 17 text

Ruby 使用的工具 (RubyGem) : ● 自 化部署: 动 Capistrano ● 自 化 : 动 测试 Selenium, Water ● 日常 用自 化: 内置了无数方法 应 动 ● google 一下 , 有更多工具等着你~

Slide 18

Slide 18 text

与其他 言比 的 : 语 较 结论 ● Java , Python 能做的 , Ruby 都能做 ● web 开发 ● 自 化 动 测试 ● 运维 ● 代替 SHELL 脚本 ● 可 性 最好 读 ● 上手 ,适合新手 简单

Slide 19

Slide 19 text

缺点: ● 除了 JRUBY ,目前只支持 程 单线 ● 国内 Ruby 程序 太少 员 ● 速度比 JAVA 慢一点儿,不适合做 3D 的 实时类 游 。 戏

Slide 20

Slide 20 text

对QA 人 的建 : 员 议 ● 日常操作中 使用 RUBY 代替 SHELL 脚本 ● JAVA 的 目自 化,尽量 是用 项 动 还 Java + selenium. 可以得到技 支持 这样 术

Slide 21

Slide 21 text

大家! 谢谢 ●