您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 > Selenium
如何記錄Selenium自動(dòng)化測(cè)試過程中接口的調(diào)用信息
作者:不再有的年月 發(fā)布時(shí)間:[ 2017/4/13 13:43:43 ] 推薦標(biāo)簽:Selenium 功能測(cè)試 自動(dòng)化測(cè)試

  第三個(gè)問題:
  瀏覽器的代理有幾下幾種:1.不使用代理。2.自動(dòng)檢測(cè)此網(wǎng)絡(luò)的代理設(shè)置。3.使用系統(tǒng)代理。4.手動(dòng)配置代理。5,自動(dòng)代理配置
  對(duì)于1和4大家都明白;對(duì)于5也還好是:寫一個(gè)腳本告訴瀏覽器什么樣的域名我要代理,其他的不使用代理(具體百度);對(duì)于2和3我多少有點(diǎn)不知道他怎么用,對(duì)于3使用系統(tǒng)代理我的實(shí)踐是如果我啟動(dòng)了fiddler它使用了fiddler代理,如果沒有啟動(dòng)不使用代理,看起來挺智能了。我也不太清楚這樣為什么...所以對(duì)于問題三我也是糾結(jié)的:第一、如果設(shè)置手動(dòng)代理看起來是沒問題的,怕fiddler故障了,然后雪崩...第二、我著實(shí)不太了解我使用系統(tǒng)代理對(duì)不對(duì)?這個(gè)大家自己看好了。我反正用系統(tǒng)代理了,至少能滿足我的想法:萬(wàn)一fiddler故障了也沒啥,大不了抓不到接口數(shù)據(jù)唄,其他的還能正常的跑....
  后,是在我們上篇繼承unnitest的run方法里面,修改一點(diǎn)點(diǎn)代碼,也很簡(jiǎn)單(紅色標(biāo)識(shí)了):
......
def run(self, result=None):
orig_result = result
if result is None:
result = self.defaultTestResult()
startTestRun = getattr(result, 'startTestRun', None)
if startTestRun is not None:
startTestRun()
self._resultForDoCleanups = result
screenshot_path=getattr(result,"screenshot_path",F(xiàn)alse)
dir_name = os.path.dirname(__file__) # 當(dāng)前腳本根目錄
#因?yàn)閒iddler保存盡量要使用路徑,如果使用相對(duì)路徑會(huì)保存到安裝目錄下,這是我們不希望的
sessiong_path = dir_name + "/" + "Error_session"#默認(rèn)session保存路徑
if not screenshot_path:
screenshot_path=self.__screenshot_path
else:
if os.path.dirname(screenshot_path):#如果是路徑
sessiong_path=os.path.dirname(screenshot_path)+"/Error_session"#拿到運(yùn)行test的根目錄+FiddlerSessions
result.startTest(self)
testMethod = getattr(self, self._testMethodName)
if (getattr(self.__class__, "__unittest_skip__", False) or
getattr(testMethod, "__unittest_skip__", False)):
# If the class or method was skipped.
try:
skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
or getattr(testMethod, '__unittest_skip_why__', ''))
self._addSkip(result, skip_why)
finally:
result.stopTest(self)
return
try:
success = False
try:
self.setUp()
except SkipTest as e:
self._addSkip(result, str(e))
except KeyboardInterrupt:
raise
except:
result.addError(self, sys.exc_info())#啟動(dòng)setUp失敗直接判斷出錯(cuò)
else:
try:
testMethod()
except KeyboardInterrupt:
raise
except (self.failureException,exceptions.WebDriverException):#如果是斷言錯(cuò)誤或WebDriverException,類型為fail,且增加截圖
#增加截圖
browser=self.getbrowser()#嘗試拿瀏覽器實(shí)例
if browser:
filename=self.__class__.__name__+"_"+self._testMethodName+".png"#格式:類名+方面名稱
browser.get_screenshot_as_file(screenshot_path+"\"+filename)
reback_filename=filename
else:
reback_filename=None
#保存sessions數(shù)據(jù)
sessionfile_name=self.__class__.__name__+"_"+self._testMethodName+"_err.saz"#注意格式是saz
os.popen(dir_name+"/"+"Tools/D_interface.exe "+sessiong_path+"\"+sessionfile_name)#控制臺(tái)運(yùn)行D_interface.exe由AutoIt生成,保存出錯(cuò)的session
result.addFailure(self, sys.exc_info(),reback_filename)#回傳截圖名稱給report,以便能顯示在報(bào)告中
except SkipTest as e:#如果為跳過的異常,類型為Skip異常
......
  后我的demo文檔結(jié)構(gòu)大概是這樣的:

  其中Error_session是保存錯(cuò)誤的session;FireFox_profile是我們說到的火狐證書插件;Tools是我們轉(zhuǎn)換的3個(gè)簡(jiǎn)單的exe程序;screen_shot存放錯(cuò)誤截圖;IqunxingTest.py是我們改寫的unnitest類,我們新建測(cè)試demo腳本:
#coding=utf-8
import IqunxingTest
import HTMLTestRunner
import sys,os
import unittest
from  selenium import webdriver
from  selenium.webdriver.firefox import firefox_profile
import time
dir_name = os.path.dirname(__file__)  # 拿到根目錄
class Mydemo(IqunxingTest.IqunxingTest):
u'''測(cè)試CSDN登錄'''
@classmethod
def setUpClass(cls):
profile=firefox_profile.FirefoxProfile(profile_directory=dir_name+"/FireFox_profile")
profile.set_preference("network.proxy.type", 5)#將瀏覽器代理設(shè)置為系統(tǒng)代理
cls.browser=webdriver.Firefox(firefox_profile=profile)#啟動(dòng)帶插件的瀏覽器
cls.browser.implicitly_wait(10)
@unittest.Myskip
def test1(self):
u'''打開csdn'''
browser=self.browser
browser.get("http://www.csdn.net/")
@unittest.Myskip
def test2(self):
u'''csdn登錄'''
os.popen(dir_name+"/"+"Tools/C_interface.exe")#在test開始前,清空Fiddler session信息
browser = self.browser
browser.find_element_by_link_text(u"登錄").click()
time.sleep(1)
browser.find_element_by_id("username").send_keys("test")
time.sleep(1)
browser.find_element_by_id("password").send_keys("test")
time.sleep(1)
browser.find_element_by_class_name("logging").click()#點(diǎn)擊登錄
if not browser.find_element_by_class_name("phr_first").is_displayed():#如果沒有登錄成功是找不到這個(gè)控件會(huì)報(bào)錯(cuò)
self.assertTrue(False,"login failed")
if __name__ == '__main__':
fiddler_path = "C:Program Files (x86)Fiddler2Fiddler.exe"#您的Fiddler路徑
s = os.popen(dir_name + "/Tools/S_interface.exe " + """ + fiddler_path + """)#啟動(dòng)Fidder
module_name=os.path.basename(sys.argv[0]).split(".")[0]
module=__import__(module_name)
runner=HTMLTestRunner.HTMLTestRunner("reprot.html")
all_suite=unittest.defaultTestLoader.loadTestsFromModule(module)
runner.run(all_suite)
os.popen('''taskkill /f /im "Fiddler.exe"''')#測(cè)試完成后關(guān)閉fiddler
  因?yàn)槲覀円乙恍┯杏玫膕esssion信息,可喜的是Fiddler能過濾一些你設(shè)置完的信息,我的過濾信息如下:

  因?yàn)闇y(cè)試CSDN,所以我只展示域名為*.csdn.net的會(huì)話;另外,一些css,js,png等無(wú)用信息我也隱藏了(正則表達(dá)式隱藏)。好了萬(wàn)事具備,我們運(yùn)行下這個(gè)demo:后在Error_session下保存了我們test2操作的所有http信息文件名為:Mydemo_test2_err.saz(過濾的除外),同時(shí)在screen_shot下保存錯(cuò)誤的截圖。我們直接用fiddler打開這個(gè)saz文件:

  從上面的截圖可以看出來,我們保存的session是完整的(過濾的除外)。而且我們看到了我們點(diǎn)擊登錄時(shí),使用的接口以及傳遞的相關(guān)信息。當(dāng)然,我們點(diǎn)擊Fiddler其他標(biāo)簽事能獲取一切我們想獲取的信息。
  這一節(jié)我的思路說完了...當(dāng)然,你可能用不上這些,但是你至少了解到了AutoIt以及selenium的一些知識(shí)!還是那句:如果認(rèn)為我說的有些道理,我的辛苦是值得的(畢竟寫了);如果認(rèn)為沒用,請(qǐng)一笑而過~~

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd