第七章 移动自动化持续化集成(下)
? ? ? ? ? ? --------手機(jī)自動(dòng)化之Appium
(4)增加構(gòu)建步驟,這是如何執(zhí)行我們項(xiàng)目工程的命令,如:python src/TestSuites/OnlineTestSuite.py。構(gòu)建的時(shí)候就會(huì)執(zhí)行這個(gè)命令,執(zhí)行測(cè)試用例代碼,同時(shí)我們要構(gòu)建后的操作,就是測(cè)試用例執(zhí)行失敗后的郵件通知。單擊保存按鈕,保存所有設(shè)置。如圖7.3.4所示:
圖7.3.4 增加構(gòu)建操作的構(gòu)建后操作
(5)運(yùn)行測(cè)試用例之前,我們需要先將執(zhí)行測(cè)試用例的手機(jī)連接到服務(wù)器上,通過(guò)adb devices –l能查看到手機(jī)的信息。運(yùn)行appium的服務(wù)端,當(dāng)服務(wù)端啟動(dòng)成功后,方可進(jìn)行其他的操作。
(6)構(gòu)建我們剛剛創(chuàng)建的job,返回項(xiàng)目首頁(yè),單擊左側(cè)的“立即構(gòu)建”按鈕,構(gòu)建我們的工程。當(dāng)然此時(shí),Appium服務(wù)端會(huì)有日志輸出,同時(shí)測(cè)試用例在我們的測(cè)試手機(jī)上開(kāi)始執(zhí)行。如圖:7.3.5所示:
圖7.3.5 構(gòu)建工程
(7)構(gòu)建成功后,jenkins會(huì)根據(jù)測(cè)試用例的執(zhí)行情況來(lái)置相應(yīng)的狀態(tài)。
7.4 Jenkins接入時(shí)問(wèn)題解析
?? 細(xì)心的同學(xué)可能發(fā)現(xiàn)了,將我們第六章的自動(dòng)化測(cè)試工程接入Jenkins中后,不管是測(cè)試用例運(yùn)行是否通過(guò),Jenkins返回都是正常的,這不科學(xué)啊?所以這里面還是存在著一些兒?jiǎn)栴}的,那我們現(xiàn)在就逐一解析一下。
一,? 測(cè)試用例運(yùn)行失敗了,Jenkins不會(huì)報(bào)告,依然是成功的標(biāo)志。
?? 針對(duì)這個(gè)問(wèn)題,我們要了解Jenkins的狀態(tài)設(shè)置的原理。Jenkins是根據(jù)我們?cè)跇?gòu)建步驟中填寫(xiě)的命令的執(zhí)行狀態(tài)來(lái)置成功或是失敗的,可是這就和unittest這個(gè)框架結(jié)合起來(lái)了。我們用unittest運(yùn)行測(cè)試用例的時(shí)候,它會(huì)收集測(cè)試用例的執(zhí)行情況。如果成功了就是一個(gè)句號(hào),如果失敗了就是F,而unitest框架框架最后執(zhí)行結(jié)束后返回的永遠(yuǎn)是0。而有Jenkins來(lái)檢測(cè)的時(shí)候,0代表成功,1代表失敗。
? 所以如果我們想要在測(cè)試用例執(zhí)行有失敗的情況下,Jenkins會(huì)報(bào)錯(cuò)的話(huà),需要修改一下Unittest的運(yùn)行,將suite文件的內(nèi)容改變成下面的樣子:
#-*- coding: UTF-8 -*-
'''
Created on 2015-12-18
?
@author: 58
'''
import unittest
import sys
import os
sys.path.append("..")
sys.path.append(os.getcwd()+"/src/")
from TestCases.LoginTest import LoginTest
from TestCases.RegViewTest import RegViewTest
from TestCases.IndexViewTest import IndexViewTest
class OnlineTestSuite():
??? def test(self):
??????? if __name__ == "__main__":
??????????? #構(gòu)造測(cè)試集?????????????
??????????? suite = unittest.TestSuite()?
??????????? suite.addTest(LoginTest('test_login'))
????????? ??suite.addTest(IndexViewTest('test_indexview'))
??????????? suite.addTest(RegViewTest('test_reg'))
?????????? ?runner = unittest.TextTestRunner()?
??????????? result=runner.run(suite)
???? ???????#如果有測(cè)試用例執(zhí)行失敗,則返回1
??????? if (not result.wasSuccessful()):
??????????????? exit(1)
??????? if __name__ == '__main__':
OnlineTestSuite().test()
二,沒(méi)有具體的測(cè)試報(bào)告,不能詳細(xì)看到每個(gè)測(cè)試用例的執(zhí)行情況。
Unittest不會(huì)產(chǎn)生類(lèi)似于testNG那樣的報(bào)告,所以我們需要借助于第三方的模塊。而Python下產(chǎn)生測(cè)試報(bào)告的模塊叫HTMLTestRunner,通過(guò)這個(gè)模塊來(lái)運(yùn)行測(cè)試用例就能產(chǎn)生報(bào)告。當(dāng)然我們就需要修改TestSuite文件,用HTMLTestRunner運(yùn)行測(cè)試用例,修改后的代碼如下:
import unittest
import sys
import os
import HTMLTestRunner
sys.path.append("..")
sys.path.append(os.getcwd()+"/src/")
from TestCases.LoginTest import LoginTest
from TestCases.RegViewTest import RegViewTest
from TestCases.IndexViewTest import IndexViewTest
class OnlineTestSuite():
??? def test(self):
??????? if __name__ == "__main__":
??????????? #構(gòu)造測(cè)試集?????????????
??????????? suite = unittest.TestSuite()?
??????????? suite.addTest(LoginTest('test_login'))
??????? ????suite.addTest(IndexViewTest('test_indexview'))
??????????? suite.addTest(RegViewTest('test_reg'))
??????????? #定義個(gè)報(bào)告存放路徑,支持相對(duì)路徑。
??????????? filename='./report.html'
??????????? fp=file(filename,'wb')
??????????? runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'APP Auto Test Report',description=u'App AutoTest onLine!')
??????????? result=runner.run(suite) #自動(dòng)進(jìn)行測(cè)試
??????????? if (not result.wasSuccessful()):
??????????????? exit(1)?????
if __name__ == '__main__':
OnlineTestSuite().test()
?
運(yùn)行這個(gè)TestSuite文件后,就能產(chǎn)生一個(gè)測(cè)試報(bào)告,測(cè)試執(zhí)行樣式如圖7.4.1所示:
?
????????????????????????? 圖7.4.1 測(cè)試報(bào)告
三 其他的高級(jí)應(yīng)用???
Jenkins可以定制很多其他應(yīng)用,如定時(shí)執(zhí)行job,觸發(fā)式執(zhí)行job,將我們的測(cè)試報(bào)告以郵件的形式發(fā)送出去等,這些兒內(nèi)容我已在博文:http://blog.sina.com.cn/s/blog_68f262210102wcww.html中進(jìn)行了詳細(xì)的講解,在此我們就再累述,感興趣的同學(xué)可以去參考一下。
7.4 本章小結(jié)
??? 在本章中我們介紹了自動(dòng)化測(cè)試用例執(zhí)行的策略,什么是持續(xù)化集成,還有將我們的自動(dòng)化測(cè)試工程接入到Jenkins當(dāng)中。最后我們可以靈活配置Jenkins,來(lái)達(dá)到我們特殊的需求。到目前為止,我們的移動(dòng)自動(dòng)化測(cè)試Appium+Python教程就完成了,通過(guò)這七章的學(xué)習(xí),完全可以將自己的移動(dòng)自動(dòng)化持續(xù)化集成跑起來(lái)。當(dāng)然后續(xù)還能做好多工作,可以結(jié)合Robot Framework來(lái)做自動(dòng)化測(cè)試(參考:http://www.cnblogs.com/fnng/p/3871712.html)。當(dāng)然還可以做多線程方面的,同時(shí)在多臺(tái)設(shè)備上運(yùn)行測(cè)試用例,有待你去研究和學(xué)習(xí)。
轉(zhuǎn)載于:https://www.cnblogs.com/eagleking0318/p/6520739.html
總結(jié)
以上是生活随笔為你收集整理的第七章 移动自动化持续化集成(下)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ant 脚本打印系统属性变量、ant内置
- 下一篇: javamail 收邮件并解析附件