数据驱动案例

JSON文件读写

  • 读取JSON文件
    • with open(‘data.json’, encoding=‘UTF-8’) as f :
    • data = json.load(f) # 返回的数据类型为字典或列表
  • 写入JSON文件
    • param = {‘name’: ‘tom’, ‘age’: 20}
    • with open(‘data2.json’, ‘w’, encoding=‘UTF-8’) as f:
    • json.dump(param, f)

(1)加法器案例:网址

浏览器驱动工具类(驱动启动和关闭)

from selenium import webdriver
class DriverUtil:
	_driver = None
	
	@classmethod
	def get_driver(cls):
	if cls._driver is None:
	cls._driver = webdriver.Chrome()
	cls._driver.maximize_window()
	cls._driver.implicitly_wait(10)
	cls._driver.get("http://cal.apple886.com/")
	return cls._driver
	
	@classmethod
	def quit_driver(cls):
	if cls._driver:
	cls._driver.quit()
	cls._driver = None

浏览器驱动工具类(计算器页面-对象库层)

from selenium.webdriver.common.by import By
from ddt.calculator.utils import DriverUtil
class CalculatorPage:

	def __init__(self):
	self.driver = DriverUtil.get_driver()
	self.digit_btn = (By.ID, "simple{}")# 数字按钮
	self.add_btn = (By.ID, "simpleAdd")# 加法按钮
	self.eq_btn = (By.ID, "simpleEqual")# 等号按钮
	self.result = (By.ID, "resultIpt")# 计算结果
	
	def find_digit_btn(self, digit):
		location = (self.digit_btn[0], self.digit_btn[1].format(digit))
		return self.driver.find_element(*location)
	def find_add_btn(self):
		return self.driver.find_element(*self.add_btn)
	def find_eq_btn(self):
		return self.driver.find_element(*self.eq_btn)
	def find_result_btn(self):
		return self.driver.find_element(*self.result)

浏览器驱动工具类(计算器页面-操作层)

class CalculatorHandle:
	def __init__(self):
		self.calculator_page = CalculatorPage()
	def click_digit_btn(self, digit):
		self.calculator_page.find_digit_btn(digit).click()
	def click_add_btn(self):
		self.calculator_page.find_add_btn().click()
	def click_eq_btn(self):
		self.calculator_page.find_eq_btn().click()
	def get_result(self):
		return self.calculator_page.find_result_btn().get_attribute("value")
	def input_numbers(self, numbers):
		for num in numbers:
		self.click_digit_btn(num)

浏览器驱动工具类(计算器页面-业务层)

class CalculatorProxy:

	def __init__(self):
		self.calculator_handle = CalculatorHandle()
	def add(self, num1, num2):
		self.calculator_handle.input_numbers(str(num1))
		self.calculator_handle.click_add_btn()
		self.calculator_handle.input_numbers(str(num2))
		self.calculator_handle.click_eq_btn()
	def get_result(self):
		return self.calculator_handle.get_result()

浏览器驱动工具类(计算器页面-数据驱动层)

import json
import time
import unittest
from parameterized import parameterized
from ddt.calculator.page.calculator_page import CalculatorProxy
from ddt.calculator.utils import DriverUtil
class TestCalculator(unittest.TestCase):
	def build_data(self):
		test_data = []
		with open("../data/calculator.json", encoding='UTF-8') as f:
		test_data = json.load(f)
		print("test_data=", test_data)
		return test_data
		
	@classmethod
	def setUpClass(cls):
		cls.driver = DriverUtil.get_driver()
		cls.calculatorProxy = CalculatorProxy()
	@classmethod
	def tearDownClass(cls):
		DriverUtil.quit_driver()
		
	@parameterized.expand(self.build_data)
	def test_add(self, a, b, expect):
		print('a={} b={} expect={}'.format(a, b, expect))
		self.calculatorProxy.add(a, b)
		result = self.calculatorProxy.get_result()# 获取计算结果
		print("result=", result)
		self.assertEqual(result, str(expect))

(2)对TPshop网站的登录模块进行单元测试

浏览器驱动工具类(驱动启动和关闭)

class DriverUtil:
	_driver = None
	
	@classmethod
	def get_driver(cls):
		if cls._driver is None:
		cls._driver = webdriver.Firefox()
		cls._driver.maximize_window()
		cls._driver.implicitly_wait(10)
		cls._driver.get("http://localhost")
		return cls._driver
	
	@classmethod
	def quit_driver(cls):
		if cls._driver:
		cls._driver.quit()
		cls._driver = None

浏览器驱动工具类(计算器页面-对象库层)

class LoginPage:
	def __init__(self):
		self.driver = DriverUtil.get_driver()
		self.username = (By.ID, "username")# 用户名输入框
		self.password = (By.ID, "password")
		self.verify_code = (By.ID, "verify_code")# 验证码
		self.login_btn = (By.NAME, "sbtbutton")# 登录按钮
	def find_username(self):
		return self.driver.find_element(*self.username)
	def find_password(self):
		return self.driver.find_element(*self.password)
	def find_verify_code(self):
		return self.driver.find_element(*self.verify_code)
	def find_login_btn(self):
		return self.driver.find_element(*self.login_btn)

浏览器驱动工具类(计算器页面-操作层)

class LoginHandle:
	def __init__(self):
		self.login_page = LoginPage()
	def input_username(self, username):
		self.login_page.find_username().send_keys(username)
	def input_password(self, pwd):
		self.login_page.find_password().send_keys(pwd)
	def input_verify_code(self, code):
		self.login_page.find_verify_code().send_keys(code)
	def click_login_btn(self):
		self.login_page.find_login_btn().click()

浏览器驱动工具类(计算器页面-业务层)

class LoginProxy:
	def __init__(self):
		self.login_handle = LoginHandle()
	def login(self, username, password, code):
		self.login_handle.input_username(username)
		self.login_handle.input_password(password)
		self.login_handle.input_verify_code(code)
		self.login_handle.click_login_btn()

浏览器驱动工具类(计算器页面-数据驱动层)

import json
import time
import unittest
from parameterized import parameterized
from ddt.tpshop import utils
from ddt.tpshop.page.login_page import LoginProxy
from ddt.tpshop.utils import DriverUtil
class TestLogin(unittest.TestCase):
	def build_data(self):
		test_data = []
		with open("../data/testData.json", encoding='UTF-8') as f:
		json_data = json.load(f)
		for login_data in json_data.values():
		test_data.append((login_data.get("username"),
		login_data.get("password"),
		login_data.get("code"),
		login_data.get("is_success"),
		login_data.get("expect")))
		print("test_data=", test_data)
		return test_data
	@classmethod
	def setUpClass(cls):
		cls.driver = DriverUtil.get_driver()
		cls.login_proxy = LoginProxy()
	@classmethod
	def tearDownClass(cls):
		DriverUtil.quit_driver()
	def setUp(self):
		# 进入首页
		self.driver.get("http://localhost")
		# 点击登录链接
		self.driver.find_element_by_link_text("登录").click()
	@parameterized.expand(self.build_data)
	def test_add(self, username, password, code, is_success, expect):
		print('username={} password={} code={} is_success={} expect={}'.
		format(username, password, code, is_success, expect))
		# 登录
		self.login_proxy.login(username, password, code)
		time.sleep(3)
		# 登录成功的用例
		if is_success:
		self.assertIn(expect, self.driver.title)
		else:
		# 获取提示框消息
		msg = utils.get_tips_msg()
		print("msg=", msg)
		self.assertIn(expect, msg)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值