selenium+python web自動化測試框架項目實戰實例教程


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

 

  •  基本類模塊代碼
#大牛測試
#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"
  • 測試用例管理模塊
  1. 測試套件管理:
#大牛測試
#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,

公眾號:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM