自动化测试属于软件测试的一部分,QTP、LoadRunner等都可以编写自动化测试脚本,但是QTP、LoadRunner等工具毕竟还需要人工操作,在持续集成思想下,软件应该自动发布并且自动测试,这样可以加快软件的开发测试周期,及时发现软件错误。持续集成应该包括代码的自动化检查、版本的自动化发布、以及程序的自动化测试。在自动化测试之外,再辅助以人工测试。
在我负责的项目中,代码自动化检查采用了SVN+CheckStyle实现,前文已有介绍,版本自动化发布采用了Jenkins或者crontab+Ant脚本自动发布,而自动化测试则采用了Xvfb+Selenium+Firefox实现,该框架主要实现对BS架构程序的测试,如采用Appnium则也可以实现对手机软件的测试,如结合python或其他脚本语言,则可以将测试结果直接发布到Jira等任务平台上,实现持续集成全过程管理。
因为BS架构程序客户端采用浏览器,所以多数是在Windows环境下搭建自动化环境,但事实上目前linux已经成为主流服务器,而服务器版本linux是没有桌面的,如果执行Firefox会出现No display specific的错误。以下即是在服务器版本linux上搭建无图形的自动化测试环境的过程:
1、安装Xvfb[[emailprotected]~]cd/tmp
[[emailprotected]tmp]wget/6.5/os/x86_64/Packages/xorg-x11-server-Xvfb-1.13.0-23.el6.centos.x86_64.rpm
[[emailprotected]tmp]yumlocalinstallxorg-x11-server-Xvfb-1.13.0-23.el6.centos.x86_64.rpm
运行Xvfb命令:[[emailprotected]tmp]sudoXvfb:10-screen01024x768x24-ac-nolistentcp-extensionRANDR&
运行起来后如下,表明无图形Xvfb已经安装成功:[1]26955
[[emailprotected]tmp]#Initializingbuilt-inextensionGenericEventExtension
Initializingbuilt-inextensionSHAPE
Initializingbuilt-inextensionMIT-SHM
Initializingbuilt-inextensionXInputExtension
Initializingbuilt-inextensionXTEST
Initializingbuilt-inextensionBIG-REQUESTS
Initializingbuilt-inextensionSYNC
Initializingbuilt-inextensionXKEYBOARD
Initializingbuilt-inextensionXC-MISC
Initializingbuilt-inextensionSECURITY
Initializingbuilt-inextensionXINERAMA
Initializingbuilt-inextensionXFIXES
Initializingbuilt-inextensionRENDER
Initializingbuilt-inextensionRANDR
Initializingbuilt-inextensionCOMPOSITE
Initializingbuilt-inextensionDAMAGE
Initializingbuilt-inextensionMIT-SCREEN-SAVER
Initializingbuilt-inextensionDOUBLE-BUFFER
Initializingbuilt-inextensionRECORD
Initializingbuilt-inextensionDPMS
Initializingbuilt-inextensionX-Resource
Initializingbuilt-inextensionXVideo
Initializingbuilt-inextensionXVideo-MotionCompensation
Initializingbuilt-inextensionSELinuxInitializingbuilt-inextensionGLX
2、安装Firefox
其次,拷贝到 /usr/local目录下并解压:[[emailprotected]tmp]mvFirefox**.tar.gz/usr/local
[[emailprotected]tmp]cd/usr/local/
[[emailprotected]local]tar-jxvfFirefox**.tar.gz
[[emailprotected]local]cdFirefox
[[emailprotected]Firefox]exportDISPLAY=:10
[[emailprotected]Firefox]./firefox-new-&
(1)运行后,发现如下错误:(crashreporter:26367):Pango-WARNING**:failedtochooseafont,expectuglyoutput.
engine-type=‘PangoRenderFc‘,script=‘common‘
因此需要安装dejavu相关字体:[[emailprotected]Firefox]yuminstalldejavu-sans-fonts.noarchdejavu-serif-fonts.noarch
(2)重新执行后,仍然有错误:process26494:D-Buslibraryappearstobeincorrectlysetup;failedtoreadmachineuuid:
Failedtoopen"/var/lib/dbus/machine-id":
Seethemanualpagefordbus-uuidgentocorrectthisissue.
D-Busnotbuiltwith-rdynamicsounabletoprintabacktrace
需要安装dbus,然后生成机器码:[[emailprotected]Firefox]yuminstalldbus
[[emailprotected]Firefox]dbus-uuidgen>/var/lib/dbus/machine-id
再次执行后发现已经可以正常启动:[[emailprotected]Firefox]ps-ef|grepfirefox
root2721827215017:36pts/300:00:24/usr/bin/firefox-foreground
3、安装PYTHON+SELENIUM
编写自动化测试脚本的方式很多,采用Python和Selenium可以实现各种复杂的自动化测试,因此在我的项目中主要采用Python和Selenium实现自动化测试。
安装PYTHON的方式省略,安装Selenium如下:
[[emailprotected]~]pipinstallselenium
4、验证自动化测试环境[[emailprotected]~]#python
Python2.7.9(default,Feb4,15:09:20)
[GCC4.4.70313(RedHat4.4.7-16)]onlinux2
Type"help","copyright","credits"or"license"formoreinformation.
>>>importselenium
>>>fromseleniumimportwebdriver
>>>mon.keysimportKeys
>>>mon.exceptionsimportNoSuchElementException,TimeoutException
>>>browser=webdriver.Firefox()
>>>browser.get("
>>>t=browser.find_element_by_xpath("//div[contains(@id,‘ftCon‘)]")
>>>t.text
u‘\u624b\u673a\u767e\u5ea6\n\u5feb\u4eba\u4e00\u6b65\n\u767e\u5ea6
\u7cef\u7c73\n\u4e00\u5143\u5927\u9910\n\u628a\u767e\u5ea6\u8bbe\u4e3a\u4e3b\u9875
\u5173\u4e8e\u767e\u5ea6AboutBaidu\n\xa9Baidu
\u4f7f\u7528\u767e\u5ea6\u524d\u5fc5\u8bfb
\u610f\u89c1\u53cd\u9988\u4eacICP\u8bc1030173\u53f7
\n\u4eac\u516c\u7f51\u5b89\u590711000002000001\u53f7‘
如上,已经成功获得百度网站的页面数据,表明测试环境已经搭建成功,可以进行交互式测试。
6、通过Selenium+Firefox实现交互式测试
例如:importselenium
fromseleniumimportwebdriver
mon.exceptionsimportNoSuchElementException,TimeoutException
mon.keysimportKeys
deftestPage():
pages=[1,]
pageTotalNum=1
browser.get(dataUrl)
browser=webdriver.Firefox()
listFoot=browser.find_element_by_class_name("list-foot")
iflistFootisNone:
returnNone
pageTags=listFoot.find_elements_by_tag_name("a")
ifpageTagsisNone:
returnNone
pageTotalNum=len(pageTags)-2
foriinrange(0,pageTotalNum):
nextPage=i+2
ifi
print"%dclick"%nextPage
pageTags[nextPage].click()
pages.append(nextPage)
if__name__==‘__main__‘:
testPage()
通过以上步骤,搭建了linux服务器环境下的自动化测试环境,已经可以帮助项目加快测试进度,减少软件错误,此可供极限编程、敏捷开发的项目团队借鉴。
原文:http://casey./9994043/1763141