当前位置: 首页 > article >正文

数据驱动案例

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

http://www.kler.cn/a/5522.html

相关文章:

  • 2011-2020年各省城镇职工基本医疗保险年末参保人数数据
  • 【ES6复习笔记】rest参数(7)
  • 【速成51单片机】1.已经学过stm32如何快速入门51单片机——软件下载与安装
  • EMC——射频场感应的传导骚扰抗扰度(CS)
  • 【视觉惯性SLAM:六、图优化库(1):g2o的使用指南】
  • 大模型的实践应用33-关于大模型中的Qwen2与Llama3具体架构的差异全解析
  • 接收机的噪声来源与噪声分析
  • 米哈游春招后端-2023.03.19-第一题-米哈游的RBG矩阵-简单
  • 别把 OpenAI 太当回事,它远未达到替换前端的地步
  • Retrofit源码分析小结
  • 《Effective Objective-C 2.0 》 阅读笔记 item5
  • 锐捷AP虚拟化配置
  • GUI开发--LCD屏幕的使用(非第三方库)--笔记
  • 机器学习-概论
  • MySQL数据库——数据库系统是什么?它由哪几部分组成?
  • 神州信息业绩持续稳定增长,信创机遇有望催生营收再上新台阶
  • 新六级通关训练
  • MySQL游标详解
  • 走过最长的路是ChatGPT的套路,信过最真的话是Adobe的Firefly
  • ubuntu18.04下编译windows10 下的 libvncserver/libvncclient
  • Vue的基础知识(属性、指令等)
  • centos7 安装photoprism部署私人相册
  • Compose(1/N) - 概念 基本使用
  • Python MongoDB 教程
  • ubuntu20.04安装ros-noetic过程
  • Window 下载安装RocketMQ