1. 程式人生 > >python2.7基於selenium的web自動化測試專案--house目錄

python2.7基於selenium的web自動化測試專案--house目錄

#ResidentiaPage.py

###樓盤模組

# -*- coding:utf8 -*-
from base.Base import Base
from base import  Page
from selenium.webdriver.common.by import By
from base import SQL
from base.Base import log
from base.Base import consoleLog


class ResidentialPage(Base):
   addResidentialMould = {
      'search_btn'
: (By.ID, 'search_btn'), # 列表頁載入的等待元素--搜尋 # 樓盤地址 'add_btn' : (By.ID, 'add_btn'), # 新增樓盤 'residential_name': (By.CSS_SELECTOR,'#residential_name + span > input'), #樓盤名稱 'residential_jianpin': (By.CSS_SELECTOR,'#residential_jianpin + span > input '), #樓盤簡拼 'byname_btn': (By.ID, 'other_contact_btn'
), #樓盤別名新增按鈕 'byname': (By.CSS_SELECTOR, '#byname + span > input'), #樓盤別名 'save_button_btn': (By.ID, 'contact_form_btn'), # 儲存 'address': (By.CSS_SELECTOR, '#address + span > input:nth-child(1)'),#街道地址 'get_location_btn': (By.ID, 'get_btn'), #獲取經緯度 'search_address': (By.ID, 'tipinput'), #輸入關鍵字
'map_point' : (By.CLASS_NAME,'amap_lib_placeSearch_poi'), 'search_map_btn': (By.ID, 'searchMap'), # 點選查詢 'save_location_btn': (By.ID, 'add_geo_btn'),#儲存經緯度 # 基礎資訊 'department' : 'body > div:nth-child(23) > div > ul > li > ul > li:nth-child(2) > ul > li:nth-child(1) > ul > li:nth-child(1) > ul > li:nth-child(1) > div > span:nth-child(7)',#責任部門 'build_date': (By.CSS_SELECTOR, '#build_date + span > input'), # 建築年代 'totle_buildings' : (By.CSS_SELECTOR,'#totle_buildings + span > input'),#總棟數 'total_unit_count': (By.CSS_SELECTOR, '#total_unit_count + span > input'), #總單元數 'total_house_count': (By.CSS_SELECTOR, '#total_house_count + span > input'), #總戶數 'build_area': (By.CSS_SELECTOR, '#build_area + span > input'), #佔地面積 'property_company': (By.ID, 'property_company'), #物業公司 'property_fee': (By.ID, 'property_fee'), #物業費 'plot_ratio': (By.CSS_SELECTOR, '#plot_ratio + span > input'), # 容積率 'green_rate': (By.CSS_SELECTOR, '#green_rate + span > input'), # 綠化率 'parking_amount': (By.CSS_SELECTOR, '#parking_amount + span > input'), # 車位數 'other_info': (By.ID, 'other_info'), # 樓盤亮點 # 周邊配套,圖片,儲存 'bus_stations': (By.ID, 'bus_stations'),#公交站 'metro_stations': (By.ID, 'metro_stations'), #地鐵站 'roomsFileUpload_btn': (By.CSS_SELECTOR,'#base_img > table > tbody > tr > td > a'),#圖片上傳 'submit_btn': (By.ID, 'form_btn'),#儲存 #棟座資訊 'building_info_btn' : (By.CSS_SELECTOR,'#residential + div > div:nth-child(2) > div > div:nth-child(2) > div:nth-child(2) > table > tbody > tr:nth-child(1) > td:nth-child(17) > div > button:nth-child(2)'), #棟座資訊按鈕 'add_building_btn': (By.CSS_SELECTOR, '#ResidentialBuilding_table > div > a'), # 新增樓座 'building_name': (By.CSS_SELECTOR, '#residential_building_info > table > tbody > tr:nth-child(2) > td:nth-child(2) > input'),# 棟座名稱 'lng_lat_btn': (By.ID, 'get_btn'), # 經緯度 'input_searchMap': (By.CSS_SELECTOR, '#myPageTop > table > tbody > tr:nth-child(2) > td:nth-child(1) > input'),# 關鍵字輸入框 'searchMap_btn': (By.ID, 'searchMap'), # 查詢 'save_lng_lat_btn': (By.ID, 'add_geo_btn'), # 儲存 'ground_floors': '#ground_floors', # 地面層數 'underground_floors': '#underground_floors', # 地下層數 'ladder_count': '#ladder_count', # 梯數 'house_count': '#house_count', # 戶數 #單元資訊 'unit_info_btn': (By.CSS_SELECTOR, '#buliding + div > div:nth-child(2) > div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > table > tbody > tr:nth-child(1) > td:nth-child(11) > div > button:nth-child(1)'), # 單元資訊 'add_unit_btn ': (By.CSS_SELECTOR, '#ResidentialBuildingUnit_table > div > a'), # 新增 'unit_name': (By.ID, 'unit_name'), # 單元名稱 'save_unitname_btn': (By.ID, 'form_btn'), # 儲存 #樓層資訊 'floor_info_btn': (By.CSS_SELECTOR, '#buliding_unit + div > div:nth-child(2) > div > div:nth-child(2) > div:nth-child(2) > table > tbody > tr > td:nth-child(4) > div > button:nth-child(1)'),# 樓層資訊 'add_floor_btn': (By.CSS_SELECTOR, '#ResidentialBuildingFloor_table > div > a'), # 新增 'floor_name': (By.ID, 'floor_name'), # 樓層名稱 #房號資訊 'house_info_btn': (By.CSS_SELECTOR, '#buliding_floor + div > div > div > div> div > table > tbody > tr > td:nth-child(4) > div > button:nth-child(1)'),# 房號資訊 'add_house_btn': (By.CSS_SELECTOR, '#ResidentialBuildingHouseNo_table > div >a '), # 新增 'house_no': (By.ID, 'house_no') # 房號名稱 } typeMould = { 'area_code': '#area_code ', # 城區- 'business_circle_name': '#taBusinessCircleString ' ,# 商圈 'property_type': '#property_type ', # 物業型別 'property_use': '#housing_type', # 物業用途 'department_loc' : '#taDepartString' #責任部門 } @log def addResidential(self): """新增樓盤字典、 新增棟座,單元,樓層,房號""" self.open(Page.residentiaPage,self.addResidentialMould['search_btn'],havaFrame = False) # 樓盤地址 self.click(self.addResidentialMould['add_btn']) self.input_text(self.addResidentialMould['residential_name'], 'AutoTest') self.click(self.addResidentialMould['residential_jianpin']) self.click(self.addResidentialMould['byname_btn']) self.input_text(self.addResidentialMould['byname'], 'auto') self.click(self.addResidentialMould['save_button_btn']) self.type_select(self.typeMould['area_code'],"330102") #上城區 self.type_select(self.typeMould['business_circle_name'],"35") #四季青 self.input_text(self.addResidentialMould['address'], u'自動化測試街道地址') self.click(self.addResidentialMould['get_location_btn']) self.input_text(self.addResidentialMould['search_address'], u'海創基地', first=False) self.click(self.addResidentialMould['search_map_btn']) self.click(self.addResidentialMould['search_address']) self.click(self.addResidentialMould['map_point']) self.click(self.addResidentialMould['save_location_btn']) #基礎資訊 self.type_select(self.typeMould['property_type'],'ordinary' ) sql = "SELECT sd.parent_id from sys_department sd INNER JOIN sys_user sur on sur.dep_id = sd.dep_id INNER JOIN sys_position spt on spt.position_id = sur.position_id where sd.dep_district = '330100' and sd.dep_id <> '00000000000000000000000000000000' and (spt.position_name like '資產管家%' or spt.position_name like '綜合管家%') LIMIT 1" self.type_combotree(self.typeMould['department_loc'],SQL.serach(sql)) self.input_text(self.addResidentialMould['build_date'], 1988, first=False) self.input_text(self.addResidentialMould['totle_buildings'], 10, first=False) self.input_text(self.addResidentialMould['total_unit_count'], 30, first=False) self.input_text(self.addResidentialMould['total_house_count'], 20, first=False) self.input_text(self.addResidentialMould['build_area'], 400, first=False) self.input_text(self.addResidentialMould['property_company'], u'杭州物業有限公司', first=False) self.input_text(self.addResidentialMould['property_fee'], 2, first=False) self.input_text(self.addResidentialMould['plot_ratio'], 80, first=False) self.input_text(self.addResidentialMould['green_rate'],20,first=False) self.input_text(self.addResidentialMould['parking_amount'], 200, first=False) self.input_text(self.addResidentialMould['other_info'], u'臨近公交地鐵,附近有超市,環境優美', first=False) # 周邊配套,圖片 self.input_text(self.addResidentialMould['bus_stations'], u'六合橋', first=False) self.input_text(self.addResidentialMould['metro_stations'], u'濱江站', first=False) # 提交新增樓盤字典 self.click(self.addResidentialMould['submit_btn']) Base.succeed += 1 consoleLog('樓盤新增成功') # 棟座 self.open(Page.residentiaPage, self.addResidentialMould['search_btn'],havaFrame = False) self.click(self.addResidentialMould['building_info_btn']) self.click(self.addResidentialMould['add_building_btn']) self.input_text(self.addResidentialMould['building_name'], u'AutoTest') self.click(self.addResidentialMould['lng_lat_btn']) self.input_text(self.addResidentialMould['input_searchMap'], u'逸天廣場', first=False) self.click(self.addResidentialMould['input_searchMap']) self.click(self.addResidentialMould['searchMap_btn']) self.click(self.addResidentialMould['save_lng_lat_btn']) self.type_select(self.typeMould['property_use'], 'ordinary') self.type_select(self.addResidentialMould['ground_floors'], 10) self.type_select(self.addResidentialMould['underground_floors'], 2) self.type_select(self.addResidentialMould['ladder_count'], 30) self.type_select(self.addResidentialMould['house_count'], 100) self.click(self.addResidentialMould['save_unitname_btn']) # 單元 self.click(self.addResidentialMould['unit_info_btn']) self.click(self.addResidentialMould['add_unit_btn ']) self.input_text(self.addResidentialMould['unit_name'], u'AutoTest') self.click(self.addResidentialMould['save_unitname_btn']) # 樓層 self.click(self.addResidentialMould['floor_info_btn']) self.click(self.addResidentialMould['add_floor_btn']) self.input_text(self.addResidentialMould['floor_name'], u'AutoTest') self.click(self.addResidentialMould['save_unitname_btn']) # 房號 self.click(self.addResidentialMould['house_info_btn']) self.click(self.addResidentialMould['add_house_btn']) self.input_text(self.addResidentialMould['house_no'], u'AutoTest') self.click(self.addResidentialMould['save_unitname_btn']) consoleLog('棟座相關新增成功') def delResidential(self): self.open(Page.residentiaPage,self.addResidentialMould['search_btn'],havaFrame = False) # 樓盤地址 self.click(self.addResidentialMould['add_btn'])

#HouseAddPage.py

###新增房源

# -*- coding:utf8 -*-
from base.Base import Base
from base import Page
from selenium.webdriver.common.by import By
from base import SQL
from base.Base import log
from base.Base import consoleLog

class HouseAddPage(Base):
    houseAddMould = {
        'test' : (By.ID,'form_btn'), #測試頁面載入
        #基本資訊
'property_name': (By.CSS_SELECTOR, '#td_not_found > span > input'),  # 物業地址 ַ
'property_name_click': (By.CSS_SELECTOR,'#house_develop_panel_form + div > div > div'),
'contact_people': (By.CSS_SELECTOR, '#contact + span > input'),  # 聯絡人
'contact_tel': (By.CSS_SELECTOR, '#contact_tel + span > input'),  # 聯絡方式
        #出租資訊
'rental_price': (By.CSS_SELECTOR, '#rental_price + span > input '),# 意向租金
        #詳細資訊
'build_area': (By.CSS_SELECTOR, '#build_area + span > input'),  # 面積
'form_btn': (By.ID, 'form_btn')  # 儲存
}

    typeMould = {
        'residential' : '#residential_name_search', #樓盤
'building': '#house_develop_panel_form + div + div > div > div',  # 棟座
'unit': '#house_develop_panel_form + div + div + div > div > div',  # 單元
'room_number': '#house_develop_panel_form + div + div + div + div > div >div',  # 房號
'did' : '#did', #拓房部門
'uid' : '#uid', #拓房人
'house_status': 'body > div:nth-child(17) > div > div:nth-child(3)',  # 房源狀態
'remark': '#remark',  # 備註
'source': '#source ', #房屋來源
'rooms' : '#rooms ', #室
'livings' : '#livings ',#廳
'kitchens' : '#kitchens ',#廚
'bathrooms' : '#bathrooms ',#衛
'balconys' : '#balconys', #陽
'orientation': '#orientation',  # 朝向
'property_type': '#property_type',  # 物業型別
'property_use': '#property_use',  # 物業用途
'fitment_type': '#fitment_type',  # 裝修情況
'look_type': '#look_type',  # 看房方式
'look_date': '#look_date',  # 可看房日期
}


    @log
def addhousepage(self):
        """新增房源"""
self.open(Page.houseAddPage,self.houseAddMould['test'],havaFrame=False)
        #基本資訊
self.input_text(self.houseAddMould['property_name'], 'AutoTest')
        self.click(self.houseAddMould['property_name_click'])
        self.input_text(self.houseAddMould['contact_people'], 'AutoTest')
        self.type_click(self.typeMould['building'])
        self.input_text(self.houseAddMould['contact_tel'], '18279881085', first=False)
        self.type_click(self.typeMould['unit'])
        self.input_text(self.houseAddMould['contact_tel'], '18279881085', first=False)
        self.type_click(self.typeMould['room_number'])
        self.type_combotree(self.typeMould['did'],'00000000000000000000000000000000')
        uid = SQL.serach("select user_id from sys_user WHERE user_name = 'AutoTest' limit 1")
        self.type_select(self.typeMould['uid'],uid)
        #出租資訊
self.type_click(self.typeMould['house_status'])
        self.type_select(self.typeMould['source'],'INTRODUCE')
        self.input_text(self.houseAddMould['rental_price'], 3000, first=False)
        self.type_select(self.typeMould['rooms'],'1')
        self.type_select(self.typeMould['livings'], '1')
        self.type_select(self.typeMould['kitchens'], '1')
        self.type_select(self.typeMould['bathrooms'], '1')
        self.type_select(self.typeMould['balconys'], '1')
        #詳細資訊
self.input_text(self.houseAddMould['build_area'], '60.00')  # 面積
self.type_select(self.typeMould['orientation'], 'NORTH')
        self.type_select(self.typeMould['property_type'], 'MULTI_LIFE')
        self.type_select(self.typeMould['property_use'], 'HOUSE')
        self.type_select(self.typeMould['fitment_type'], 'FITMENT_ROUGH')
        self.type_select(self.typeMould['remark'], u'Atuo備註資訊')
        self.type_select(self.typeMould['look_type'], 'DIRECTION')
        self.type_select(self.typeMould['look_date'], u'2017-08-08')
        self.click(self.houseAddMould['form_btn'])  # 儲存
Base.succeed += 1
consoleLog('房源新增成功')

#HouseAuditPage.py

###稽核房源

# -*- coding:utf8 -*-
from base.Base import Base
from base import Page
from selenium.webdriver.common.by import By
from base.Base import log
from base.Base import consoleLog


class HouseAuditPage(Base):
    searchMould = {
        'residentia_name_loc' : (By.ID,'residential_name_search'),
'search_button_loc' : (By.ID,'search_btn')
    }
    houseAuditPageloc = {
        'audit_btn': (By.ID, 'audit_btn'),  # 稽核
'department_did_loc' : '#residential_department_did',   #責任部門
'cancel_btn': (By.ID, 'cancel_btn'),  # 稽核通過
'form_btn': (By.ID, 'form_btn'),  # 稽核不通過
'iszCommonWorkflowPageSure': (By.ID, 'iszCommonWorkflowPageSure'),  # 確定
}

    @log
def audit(self):
        """稽核房源"""
self.open(Page.houseAuditPage,self.houseAuditPageloc['audit_btn'])
        self.input_text(self.searchMould['residentia_name_loc'],'AutoTest')
        self.click(self.searchMould['search_button_loc'])
        self.script('$("#audit_btn").click()')
        self.click(self.houseAuditPageloc['cancel_btn'])  # 稽核通過
for i in range(1,6):
            try:
                self.click(self.houseAuditPageloc['iszCommonWorkflowPageSure'])  # 確定
break
            except:
                self.click(self.houseAuditPageloc['cancel_btn'])  # 稽核通過
self.check_submit()
        try:
            self.solr('house',self.test)
            consoleLog('solr的house-core增量成功')
        except:
            consoleLog(Exception.message,level='ERROR')
            consoleLog('執行house-core的增量失敗,請檢查solr是否正常')
            pass
consoleLog('房源稽核成功')

#ApartmentPage.py

###房源定價、新增報銷單

# -*- coding:utf8 -*-
from base.Base import Base
from base import  Page
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import time
from base.Base import log
from base.Base import consoleLog

class ApartmentPage(Base):
    apartmentMould = {
        #搜尋出需要的房源
'tr_house': (By.CSS_SELECTOR, 'tr[datagrid-row-index="0"]'),
'residential_name': (By.ID,'residential_name_house_code_search'),#搜尋欄物業地址
'search_btn' : (By.ID,'search_btn'),#搜尋按鈕
'details_btn' : (By.CSS_SELECTOR,'[onclick="Apartment.dialog(\'edit\',0)"]'),#詳情
'tr_apartment' : (By.CSS_SELECTOR,'tr[datagrid-row-index="0"]'),
#詳情介面
'make_price_btn' : (By.ID,'btn_make_price'),#定價按鈕
        #定價介面
'entire_rent_price': (By.CSS_SELECTOR,'#rent_price + span >input:nth-child(1)'),#整租-月租金
'share_rent_price' : (By.CSS_SELECTOR,'td[field=rent_price] > div > span >input:nth-child(1)'), #合租-月租金
'save_btn' : (By.CSS_SELECTOR,'#base_button > div > p > button:nth-child(2)'),#儲存
'form_btn' : (By.ID,'form_btn'), #儲存
'expense_btn' : (By.CSS_SELECTOR,'#base_button > div > button:nth-child(6)'),#報銷
'amount' : (By.CSS_SELECTOR,'#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(5) > span > input'),#報銷金額
'brepay_company': (By.CSS_SELECTOR,'#repay_company + span > input:nth-child(1)'), # 還款公司
'memo': (By.ID,'memo'),  # 備註
'submit_btn': (By.ID,'submit_btn')  # 提交
}
    typeMould = {
        'item_type' : '#projectAllExpense > div > table > tbody > tr:nth-child(1) > td:nth-child(2) > input ',#報銷專案
'bear_type' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(2) > input ',#承擔方
'start_date' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(6) > input:nth-child(1)',#費用週期開始
'end_date' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(6) > input:nth-child(3)',#費用週期結算
'vacant' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(8) > input',#空置期
'first' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(9) > input',#首次
'source_bear_id' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(10) > span > input:nth-child(1)',#房源方
'moneytype' : '#moneytype ',#收借款類別
'customer_name' : '#bank_name ',#姓名
'customer_bank_location' : '#bank_location ',#開戶銀行
'bank_card' : '#bank_card  '#銀行卡號
}

    @log
def addhouserent(self):
        """房源定價"""
self.open(Page.apartmentPage, self.apartmentMould['tr_apartment'])
        self.input_text(self.apartmentMould['residential_name'],'AutoTest', first=False)
        for i in range(0, 11):
            self.click(self.apartmentMould['search_btn'])
            time.sleep(1)
            try:
                test = self.driver.find_element(*self.apartmentMould['tr_house'])
                break
            except NoSuchElementException:
                consoleLog('嘗試第%s次查詢,但未找到apartment-core的solr增量資料' % i,level='WARNING')
                time.sleep(5)

        # 搜尋房源
self.dblclick(self.apartmentMould['tr_apartment'], checkLoc=self.apartmentMould['make_price_btn'])
        # 詳情介面
self.click(self.apartmentMould['make_price_btn'])
        # 定價介面
self.click(self.apartmentMould['share_rent_price'])
        self.input_text(self.apartmentMould['share_rent_price'], 2222, first=False)
        self.click(self.apartmentMould['save_btn'])
        self.click(self.apartmentMould['form_btn'])
        consoleLog('新增自營房源月租金成功')

    @log
def addReimbursement(self):
        """新增報銷單"""
self.open(Page.apartmentPage, self.apartmentMould['tr_apartment'])
        
            
           

相關推薦

python2.7基於selenium的web自動化測試專案--house目錄

#ResidentiaPage.py ###樓盤模組 # -*- coding:utf8 -*- from base.Base import Base from base import Page from selenium.webdriver.common.by imp

python2.7基於selenium的web自動化測試專案--user目錄

#Login.py ###封裝登入系統 # -*- coding:utf8 -*- from base.Base import Base from selenium.webdriver.common.by import By from base.Base import l

python2.7基於selenium的web自動化測試專案--base目錄檔案

Base.py ##### 各公共方法的二次封裝以及定義,如拋棄selenium最外層的定位方法,直接傳入By類的變數,既避免過長的函式定義也規範了元素定位的變數定義;同時由於系統中部分控制元件用滑鼠點選不好定位,不能靈活            的傳參,所以根據控制元件型別

基於appium自動化測試案例7--螢幕截圖(學習筆記)

#coding=utf-8 #匯入之前登陸判斷方法 from find_element.kyb_login import driver driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').c

基於python自動化測試平臺與虛擬化技術結合的思考

主力 根據 測試 導致 文件掛載 配置 存在 自動化 作用 背景: 自動化測試行業內,個人覺得主力語言是python、java。這裏討論下基於python自動化框架設計與case開發,用過python的都知道它的好處,但是根據實際項目需要有了很多迎面而來的困難--主機遷

基於appium自動化測試案例12--使用yaml 進行資料配置(學習筆記)

在編寫appium自動化測試指令碼中,經常需要配置裝置及app的引數,如:desired_caps={} #裝置平臺名稱 desired_caps['platformName']='Android' #裝置名稱 desired_caps['deviceName']='127.

火狐外掛安裝-基於web自動化測試

一、Firebug 安裝 1、  開啟火狐瀏覽器—選擇右上角“開啟選單”(圖一)----附件元件(圖二) 圖一   圖二   2、  點選:擴充套件(圖三)—-------用於所有附加元件的工具(圖四)----選擇“從檔案安裝附加元件” 圖三  

python UI自動化測試專案記錄(二) 請求介面資料並提取資料

首先 獲取預期結果-介面響應資料,分成兩步: 1 獲取資料來源介面資料 2 提取後續頁面對比中要用到的資料 並且為了便於後續呼叫,將介面相關的都封裝到ProjectApi類中。隱去敏感資訊後的原始碼如下:   1 獲取資料來源介面資料 # coding:utf-8 import

介面自動化測試專案的一些知識整理

分享一下做過的介面測試的專案知識,簡單的整理了下,以後有時間會把其他的也整理下,大家有好的建議或者疑問的可以直接回復哦。 裡面的設計和具體的實現都存在不同程度的缺陷。以下都是實現完成並運用於專案中的。 Python Web Restful API 介面測試專案知識整理歸納 專案工具選擇 使用工具:

《手把手教你》系列練習篇之7-python+ selenium自動化測試 -壓軸篇(詳細教程)

1. 簡介   “壓軸”原本是戲曲名詞,指一場摺子戲演出的倒數第二個劇目。在現代社會中有很多應用,比如“壓軸戲”,但壓軸也是人們知識的一個盲區。“壓軸”本意是指倒數第二個節目,而不是人們常說的倒數第一個,倒數第一個節目稱“壓臺

糾結的Python2.7編碼與os.walk()函式的目錄引數

Python3與Python2.x系列的編碼處理(型別,檔案等)有所不同,具體這裡就不再介紹了,網上有很多相關文章。 這裡分享一個糾結了非常久的問題(因為一開始沒特別注意函式引數的編碼問題,所以浪費了不少時間,希望能給同樣遇到這個問題的朋友們一點幫助)。 os.walk()

關於舊基於xml的web服務專案python2.7遷移到python3.6.2

https://www.jianshu.com/p/4e26007990f3 首先學一下前人經驗 對git進行提交,然後在pycharm或者終端用conda 進行 activate的虛擬環境進行切換. 1其實最多的處理應該會是那些print了. SyntaxError: Mis

基於Jenkins 實現php專案自動化測試、自動打包和自動部署

   本篇博文宅鳥將在上篇: 基於Jenkins 搭建持續整合環境 的基礎上,繼續介紹Jenkins結合php專案實現自動化測試和自動部署。廢話不再多說,直接上幹活。    宅鳥所使用的server為Ubuntu    要實現在jenkins中實現php的自動化測試,首先需要Jenkins伺服器上安裝ph

基於Jenkins 實現php專案自動化測試、自動打包和自動部署(-)

基於Jenkins 實現php專案的自動化測試、自動打包和自動部署(一) 身在創業公司,碰到任何問題,都得擼起袖子加油幹: 隨著專案團隊的不斷擴大,專案因為人員的參差不齊導致各種各樣的問題。於是引入jenkins持續整合。 廢話不多說,先普及基礎概念

《Web介面開發與自動化測試基於Python語言》--第7

《Web介面開發與自動化測試基於Python語言》–讀書筆記 第7章 介面相關概念 7.1 分層的自動化測試 測試金字塔模型: 分層自動化測試模型: 傳統自動化測試: 基於產品UI層的自動化測試,它是將黑盒功能測試轉化為

Jenkins持續整合專案搭建——基於Python Selenium自動化測試

參考連結:https://www.liaoxuefeng.com/article/1083282007018592 第一步:去官網https://jenkins.io/下載最新的war包   第二步:安裝.war包即:安裝jinkens 開啟命令視窗,進入.war包所在的路徑下 執行

學習《selenium2自動化測試基於python》遇到的問題(一)

pypi tools bsp sel dir python 解決方案 打不開 什麽 問題一: 通過cmd,用Python安裝setuptools時,報錯no module named ‘six‘等類似情況時,解決方案: 翻譯過來就是缺少SIX的模塊,直接到官網打開,下載

基於C#實現的自動化測試框架:發布自動觸發自動化回歸測試

exc 時間流 測試用例 出現 服務器 text types filter txt 接口自動化測試用例完成以後,以前都是發布以後手動運行測試用例。雖然手動運行下腳本也就是一個F5的事情,但是離自動化測試的標準差得很遠。這兩天有了個大膽的想法,想要實現以下發布時直接觸發自動化

基於python的接口自動化測試框架

urn __name__ exce 文件格式 圖片 XML pla main tex 公司內部的軟件采用B/S架構,大部分是數據的增刪改查,由於還在開發階段,所以UI界面的變化非常快,難以針對UI進行自動化測試,那樣會消耗大量的精力與時間維護自動化腳本。針對此種情況,針對接

【selenium】Selenium基於Python3的Web自動化測試腳本在IE上運行慢的解決方法

drivers 解決方法 bsp exe com 32位 方法 解決辦法 文本 闡述問題: 執行自動化腳本時,發現文本輸入在IE瀏覽器上特別慢,這樣大大降低了自動化效率 解決辦法:原因是原先下載的IEDriverServer.exe為64位系統的IE,換為32位的IED