数据驱动实战二

目标

  1. 掌握数据驱动的开发流程
  2. 掌握如何读取JSON数据文件
  3. 巩固PO模式

1. 案例

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

1.1 实现步骤

  1. 编写测试用例
  2. 采用PO模式的分层思想对页面进行封装
  3. 编写测试脚本
  4. 定义数据文件,实现参数化

1.2 用例设计

 1.3 数据文件

{"login_username_is_null": {"username": "","password": "123456","code": "8888","is_success": false,"expect": "用户名不能为空"},"login_password_is_null": {"username": "13012345678","password": "","code": "8888","is_success": false,"expect": "密码不能为空"},"login_password_is_error": {"username": "13012345678","password": "error","code": "8888","is_success": false,"expect": "密码错误"},"login_success": {"username": "13012345678","password": "123456","code": "8888","is_success": true,"expect": "我的账户"}
}

1.4 示例代码

from selenium import webdriver
def get_tips_msg():"""获取弹出框的提示消息:return: 消息文本内容"""msg = DriverUtil.get_driver().find_element_by_class_name("layui-layer-content").tex
treturn msg
class DriverUtil:"""浏览器驱动工具类"""_driver = None@classmethoddef get_driver(cls):"""获取浏览器驱动对象,并完成初始化设置:return: 浏览器驱动对象"""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@classmethoddef quit_driver(cls):"""关闭浏览器驱动"""if cls._driver:cls._driver.quit()cls._driver = None
# login_page.py
from selenium.webdriver.common.by import By
from ddt.tpshop.utils import DriverUtil
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()
# test_login.py
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
# 构建测试数据
def build_data():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
class TestLogin(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver = DriverUtil.get_driver()cls.login_proxy = LoginProxy()@classmethoddef tearDownClass(cls):DriverUtil.quit_driver()def setUp(self):# 进入首页self.driver.get("http://localhost")
# 点击登录链接self.driver.find_element_by_link_text("登录").click()@parameterized.expand(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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/9753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置LCD为第二终端

我一直使用xshell端,开发板通过串口和 xshell进行通信。 调试好LCD 驱动之后,可以设置 LCD 作为终端,也就是开发板使用自己的显示 设备作为自己的终端,然后接上键盘就可以直接在开发板上敲命令了,将 LCD 设置为终端控制…

Linux(利用gdb进行调试)

gdb: gdb是GNU debugger的缩写,是编程调试工具。 gdb功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序。 2.让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。 3.当程序停住时,可以检查此时程序中所发…

基于torch_dispatch机制生成Megatron-DeepSpeed调用关系图

基于torch_dispatch机制生成Megatron-DeepSpeed调用关系图 一.局部效果图二.运行训练过程,拦截算子,生成调用关系信息三.可视化,生成SVG图像 想知道Megatron-DeepSpeed训练过程中各模块之间的调用关系。torch_dispatch机制可以拦截算子,inspect又能获取到调用栈(文件,类名,函数…

笔记本电脑怎么查看硬盘型号?无需额外软件,五招让你轻松掌握

随着科技的进步,笔记本电脑已经成为我们日常生活和工作中不可或缺的工具。而在选购或维护笔记本电脑时,了解硬盘的型号和性能是至关重要的。本文以windows10系统为例,将向您介绍几招,帮助您轻松掌握查看笔记本电脑硬盘型号的方法。…

适合年轻人的恋爱交友脱单软件有哪些?中国十大社交软件排行榜分享

交友始祖:Tinder 一直很受欢迎,可以向上扫给 super like (每日有一次免费机会)。如果双方互相 like,代表配对成功,就可以开始聊天。另外,每日有 10 个 top picks 供选择,你可以免费选一位 主力编外&#xf…

Java医院绩效考核系统源码maven+Visual Studio Code一体化人力资源saas平台系统源码

Java医院绩效考核系统源码mavenVisual Studio Code一体化人力资源saas平台系统源码 医院绩效解决方案包括医院绩效管理(BSC)、综合奖金核算(RBRVS),涵盖从绩效方案的咨询与定制、数据采集、绩效考核及反馈、绩效奖金核…

67万英语单词学习词典ACCESS\EXCEL数据库

这似乎是最多记录的英语单词学习词典,包含复数、过去分词等形式的单词。是一个针对想考级的人员辅助背单词学英语必备的数据,具体请自行查阅以下的相关截图。 有了数据才能想方设法做好产品,结合权威的记忆理论,充分调动用户的眼…

Cocos creator实现《战机长空》关卡本地存储功能

Cocos creator实现《战机长空》关卡本地存储功能 Cocos creator在开放小游戏过程中,经常会出现设置关卡,这里记录一下关卡数据本地存储功能。 一、关卡设置数据 假如我们有关卡数据如下, let settings [ { level: 1, // 第1关 score: 0,…

画出入学管理系统的顶层图和1层图

(学校作业) 题目如下: 某培训机构入学管理系统有报名、交费和就读等多项功能,下面是对其各项功能的说明: 1、报名:由报名处负责,需要在学员登记表上进行报名登记,需要查询课…

微软必应bing国内广告开户费用?如何开户投放?

当下搜索引擎广告无疑是企业触达潜在客户、提升品牌曝光度的重要途径之一,微软必应(Bing)作为全球第二大搜索引擎,尽管在国内市场份额上可能不敌某些本土巨头,但其独特的用户群体和国际影响力使其成为众多企业拓展市场…

【数据结构与算法】常见的排序算法

文章目录 排序的概念冒泡排序(Bubble Sort)插入排序(Insert Sort)选择排序(Select Sort)希尔排序(Shell Sort)写法一写法二 快速排序(Quick Sort)hoare版本&a…

前端Vue uView 组件<u-search> 自定义右侧搜索按钮样式

前言 uView 文档的效果不是ui设计的样式 需要重新编辑 原效果 ui设计效果 解决方案 设置里说明的需要传一个样式对象 这个对象 需要写在 script 标签里面 这里需要遵循驼峰命名 比如font-size 改为 fontSize lineHeight和textAlign为水平锤子居中效果 searchStyle: {ba…

Box86源码解读记录

1. 背景说明 Github地址:https://github.com/ptitSeb/box86 官方推荐的视频教程:Box86/Box64视频教程网盘 2. 程序执行主体图 Box86版本: Box86 with Dynarec v0.3.4 主函数会执行一大堆的初始化工作,包括但不限于:BOX上下文 …

腾讯云coding代码托管平台配置问题公钥拉取失败提示 Permission denied(publickey)

前言 最近在学校有个课设多人开发一个游戏,要团队协作,选用了腾讯云的coding作为代码管理仓库,但在配置的时候遇到了一些问题,相比于github,发现腾讯的coding更难用,,,这里记录一下…

【Android Studio】【NCNN】YOLOV8安卓部署

目录 下载Android Studio 克隆安卓项目 关于自训练模型闪退问题 下载Android Studio 下载Android Studio,配置安卓开发环境,这个过程比较漫长。 安装cmake,注意安装的是cmake3.10版本。 根据手机安卓版本选择相应的安卓版本&#xff0c…

彻底解决python的pip install xxx报错(文末附所有依赖文件)

今天安装pip install django又报错了: C:\Users\Administrator>pip install django WARNING: Ignoring invalid distribution -ip (d:\soft\python\python38\lib\site-pac kages) Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting djan…

论文阅读:The Unreasonable Ineffectiveness of the Deeper Layers 层剪枝与模型嫁接的“双生花”

作者实证研究了针对流行的开放式预训练 LLM 系列的简单层修剪策略,发现在不同的 QA 基准上,直到去掉一大部分(最多一半)层(Transformer 架构)后,性能的下降才会降到最低。为了修剪这些模型&…

数控六面钻适用场景-不止家具制造

在快节奏的现代生活中,家具作为我们生活的重要组成部分,其美观度和实用性日益受到人们的关注。而在这背后,一个不可或缺的“工匠”正默默地发挥着它的作用——那就是数控六面钻。 数控六面钻,顾名思义,是一种高度自动…

msix packaging tool打包问题

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

k8s集群部署

部署k8s集群 要求: 主机192.168.199.149(master)node节点(192.168.199.150,192.168.199.151)2个cpu或更多 所有机器可以联网,湖湘之间可以ping同,关闭防火墙,selinux,…