shell - sihanjishu

Download Report

Transcript shell - sihanjishu

QA Bash 公用函数库介绍
•
•
阿里巴巴 ASC-QA
黄延胜
简介
• QA bash函数库是一种脚本管理框架系统。
• 它可以完成脚本的管理,把脚本管理纳入到
svn
• 它包含很多的使用功能。以函数提供。可以选
择性加载到当前shell
• 它可以完成对应用的封装,降低难度,提高效
率。
• 它可以对测试流程进行规范。
• 共享与积累代码
• 可供二次开发
• 自动加载特定的功能,自动更新
Bash的优势
• Bash是系统自带的。通用性较好。
• 工作环境处于shell中,能够实现和系统的
最紧密结合。
• Bash简单易用
Bash的缺点
• 对底层的支持不够。比如高级正则匹配。
xml数据操作。
• 控制逻辑相对简单。
• 大量的实现,需要依赖第三方的程序。没
有类,没有包,没有模块概念。这点是
bash的致命弱点。
• Bash本就不为程序设计而生。
Function的妙用
• 函数的执行优先级>命令
• 函数可以非常方便的被定义,并被集合到
一个文件中
• 函数可以被动态的加载到当前的shell
函数库的技术基础
•
•
•
•
Bash+function
封装,复用,模块化
Svn
特殊设计的加载流程
从kill进程中想到的
• Ps –x|grep baidu
• Kill 22939
关注你的重点---定制自己的命令
• Ps –x|grep baidu
• Kill 22939
• pkk baidu
• Pkk google baidu
由此产生的联想
•
•
•
•
•
•
Kill进程(进程keyword)
编译isearch(tags)
批量运行isearch(isearch路径,机器列表)
性能测试(并发数,数据,url)
性能监控(进程keyword)
自动化测试(输入数据,期望结果)
需求
• Write here,everywhere use
• One write , all use
• Once write , reuse more
• QA函数库结果介绍
目前的文件结构
• http://svn.alibaba-inc.com/repos/ali_QA/04
测试技术/B2B-QA-BST/虚拟技术小组/项目
/QA
Qa函数库加载流程图
Bash_profile
Bashrc
/etc/bashrc
Seven.sh
$USER.sh
$USER.sh
$USER.sh
isearch.sh
Wp.sh
QA函数库实现细节
QA环境设置
$USER 环境设置
QA函数定义
$USER 函数定义
QA_init
$USER init
QA_load
QA_config
Load 项目文件
Load 项目文件
加载方式
• 加载最新函数库。eval "`curl
http://sihanjishu.googlecode.com/svn/trunk
/QA/script/seven.sh 2>/dev/null`";
• 长期使用:QA_install
命令列表
•
•
•
•
•
•
•
常用功能:pf pkk rsa
批量自动化操作:Gexec Gscp Gsyn
自身设置:public_install,QA_install
性能测试:Abenchload httpload
进程性能监控:simon_*系列
实际应用:机器预定,screen共享,svn文件传送
提醒设置:短信提醒,旺旺提醒,邮件提醒
• QA函数库的使用
实现
• 登陆自动加载,自动更新
• 机器环境检查
• 使用函数库中的函数,进行各种应用,日
常工作,功能测试,性能测试等
• 管理自己的脚本。纳入函数库的管理
• 加载非公共函数库。白盒测试,其他人的
脚本等。
像命令一样使用函数
• Shell支持执行函数
• 使用前看说明。Man gexec
• Gexec qa1 qa2 hostname
主机的标示
• 采用函数与代码复用的优点
• Gexec gsyn gscp rsa
• 函数库中的命令,支持四种类型的主机识
别。
• Qa16.asc.cnz.alibaba-inc.com
• Qa16
• 10.20.137.22
• 22
常用命令演示
•
•
•
•
Rsa 打通多台服务器rsa qa16 qa17 38
S ssh别名,ss 使用screen
Email 发送邮件
Gexec 批量执行,gsyn 同步
让交互的程序自动化
• << 文档字符串。可以实现对序列化输入的
操作自动化。例子,levin的启动。
• Expect,autoexpect
• Sevenexpect实现了对expect简单的封装。
可以指定任何的关键词和对应的输入动作。
sevenexpect -p love -a yes
自动化举例
• 使用EOF
• sevenexpect -p love -a yes -p buy -a yes
Screen共享
•
•
•
•
异地协作
Ss 进入自己的screen。
Ss dinglh: 连接别人的screen
Screen_share dinglh:发共享screen消息
给其他人
url编码
• Urlquote
• Unurlquote
白盒测试
• Load cpptest
•
http://www.51testing.com/?uid-13997-action-viewspace-itemid-87156
• QA_coverage (演示拼写纠错项目代码覆盖
率检测)
性能监控系列函数
• 用于监控进程级的性能指标
• Simon_common 通用的函数,包含了大部
分的监控。可通过svn更新数据。可以实现
在阿里巴巴的监控服务器上监控百度的服
务器性能。
• Man simon_common
性能测试
• Abenchload
• Httpload
• 通过函数的定义,可以实现对性能测试工
具的封装。让工具透明。
3500
60
3000
50
2500
40
2000
30
1500
20
1000
10
500
0
0
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16 17 18 19 20
qps
平均响应时间
cpu_busy
自定义加载其他项目脚本
• 在脚本中自动加载。load 可以用来加载其
他的项目所用到的脚本。
• 临时加载最新的svn文件。load isearch
• QA函数库高级使用
Python ruby嵌入
函数重载(自定义配置)
• 创建$USER.sh。
• 加入自己的变量定义与环境设置,(比如
定义自己的旺旺号码,很多命令都是有旺
旺通知功能的,只有设置了自己的旺旺号
码才发的。)
• 加入重名的函数进行替换重载(非严格意
义的重载)
代码积木 (进行二次开发)
• Abenchloadm 使用abench加压,加压,保
存simon图,保存日志,分析日志,保存配
置,发送短信
• 代码参见文件内容 man abenchloadm
• 代码解析
Abenchloadm演示
脚本代码编写新方式
• 通过引用来增强功能。类似ruby的gem模式。
• 通过网络引用
• 通过文件引用
用户中心(个人脚本管理)
• 加载特定项目脚本。使用方法load isearch
wp.sh
• Svn_usr test.sh 上传个人的脚本文件
• QA_tmp tmp.txt 传送临时的文件到svn。
• QA_install 在本机配置qa函数库环境。
• QA_update 自动更新(默认是自动更新的)
函数库的使用情况
• http://spreadsheets.google.com/pub?key=t
XQVTSXbPFJFT0cnyZKy7w&output=html
• QA函数库使用情况统计
期待你的参与
• 我们仍旧有大量的应用和操作没有进行规
范和自动化。通过函数库可以有效减少做
项目的自由度,增加严谨和可控度。
• 每个人在工作中都会积累一些经验技巧。
欢迎大家分享自己的脚本,并把它通用化,
加入到qa函数库中
• 函数编写例子。包含编写者的名字,编写
时间。基本介绍和命令举例。
代码编写规范
脚本编写方法
目的与
介绍
用法
代码
• 拿什么送给你
可供借鉴的优点
•
•
•
•
•
脚本管理与加载的方法
Svn的利用
函数式编程,抛弃脚本式编程
可通用的脚本
封装的思想
函数库的意义
• 我们会因为函数库而逐渐专业。Shell将是
QA重要的优势。
• 函数式编程将会对个人的成长产生巨大的
飞跃。每天领先一小步。还依赖基本命令
的人,将会落后。
• DIY思想。对系统机制的深入,对各种命令
的个性化定制与封装。在DIY中会更加专业。
• 封装,积累的思想
• 这个互联网上,还没有人能做到我们这样。
• 我们会成为全公司最精通bash的人。
研究方向
• 测试管理,测试计划,测试用例。
• Bugfree,trac,wiki,测试数据准备
测试前:
• 测试执行,过程监控
• 测试自动化,测试流程化,规范化。
• Simon,ganglia,自动化脚本,watir,pidstat,数据库监控,进程监控,
服务器状态监控,日记。
测试中:
• 测试分析,测试总结,测试报告
• 测试结果收集,测试结果分析,simon,excel图表,结果分析,日志分析。
测试后:
QA函数库未来设想
xx部门脚本库
BST
xx部门脚本库
平台测试
Bash函数库
xx部门脚本库
运维
Thanks
谦逊,勤奋,持续改进
谦逊的工作态度
•
•
•
•
关心彼此,互帮互助
不要贪慕虚荣,不要自以为是
低调,冷静,睿智
专注,专业,专心。