Shell脚本测试总结-1

上一篇 / 下一篇  2012-10-15 13:36:42 / 个人分类:杂谈

C Jb}2ASwQ[+SG0  1、脚本测试的苦难51Testing软件测试网:S%?L1j!h

51Testing软件测试网X1T[Y'Eu

  因为脚本使用的自由度很大,对于程序员限制很少,功能实现的随意性给测试带来了不少困难。首先,很多Shell脚本编写不规范,没有同意的Shell脚本编程规范,其次,脚本参数配置与程序逻辑混杂,区分不清晰。往往脚本作者同时承担多个开发任务,由于开发周期以及复杂的线上环境等原因,与其他脚本接口的沟通难以面面俱到,导致RD单元测试进行得很不充分。

Y0N-HN`%eC_051Testing软件测试网@&Y!QHr$c6WOb

  2、我们应该如何入手

*{0bc]$yha9gf F051Testing软件测试网.UN\|#`D yp

  首先,代码走查结合动态单步跟踪以及观察日志与文件输出,网络、CPU状态。

!H9P&Z I;bRM0L%z*b{"E0

2m'i"XJ7D5M0  然后,撰写测试桩与驱动,白盒测试保证代码逻辑中循环和分支都能够走到,黑盒测试保证函数和功能脚本接口正确,输入输出符合设计预期。

@9u|6c#i]051Testing软件测试网/M_@n*|w m

  对于异常处理,特别是变量的检查需要特别关注,变量在使用前都需要进行检查,是否为空?或者为0?对于文件名和路径必须检查,确认文件是否存在,路径是否可达之后再进行后续操作。

ocd;`z ]_f051Testing软件测试网%o v"J9X/I&}/^

  另外,需要考虑所依赖的其他功能脚本以及二进制工具,这些功能性单元应该如何使用,调用后的返回会有哪些情况,对于正常和异常结果,脚本是否能够捕捉到并且作出正确的判断。

gf3{ V G_@ O051Testing软件测试网9PwU/J V3L

  3、 静态测试 && 动态测试

![i ]-v4Q.[]3d _051Testing软件测试网8@F|X1K.E

  1)新旧版本代码对比51Testing软件测试网Q _#PjhdPM

i)DX$W#J,D0   可以基于icafe平台的codereview功能查看新旧版本的diff代码行,对比升级点,及时与RD沟通确认,避免遗漏,保证测试的全面性。代码 对比的方式可能局限性比较大,适用于两个连续版本间代码结构无大的改动的情况,很多情况下,新版本的脚本会与之前的版本完全不同,Shell脚本与C语言 模块有一个很大的区别就是,IM 模块C 代码的前后版本实现的承接关系很明显,但是Shell脚本不一定,可能后来的RD会将之前版本的脚本完全推翻。代码结构完全不同,因此在这种情况下,我们 应该直接进入代码走查环节。

'p.~%s'P,x'V-[E)Y[051Testing软件测试网,g@m2j+x6\

  2)代码走查

1V#M }^ q^5m.vr5A0

D Sy3c'HqR0  全面、深入、细致地关注脚本分支、循环逻辑正确性。

w&o+_@)o_ n0

*]f q`2z(e$Eyi0  例 如:retrbs重启脚本,在重启PS平台所有retrbs之后,需要清理PS平台retras cache,新增的启动方式升级分成两种启动方式,normal与continue模式,实际在codereview时发现normal方式重启完成后清 理cache,continue方式重启完成后直接退出,这肯定是有问题的,因为按正常逻辑来说,不管那种启动方式,在重启完成之后都需要清理 cache。

Ey4CX XF051Testing软件测试网4P,Df1Y"Ij t%X

  3)搭建环境

Z3P$~(pN051Testing软件测试网:BgnJ)_8V:o4b

  搭建环境需要了解脚本的运行场景,运行频率,环境依赖以及与其配合的上下文脚本及程序:51Testing软件测试网 R;k*ol:_;QQ

51Testing软件测试网Qa Hh*s

  脚本执行时所处的目录和配置文件51Testing软件测试网!c0_Uh-B

51Testing软件测试网 s,j/j KQ7b"F*Kv

  对应的产品模块功能

2R!LgR9umi k051Testing软件测试网4ljM,{5} o.Fl6Q

  数据的周期性更新

"kw:_wPM8Z:C U0

7iGE UG%p2^0  server间的ssh认证

'[/L&U6_0[$_&i0

+f u wW](I L0  网络通信端口检查51Testing软件测试网O!Pn `3O K g

51Testing软件测试网-[T~'\t3[

  脚本中的使用的工具

~3q'c,^2p8Z u)L}0

YlL}yHB&N v0  脚本硬件要求

&K+@"bl}h#[s0

G!?'E8{M)scuD!z0  比如说:脚本在什么目录下执行,每天几点钟执行,执行的时候需要什么数据以及工具提前准备好,等等。51Testing软件测试网;gk O6PM%h'RR

51Testing软件测试网(zeGJ$z9bac Q

  4、如何调试Shell脚本51Testing软件测试网&lGa4I] d'Ht+V

rY ? f?2x8sQ+\ _0  1)检查语法错误:

q7_L.L ZCA z)q0

4@p#lO.v0  一般来说我们可以通过修改shell脚本的源代码,令其输出相关的调试信息来定位错误,那有没有不修改源代码来调试shell脚本的方法呢?答案就是使用shell的执行选,下面是一些常用选项的用法:51Testing软件测试网g-HQS/|f

yke$Y|%|Rg0  -n 只读取shell脚本,但不实际执行51Testing软件测试网J^+\v!TJ np@

"Ui)ss{2Ny9y5C*H0  -x 进入跟踪方式,显示所执行的每一条命令

!NlA v3CNxq0

}\ze3? te&V7j0  -c “string” 从strings中读取命令51Testing软件测试网B.w,~\%V

51Testing软件测试网 O8V XR)d-W8F0R

  “-n”可用于测试shell脚本是否存在语法错误,但不会实际执行命令。在shell脚本编写完成之后,实际执行之前,首先使用“-n”选项来测试脚本是否存在语法错误是一个很好的习惯。因为某些shell脚本在执行时会对系统环境产生影响,比如生成或移动文件等,如果在实际执行才发现语法错误,您不得不手工做一些系统环境的恢复工作才能继续测试这个脚本。51Testing软件测试网2L@b B.TT @t

51Testing软件测试网@^3u$N3_8z


RX,IX$Za"R2a_ [9r0

t(@ wf~|3~h7^0

!O^:g Q,[1? kux#c0  “-c”选项使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令。当需要临时测试一小段脚本的执行结果时,可以使用这个选项,如下所示:51Testing软件测试网-pw Gn F7j8_Te

51Testing软件测试网9I Ei"sB8n7a CYQ

  sh -c ‘a=1;b=2;let c=$a+$b;echo “c=$c”‘51Testing软件测试网h/g*L,Kc(M^z

51Testing软件测试网,q L\FX8v)UV+u

  “-x”选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令 行显示出来,并且在行首显示一个”+”号。 “+”号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。 “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。

[dK+a$O*pu051Testing软件测试网H KI~#t ]

  2)调试工具-bashdb

U%AB7zt/{%}051Testing软件测试网e$^HZokIJ6H"F Wq

  使用shell调试器bashdb,这是一个类似于GDB的调试工具,可以完成对shell脚本的断点设置,单步执行,变量观察等许多功能。51Testing软件测试网&F#}3k#J0k

3b/o1Ey}6?0  使用bashdb进行debug的常用命令

AMSUS#r7^#Q"a051Testing软件测试网3ImUR*w,d

  (1)列出代码和查询代码类:

7o X#hU zb,@,@0

,F7I0_PfO0  l   列出当前行以下的10行51Testing软件测试网$SQt {pJ

51Testing软件测试网$_/e m,mlr

  -   列出正在执行的代码行的前面10行51Testing软件测试网OY ew5cWOP

'z^m+nn0  .   回到正在执行的代码行51Testing软件测试网"J2X`RZv

51Testing软件测试网3N0q.Z(d6h[scn

  w  列出正在执行的代码行前后的代码51Testing软件测试网:uqT6|5|W5\

$FMsa:],W7A;Mu0  /pat/  向后搜索pat51Testing软件测试网7al"mIJ!`O8J

'z/}}r-`PKw0  ?pat?向前搜索pat

2X U9xn"G051Testing软件测试网&u9O:|Ac&g

  (2)Debug控制类:51Testing软件测试网 EF%S#q?

51Testing软件测试网}k xOBW)bXa

  h  帮助

h#fIjihr0

(@CW#B?!duQI0  help 命令  得到命令的具体信息51Testing软件测试网TUcJ g|2}.K[F

51Testing软件测试网%Tf!o d!ke)|

  q  退出bashdb51Testing软件测试网*zZ}J1\0v5C_

Dhh2ue)~"C c0  x 算数表达式  计算算数表达式的值,并显示出来51Testing软件测试网.R}3W0|+?A-X kZ

x"t5j%xZr}5h0  !!空格Shell命令 参数  执行shell命令51Testing软件测试网i%V(UH:G9tK

S{#](h:E*FSu8P9~0  使用bashdb进行debug的常用命令(cont.)

v7E {7i1QS&UY r5OW0

6nKq Mb,E%w3H0  控制脚本执行类:51Testing软件测试网 mI4ctLI%^

51Testing软件测试网:P'z{;@4|(H

  n   执行下一条语句,遇到函数,不进入函数里面执行,将函数当作黑盒51Testing软件测试网;@ISdYX e

51Testing软件测试网lf&U YqH6KC

  s n  单步执行n次,遇到函数进入函数里面

,mRTKw'PA$z'U0

+v] ~;d+PmA0  b 行号n  在行号n处设置断点51Testing软件测试网)K1u:z/@"c#x*Kk

n*nhn#u0  del 行号n 撤销行号n处的断点

4} q3F?`:B/f9R#y0

V#l$_npV Id0  c 行号n 一直执行到行号n处

h%vdt&B;Q0

(a,A9`2C(@o Y0  R  重新启动

DW#E*?jB7hm051Testing软件测试网o ['L~2v_

  Finish 执行到程序最后51Testing软件测试网!}R!Nf/f0zp

'W/M!T1W&r^5fx0  cond n expr 条件断点51Testing软件测试网m ]1Lz"s#ME,a f

51Testing软件测试网%^N%u Be\ cS"?

  5、脚本测试的基本流程

_s P*oi2a051Testing软件测试网(_A7y"`` M?1wO T!L [n

  1)静态代码检查51Testing软件测试网?!uL,t;l2F!zR

eaUYA%r^h{$]*n0  2)单元测试1:针对每个功能函数撰写驱动和桩,验证所有分支51Testing软件测试网Q"KcA!vd"C#j*~4\

51Testing软件测试网KESN0s

  ● 确认每个配置项以及设计的文件目录是否在使用前进行检查

$A:y.I{Jn\:p&j.{0

*U6zN&uSM:}u s0  ● 确认所有的变量没有向外传播的危险

X!B7p`;P#L0

z8zK9o!SR0  ● 确认所产出的临时文件没有泄露,脚本自己会负责处理掉临时文件51Testing软件测试网.U)B C+Z1Yb^9BD h


TAG:

 

评分:0

我来说两句

Open Toolbar