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

  第三個問題:
  瀏覽器的代理有幾下幾種:1.不使用代理。2.自動檢測此網(wǎng)絡的代理設置。3.使用系統(tǒng)代理。4.手動配置代理。5,自動代理配置
  對于1和4大家都明白;對于5也還好是:寫一個腳本告訴瀏覽器什么樣的域名我要代理,其他的不使用代理(具體百度);對于2和3我多少有點不知道他怎么用,對于3使用系統(tǒng)代理我的實踐是如果我啟動了fiddler它使用了fiddler代理,如果沒有啟動不使用代理,看起來挺智能了。我也不太清楚這樣為什么...所以對于問題三我也是糾結(jié)的:第一、如果設置手動代理看起來是沒問題的,怕fiddler故障了,然后雪崩...第二、我著實不太了解我使用系統(tǒng)代理對不對?這個大家自己看好了。我反正用系統(tǒng)代理了,至少能滿足我的想法:萬一fiddler故障了也沒啥,大不了抓不到接口數(shù)據(jù)唄,其他的還能正常的跑....
  后,是在我們上篇繼承unnitest的run方法里面,修改一點點代碼,也很簡單(紅色標識了):
......
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__) # 當前腳本根目錄
#因為fiddler保存盡量要使用路徑,如果使用相對路徑會保存到安裝目錄下,這是我們不希望的
sessiong_path = dir_name + "/" + "Error_session"#默認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"#拿到運行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())#啟動setUp失敗直接判斷出錯
else:
try:
testMethod()
except KeyboardInterrupt:
raise
except (self.failureException,exceptions.WebDriverException):#如果是斷言錯誤或WebDriverException,類型為fail,且增加截圖
#增加截圖
browser=self.getbrowser()#嘗試拿瀏覽器實例
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)#控制臺運行D_interface.exe由AutoIt生成,保存出錯的session
result.addFailure(self, sys.exc_info(),reback_filename)#回傳截圖名稱給report,以便能顯示在報告中
except SkipTest as e:#如果為跳過的異常,類型為Skip異常
......
  后我的demo文檔結(jié)構大概是這樣的:

  其中Error_session是保存錯誤的session;FireFox_profile是我們說到的火狐證書插件;Tools是我們轉(zhuǎn)換的3個簡單的exe程序;screen_shot存放錯誤截圖;IqunxingTest.py是我們改寫的unnitest類,我們新建測試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'''測試CSDN登錄'''
@classmethod
def setUpClass(cls):
profile=firefox_profile.FirefoxProfile(profile_directory=dir_name+"/FireFox_profile")
profile.set_preference("network.proxy.type", 5)#將瀏覽器代理設置為系統(tǒng)代理
cls.browser=webdriver.Firefox(firefox_profile=profile)#啟動帶插件的瀏覽器
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()#點擊登錄
if not browser.find_element_by_class_name("phr_first").is_displayed():#如果沒有登錄成功是找不到這個控件會報錯
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 + """)#啟動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"''')#測試完成后關閉fiddler
  因為我們要找一些有用的sesssion信息,可喜的是Fiddler能過濾一些你設置完的信息,我的過濾信息如下:

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

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

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