UI自动化之关键字驱动

关键字驱动框架:将每一条测试用例分成四个不同的部分

  • 测试步骤(Test Step):一个测试步骤的描述或者是测试对象的一个操作说明
  • 测试步骤中的对象(Test Object):指页面的对象或者元素
  • 对象执行的动作(Action):页面操作的动作
  • 执行对象所需要的数据(Test Data):任何对象操作时所需要的值

例如:登录163邮箱,步骤分为:

  1. 打开浏览器
  2. 输入url
  3. 切换iframe
  4. 输入用户名
  5. 输入密码
  6. 点击登录

1:创建excel文件,使用excel文件来存放测试用例及测试步骤,excel内容如下:

login的sheet页中,描述了测试步骤,测试步骤中的对象可以分为:测试对象的定位方式以及定位方式表达值:

从excel文件中,可以看到,每一个步骤我们要执行的动作是什么,例如打开浏览器,我们需要定义一个open_browse方法,再读取excel文件的内容时,程序才知道要怎么做。因此我们需要为每个执行动作定义一个方法。

再在excel中增加一个sheet页,从来存放测试用例,如index:

2:搭建项目框架,只是简单的实现关键字驱动,需要的其他内容可以再往框架中加。

项目结构目录:

3:接下来我们来看一下各个文件夹下py文件的内容

首先是Util文件夹下,封装的查找元素控件的工具类find_ele.py文件

# find_ele.py
from selenium.webdriver.support.wait import WebDriverWaitdef find_element(driver, location_type, location_express):'''查找控件元素'''try:driver = WebDriverWait(driver, 20).until(lambda driver:driver.find_element(location_type, location_express))return driverexcept Exception as e:raise e

接下来我们就要在Util文件下,封装读取excel文件内容方法的excel_parse.py文件,再封装该方法前,需要在Setting文件下,创建Config.py文件,用来获取文件路径。

Config.py文件内容如下:

# Config.py
import osBase_Dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 测试数据文件
Test_Data_Path = os.path.join(Base_Dir, 'TestData')

excel_parse.py文件内容如下:

# excel_parse.py
from Setting.Config import Test_Data_Path
from openpyxl import load_workbookclass ExcelParse:def __init__(self):self.workbook = Noneself.sheet = Nonedef load_workbook(self, filename):'''加载文件'''try:self.workbook = load_workbook(filename)except Exception as e:raise edef get_sheet(self, sheetname):'''获取sheet页'''try:self.sheet = self.workbook[sheetname]except Exception as e:raise edef get_row_num(self):'''返回行数'''return self.sheet.max_rowdef get_col_num(self):'''返回列数'''return self.sheet.max_columndef get_cell_value(self, row, col):'''返回某一单元格的值'''return self.sheet.cell(row=row, column=col).valuedef get_row_value(self, row):'''返回某一行的值'''try:col = self.get_col_num()data = []for i in range(1, col+1):data.append(self.get_cell_value(row, i))return dataexcept Exception as e:raise edef write_cell(self, row, col, filename, content):'''单元格赋值'''try:self.sheet.cell(row=row, column=col, value=content)self.workbook.save(filename)except Exception as e:raise eif __name__ == '__main__':execl = ExcelParse()execl.load_workbook(Test_Data_Path + '/login.xlsx')execl.get_sheet('login')res = execl.get_row_value(2)print(res)

然后就需要定义测试步骤中的执行动作的方法,在Util文件夹下,创建elementAction.py文件,内容如下:

# elementAction.py
from selenium import webdriver
from Util.find_ele import find_elementdriver = Nonedef open_browse(browser_name, *args):'''打开浏览器'''global drivertry:if browser_name.lower() == 'chrome':driver = webdriver.Chrome()elif browser_name.lower() == 'firefox':driver = webdriver.Firefox()else:driver = webdriver.Ie()except Exception as e:raise edef get_url(url, *args):'''打开网址'''try:driver.get(url)except Exception as e:raise edef max_window(*args):'''窗口最大化'''try:driver.maximize_window()except Exception as e:raise edef switch_frame(location_type, location_express, *args):'''切换iframe'''try:frame = find_element(driver, location_type, location_express)driver.switch_to.frame(frame)except Exception as e:raise edef input_content(location_type, location_express, content, *args):'''定位输入框,输入内容'''try:find_element(driver, location_type, location_express).send_keys(content)except Exception as e:raise edef click(location_type, location_express, *args):'''点击操作'''try:find_element(driver, location_type, location_express).click()except Exception as e:raise edef assert_title(title, *args):'''断言title是否正确'''try:assert title in driver.titleexcept Exception as e:raise edef close_browse():'''关闭浏览器'''driver.quit()if __name__ == '__main__':open_browse('chrome')get_url('http://mail.163.com')max_window()switch_frame('tag name', 'iframe')input_content('name', 'email', 'test123')input_content('name', 'password', 'a123456')click('id', 'dologin')assert_title('网易')

然后将从excel文件中读取出来的内容,拼接成要执行的方法。在Util文件夹下,创建common.py文件。

# common.py
def generate_method_express(location_type, location_express, key_word, operate_data):# location_type, location_express为空,operate_data不为空if key_word and operate_data and location_type is None and location_express is None:# 判断操作值的类型if isinstance(operate_data, int):method_express = key_word + '(' + str(operate_data) + ')'else:method_express = key_word + "('" + operate_data + "')"# print(method_express)# 只有关键字有值,其他的都为空,比如:max_window, close_browseelif key_word and operate_data is None and location_type is None and location_express is None:method_express = key_word + '()'# print(method_express)# location_type,location_express不为空,operate_data为空elif key_word and location_type and location_express and operate_data is None:method_express = key_word + "('" + location_type + "','" + location_express + "')"# print(method_express)# 都不为空else:if isinstance(operate_data, int):method_express = key_word + "('" + location_type + "','" + location_express + "'," + str(operate_data) + ")"else:method_express = key_word + "('" + location_type + "','" + location_express + "','" + operate_data + "')"print(method_express)return method_express

之后,就是编写执行测试用例了。

在TestScript文件夹下,创建test_login.py文件

# test_login.py
from Util.excel_parse import ExcelParse
from Setting.Config import Test_Data_Path
from Util.elementAction import *
from Util.common import generate_method_expressexcel = ExcelParse()
# 加载login.xlsx文件
excel.load_workbook(Test_Data_Path + '/login.xlsx')def test_run():try:# 获取indexsheet页excel.get_sheet('index')# 获取index的行数rows = excel.get_row_num()for i in range(2, rows+1):# 判断是否要执行is_run = excel.get_cell_value(i, 4).lower()if is_run == 'y':# 获取要执行的sheet页名称case_step_sheet = excel.get_cell_value(i, 3)# 切换到要执行的sheet页excel.get_sheet(case_step_sheet)# 获取要执行的步骤数step_num = excel.get_row_num()# print(step_num)success_num = 0       # 记录成功的步骤数for j in range(2, step_num+1):# 获取步骤描述step_desc = excel.get_cell_value(j, 1)# 定位方式location_type = excel.get_cell_value(j, 2)# 定位方式表达值location_express = excel.get_cell_value(j, 3)# 执行动作key_word = excel.get_cell_value(j, 4)# 执行数据operate_data = excel.get_cell_value(j, 5)# print(step_desc, location_type, location_express,key_word, operate_data)method_express = generate_method_express(location_type, location_express, key_word, operate_data)try:# 运行函数,eval(),将字符串str当成有效的表达式来求值并返回计算结果eval(method_express)except Exception as e:raise eelse:success_num += 1# 切换sheet页到indexexcel.get_sheet('index')if success_num == step_num - 1:# 成功的步骤数等于步骤sheet页的行数减1,表示测试执行成功,写入成功excel.write_cell(i, 5, Test_Data_Path + '/login.xlsx', 'pass')else:# 写入失败excel.write_cell(i, 5, Test_Data_Path + '/login.xlsx', 'Fall')except Exception as e:raise

执行test_login.py文件,关键字驱动就实现了。这只是简单的实现了关键字驱动,了解了关键字驱动应该是什么样的,日志、测试报告、执行入口可以自己再添加,上面的代码也可以再进行优化。

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

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

相关文章

rtsp 拉流 gb28181 收流 经AI 算法 再生成 rtsp server (一)

1、 rtsp 工具 1 vlc 必备工具 2 wireshark 必备工具 3 自己制作的工具 player 使用tcp 拉流,不自己写的话,使用ffmpeg 去写一个播放器就行 4 live555 编译好live555, 将live555的参数修改以下,主要是缓存大小 文章使用c 来写一…

C++面试题(叁)---操作系统篇

目录 操作系统篇 1 Linux中查看进程运行状态的指令、查看内存使用情况的指令、 tar解压文件的参数。 2 文件权限怎么修改 3 说说常用的Linux命令 4 说说如何以root权限运行某个程序。 5 说说软链接和硬链接的区别。 6 说说静态库和动态库怎么制作及如何使用,区…

界面控件DevExpress WinForms(v23.2)下半年发展路线图

本文主要概述了官方在下半年(v23.2)中一些与DevExpress WinForms相关的开发计划,重点关注的领域将是可访问性支持和支持.NET 8。 DevExpress WinForms有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。同时能…

自然语言处理-NLP

目录 自然语言处理-NLP 致命密码:一场关于语言的较量 自然语言处理的发展历程 兴起时期 符号主义时期 连接主义时期 深度学习时期 自然语言处理技术面临的挑战 语言学角度 同义词问题 情感倾向问题 歧义性问题 对话/篇章等长文本处理问题 探索自然语言…

四、高并发内存池整体框架设计

四、高并发内存池整体框架设计 现代很多的开发环境都是多核多线程,在申请内存的场景下,必然存在激烈的锁竞争问题。malloc本身其实已经很优秀,那么我们项目的原型TCmalloc就是在多线程高并发的场景下更胜一筹,所以这次我们实现的…

centos 7的超详细安装教程

打开虚拟机,创建一个新电脑 我们选择经典,然后选择下一步 我们选择稍后安装,我们在后面进行改设备 因为centos系统是linux系统的一个版本,所有我们选择linux,版本选择centos 7 64位,然后就是点击下一步 这一…

HTML <template> 标签

实例 使用 <template> 保留页面加载时隐藏的内容。使用 JavaScript 来显示: <button οnclick="showContent()">显示被隐藏的内容</button><template><h2>Flower</h2><img src="img_white_flower.jpg" width=&q…

2023年03月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;拼点游戏 C和S两位同学一起玩拼点游戏。有一堆白色卡牌和一堆蓝色卡牌&#xff0c;每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌&#xff0c;S随机抽取n张蓝色卡牌&#xff0c;他们进行n回合拼点&#xff0c;每次两人各出一张卡牌&#xff0c;点数大者获…

Word导出创建Adobe PDF其中emf图片公式马赛克化及文字缺失

软件版本 Word 2021 Visio 2019 Adobe Acrobat Pro 2020 问题描述 公式马赛克化&#xff0c;是指在Word中使用MathType编辑的公式&#xff0c;然后在Visio中使用图片(增强型图元文件)形式得到的粘贴对象&#xff0c;效果如下 文字缺失&#xff0c;是指Word导出→创建Adobe P…

源码安装cv_bridge

1. 下载源码 1去github上下载GitHub - ros-perception/vision_opencv&#xff0c;进去后注意选择与自己的ros对应的版本&#xff1a;&#xff08;我的为noetic&#xff09; 如果你直接使用 git clone https://github.com/ros-perception/vision_opencv.git 来拉取的话cmake的…

MySQL 8 数据清洗总结

MySQL 8 数据清洗三要素&#xff1a; 库表拷贝和数据备份数据清洗SQL数据清洗必杀技-存储过程 前提&#xff1a;数据库关联库表初始化和基础数据初始化&#xff1a; -- usc.t_project definitionCREATE TABLE t_project (id varchar(64) NOT NULL COMMENT 主键,tid varchar(…

网络基础之重中之重

目录 IP协议 ​编辑 基本概念&#xff1a; 协议头格式&#xff1a; ​编辑 网段划分 DHCP &#xff1a; CIDR&#xff1a; 特殊的IP地址&#xff1a; IP地址的数量限制&#xff1a; 私有IP和公网IP 路由 路由的过程&#xff1a; 数据链路层 认识以太网&#x…

GAN原理 代码解读

模型架构 代码 数据准备 import os import time import matplotlib.pyplot as plt import numpy as np import torchvision.transforms as transforms from torch.utils.data import DataLoader from torchvision import datasets import torch.nn as nn import torch# 创建文…

I IntelliJ IDEA 2023.2 最新解锁方式,支持java20

在 IntelliJ IDEA 2023.1 中&#xff0c;我们根据用户的宝贵反馈对新 UI 做出了大量改进。 我们还实现了性能增强&#xff0c;从而更快导入 Maven&#xff0c;以及在打开项目时更早提供 IDE 功能。 新版本通过后台提交检查提供了简化的提交流程。 IntelliJ IDEA Ultimate 现在支…

C语言每日一练------------Day(7)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;两个数组的交集     双指针 &#x1f493;博主csdn个人主页&#xf…

【MySQL】存储引擎

1.MySQL体系结构 1). 连接层 最上层是一些客户端和链接服务&#xff0c;包含本地 sock 通信和大多数基于客户端 / 服务端工具实现的类似 于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入 了线程池的概念&#xff0c;为通过认证安全接…

Ubuntu 启动出现grub rescue

​ 一&#xff0c;原因 原因&#xff1a;出现 “grub rescue” 错误通常表示您的计算机无法正常引导到操作系统&#xff0c;而是进入了 GRUB&#xff08;Grand Unified Bootloader&#xff09;紧急模式。这可能是由于引导加载程序配置错误、硬盘驱动器损坏或其他引导问题引起…

js定位到元素底部

文字的一行一行添加的&#xff0c;每次添加要滚动条自动定位到元素底部 <div class"An">//要父元素包裹&#xff0c;父元素设置max-height&#xff0c;overflow啥的<div class"friendly_pW"></div></div>//添加文字时找子元素的高…

Windows右键添加用 IDEA 打开

1.安装IDEA时 安装时会有个选项来添加&#xff0c;如下&#xff1a; 勾选即可 2.修改注册表 安装时未勾选&#xff0c;可以把下面代码中程序路径改为自己的&#xff0c;保存为对应的 idea.reg文件&#xff0c;双击即可 Windows Registry Editor Version 5.00[HKEY_CLASSES…

Screaming Frog SEO Spider,为您的网站提供全方位的优化解决方案

Screaming Frog SEO Spider是一款适用于Mac的软件&#xff0c;它可以帮助用户分析网站的优化信息。该软件可以模拟蜘蛛爬行的方式&#xff0c;抓取网站的各种信息&#xff0c;并将这些信息整理成易于理解的报告。这些报告可以帮助用户评估网站的优化情况&#xff0c;发现链接的…