數據驅動


 

數據驅動

數據驅動的思想:

在自動化測試過程中,把測試過程中使用到的數據單獨的分離到文件中,這樣統一來管理具體的測試數據

常見的數據驅動文件類型:

        1. json

        2. yaml

        3. csv      

        4. excel 

        5. mysq

安裝第三方庫:

  1. pip3 install pyyaml            操作雅瑪文件庫
  2. pip3 install xlrd                  操作xlrd文件

 

json

以sina的登錄作為演示,具體代碼實現:

首先在Data文件夾下創建一個sina的json文件

 

 

 

{
  "loginNull": {"username": "","password": "","result": "請輸入郵箱名"},
  "emailFormat": {"username": "sadert","password": "asrtr","result": "您輸入的郵箱名格式不正確"},
  "loginError": {"username": "sdrtdt@sina.com","password": "aserty","result": "登錄名或密碼錯誤"}
}

在文件中以字典的形式寫入需要的文件,注意一定要是雙引號;

同級在創建一個utils的包,包下創建一個Python文件

 

 

 

 這個文件里寫入讀取的函數

import json   導入庫
import  os

def base_dir():
    return os.path.dirname(os.path.dirname(__file__))  #獲取路徑
print(base_dir())

def readjson():
    return json.load(open(os.path.join(base_dir(),'data','sina.json'),encoding='utf-8'))   路徑拼接

print(readjson())

 

from selenium import  webdriver
import  unittest
import  time as t
from 單元測試.utils.operationJson import readjson     導入函數


class Testsina(unittest.TestCase):
    def setUp(self) -> None:
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('https://mail.sina.com.cn/')
        self.driver.implicitly_wait(15)

    def tearDown(self):
        self.driver.quit()


    def test_sina_longin_Null(self,):
        '''驗證郵箱密碼為空的信息'''
        self.driver.find_element_by_id('freename').send_keys(readjson()['loginNull']['username'])
        self.driver.find_element_by_id('freepassword').send_keys(readjson()['loginNull']['password'])
        self.driver.find_element_by_class_name('loginBtn').click()
        t.sleep(3)
        divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
        self.assertEqual(divText.text,readjson()['loginNull']['result'])

    def test_sina_longin_Forma(self,):
        '''驗證郵箱密碼不正確的信息'''
        self.driver.find_element_by_id('freename').send_keys(readjson()['emailFormat']['username'])
        self.driver.find_element_by_id('freepassword').send_keys(readjson()['emailFormat']['password'])
        self.driver.find_element_by_class_name('loginBtn').click()
        t.sleep(3)
        divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
        self.assertEqual(divText.text,readjson()['emailFormat']['result'])

    def test_sina_longin_Error(self,):
        '''驗證郵箱密碼不匹配的信息'''
        self.driver.find_element_by_id('freename').send_keys(readjson()['loginError']['username'])
        self.driver.find_element_by_id('freepassword').send_keys(readjson()['loginError']['password'])
        self.driver.find_element_by_class_name('loginBtn').click()
        t.sleep(3)
        divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
        self.assertEqual(divText.text,readjson()['loginError']['result'])

if __name__ == '__main__':
    unittest.main(verbosity=2)

yaml:

實質上是一種通用的數據串行化格式。

基本語言規則

  1. 大小寫敏感
  2. 使用縮進表示層級關系
  3. 縮進時不允許使用Tab鍵,只允許使用空格。
  4. 縮進的空格數目不重要,只要相同層級的元素左側對齊即可

寫入:

loginNull:
  username: ""
  password: ""
  result: "請輸入郵箱名"

emailFormat:
  username: "sadert"
  password: "asrtr"
  result: "您輸入的郵箱名格式不正確"

loginError:
  username: "sdrtdt@sina.com"
  password: "aserty"
  result: "登錄名或密碼錯誤"

 

讀取

import yaml
import  os

def base_dir():
    return os.path.dirname(os.path.dirname(__file__))
print(base_dir())

def readyaml():
    with open(os.path.join(base_dir(),'data','sina.yaml'),encoding='utf-8') as f:
        return yaml.safe_load(f)

print(readyaml())

CSV

寫入:

username,password,result
,,請輸入郵箱名
sdfsdfsg,Asrety,您輸入的郵箱名格式不正確
awesras@sina.com,sdfdrtsdzf,登錄名或密碼錯誤

在excel寫入后轉為CSV類型,切記不能直接更改后綴

 

 

CSV文件的讀取分為兩種一種是以字典的形式,一種是是列表的形式

import csv
import os

def base_dir():
return os.path.dirname(os.path.dirname(__file__))



def readCsvDict():
'''讀取文件為字典形式'''
list1 = []
with open(os.path.join(base_dir(),'data','sina.csv'),encoding='utf-8-sig') as f:
reade=csv.DictReader(f)
for item in reade:
list1.append(dict(item))
return list1
print(readCsvDict()[0]['result'])

def readCsvList():
'''讀取文件為字典形式'''
list1 = []
with open(os.path.join(base_dir(), 'data', 'sina.csv'), encoding='utf-8-sig') as f:
reade=csv.reader(f)
next(reade) 忽略第一行
for item in reade:
list1.append(item)
return list1
print(readCsvList()[0][1])

 

Excel:

讀取:

import  os
import  xlrd

def base_dir():
    return os.path.dirname(os.path.dirname(__file__))

def readExcel():
    list1=[]
    sheet=xlrd.open_workbook(os.path.join(base_dir(), 'data', 'sina.xls',))
    book=sheet.sheet_by_index(0)
    for item in range(1,book.nrows):         從第一行開始讀取所有的行數
        list1.append(book.row_values(item))   獲取里面的值
    return list1

print(readExcel())

 


免責聲明!

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



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