导入包 import json
字典->json
data = { 'id': 1,
'name': 'Tom',
'address': '北京市海淀区',
'school': None
}
json_str = json.dumps(data)
json->字典
json_str = '{"id": 1, "name": "Tom", "address": "北京市海淀区", "school": null}' dict_data = json.loads(json_str)
json文件操作
读取json文件
import json
with open('../data/login.json','r',encoding='utf8')as f:
data = json.load(f)
print(type(data))
print(data)
写入json文件
import json
'''json写入'''
data = {"name":"肘子","age":"20"}
#调入写入方法
with open('../data/data04.json','w',encoding='utf-8')as f:
#不适用ascii码
json.dump(data,f,ensure_ascii=False)
数据驱动例子:
目录结构:
base.py
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
class Base:
#初始化
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.get("http://cal.apple886.com/")
#找元素,返回的是元素
def base_find(self,loc,timeout=30,poll=0.5):
return WebDriverWait(self.driver,timeout=timeout,poll_frequency=poll).until(lambda x:x.find_element(*loc))
#点击元素
def base_click(self,loc):
self.base_find(loc).click()
#获取文本框值
def base_get_value(self,loc):
#获取input输入框内容,必须使用get_attribute获取
return self.base_find(loc).get_attribute("value")
read.py
def read_txt():
with open('../data/data','r',encoding='utf-8')as f:
return f.readlines()
if __name__ == '__main__':
#print(read_txt())
arrs=[]
for i in read_txt():o
arrs.append(tuple(i.strip().split(',')))
print(arrs[1::])
data
a,b,结果
1,2,3
10,0,10
123123,1,123124
init
"""计算器数据"""
from selenium.webdriver.common.by import By
#加号
calc_add = By.CSS_SELECTOR,"#simpleAdd"
#等号
calc_eq = By.CSS_SELECTOR,"#simpleEqual"
#获取计算结果
calc_result = By.CSS_SELECTOR,"#resultIpt"
#清屏
calc_clear = By.CSS_SELECTOR,"#simpleClearAllBtn"
page_calc.py
from selenium.webdriver.common.by import By
from example import page
from example.base.base import Base
class PageCalc(Base):
#点击数字方法
def page_click_num(self,num):
for i in str(num):
loc = By.CSS_SELECTOR,"#simple{}".format(i)
self.base_click(loc)
#点击加号
def page_click_add(self):
self.base_click(page.calc_add)
#点击等号
def page_click_eq(self):
self.base_click(page.calc_eq)
#获取结果
def page_get_value(self):
return self.base_get_value(page.calc_result)
#清屏操作
def page_click_clear(self):
self.base_click(page.calc_clear)
#组合
def page_calc(self,num1,num2):
self.page_click_clear()
#数字a
self.page_click_num(num1)
#加号
self.page_click_add()
#数字b
self.page_click_num(num2)
#等号
self.page_click_eq()
test_calc.py
import unittest
from example.base.read_data import read_txt
from example.page.page_calc import PageCalc
from parameterized import parameterized
def get_data():
arrs = []
for i in read_txt():
arrs.append(tuple(i.strip().split(',')))
return arrs[1::]
class TestCalc(unittest.TestCase):
#setup
@classmethod
def setUpClass(cls):
cls.calc=PageCalc()
#setdown
@classmethod
def tearDownClass(cls):
cls.calc.driver.quit()
@parameterized.expand(get_data())
#测试加法计算
def test_calc(self,num1,num2,expect):
self.calc.page_calc(num1,num2)
#断言
self.assertEqual(expect,self.calc.page_get_value())