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