自動化測試
對程序的回歸測試更方便。 由於回歸測試的動作和用例是完全設計好的,測試期望的結果也是完全可以預料的,將回歸測試自動運行...
可以運行更加繁瑣的測試 自動化測試的一個明顯好處就是可以在很短的時間內運行更多的測試。學習自動化測試最終目的是應用到實際項目中,本篇將介紹大家自動化測試框架:
- 項目目錄結構:

- 基本類模塊代碼
#大牛測試 #qq:2574674466 #基本類 from Common.Log import framelog class base(): def __init__(self,driver): self.driver = driver self.log = framelog().log() self.log.info("info") #把八大定位放在一個函數里面 def find_ele(self,dic): #傳遞過來字典第一個即為定位方式 by =list(dic.keys())[0]; print("by"+by) #傳遞過來字典第二個為具體的元素 ele=list(dic.values())[0]; self.log.info("id") self.log.info("元素"+ele) try: if by == 'id': return self.driver.find_element_by_id(ele) elif by == 'name': return self.driver.find_element_by_name(ele) elif by == 'className': return self.driver.find_element_by_class_name(ele) elif by== 'linktext': return self.find_element_by_link_text(ele) elif by == 'partial': return self.find_element_by_partial_link_text(ele) elif by == "css": return self.driver.find_element_by_css_selector(ele) elif by == "xpath": return self.driver.find_element_by_xpath(ele) else: return self.driver.find_element_by_tag_name(ele) except: return None #輸入值 def send_key(self,ele): print(ele) return self.find_ele(ele) #后退 def back(self): self.driver.back() #前進 def forword(self): self.driver.forward() #當前窗口url def url(self): self.driver.current_url
- 數據模塊-讀取excel操作:
import xlrd,os #大牛測試 #qq:2574674466 #基本類 #讀excel操作、所有數據存放字典中 #filename為文件名 #index為excel sheet工作簿索引 def read_excel(filename,index): xls = xlrd.open_workbook(filename) sheet = xls.sheet_by_index(index) print(sheet.nrows) print(sheet.ncols) dic={} for j in range(sheet.ncols): data=[] for i in range(sheet.nrows): data.append(sheet.row_values(i)[j]) dic[j]=data return dic
- log模塊日志封裝:
#大牛測試 #qq:2574674466 #基本類 import logging,time from Common.function import projectPath class framelog(): def __init__(self, logger=None): # 創建一個logger self.logger = logging.getLogger(logger) self.logger.setLevel(logging.DEBUG) # 創建一個handler,用於寫入日志文件 self.log_time = time.strftime("%Y_%m_%d_") #路徑需要修改 self.log_path = projectPath()+"/Logs/" self.log_name = self.log_path + self.log_time + 'log.log' print(self.log_name) fh = logging.FileHandler(self.log_name, 'a', encoding='utf-8') fh.setLevel(logging.INFO) # 定義handler的輸出格式 formatter = logging.Formatter('[%(asctime)s] %(filename)s->%(funcName)s line:%(lineno)d [%(levelname)s]%(message)s') fh.setFormatter(formatter) self.logger.addHandler(fh) # 添加下面一句,在記錄日志之后移除句柄 # self.logger.removeHandler(fh) # 關閉打開的文件 fh.close() def log(self): return self.logger
- PO車次預定模塊實現:
#大牛測試 #qq:2574674466 #車次預定模塊 from Base.base import base import time class bookPage(base): #預定車票 def book(self): return self.by_xpath("//*[@id='tbody-01-K5260']/div[1]/div[6]/div[4]/a") #動車 def book_typeD(self): return self.by_css("#resultFilters01 > dl:nth-child(1) > dd.current > label > i") # 關閉浮層 def book_close(self): return self.by_css("#appd_wrap_close") def book_nologin(self): return self.by_css("#btn_nologin") def bookBtn(self): try: time.sleep(7) self.book_close().click() time.sleep(2) self.book().click() time.sleep(2) self.book_nologin().click() except: self.log.error("車次查詢失敗") None return self.dr_url()
- 測試配置文件:
[testUrl] url = “測試環境url" [productUrl] url = "生產環境url"
- 測試用例管理模塊
- 測試套件管理:
#大牛測試 #qq:2574674466 #測試套件管理 import unittest import HTMLTestRunner import time from Common.function import projectPath if __name__ == '__main__': test_dir=projectPath()+"TestCases" tests=unittest.defaultTestLoader.discover(test_dir, pattern ='test*.py', top_level_dir=None) now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time())) filepath=projectPath()+"/Reports/"+now+'.html' fp=open(filepath,'wb') #定義測試報告的標題與描述 runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'自動化測試報告',description=u'測試報告') runner.run(tests) fp.close()
2.測試腳本:
#_*_coding:utf-8_*_ #大牛測試 #qq:2574674466 #測試用例示例: import os,sys sys.path.append(os.path.split(os.getcwd())[0]) import time,unittest,HTMLTestRunner from PageObject.bookPage import bookPage from PageObject.orderPage import orderPage from PageObject.searchPage import searchPage from Base.baseUnit import unitBase from selenium import webdriver class SearchTest(unitBase): def test_02(self): search = searchPage(self.driver) res =search.searchTrain("杭州","上海","2019-05-10") #本例斷言是根據當前頁面的url去判斷的 self.assertIn('TrainBooking',res) def test_03(self): book = bookPage(self.driver) res=book.bookBtn() self.assertIn("InputPassengers",res) def test_04(self): order = orderPage(self.driver) order.userInfo("小王")
- 項目格式:
以上為代碼級web自動化測試框架,后續將分享無代碼自動化測試框架
全棧自動化測試請聯系“大牛測試” ,qq:2574674466,
公眾號: