数据驱动


 

数据驱动

数据驱动的思想:

在自动化测试过程中,把测试过程中使用到的数据单独的分离到文件中,这样统一来管理具体的测试数据

常见的数据驱动文件类型:

        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