【2019.09.08】python 基于Excel设计实现的关键字驱动的自动化测试框架

2023-11-11

之前写过PO模式、数据驱动的测试框架,最近要做一个测试平台,先写一个关键字驱动的测试框架练练手

Excel 样式展示

如图
在这里插入图片描述

结果展示

在这里插入图片描述

代码

结构
在这里插入图片描述

  1. 读取excel
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/9/8 2:11
# @Author  : Paulson
# @File    : opera_excel.py
# @Software: PyCharm
# @define  : function


import xlrd


class OperaExcel:
    def __init__(self, file_path=None):
        if file_path is None:
            self.file_path = '../dataconfig/selenium.xlsx'
        else:
            self.file_path = file_path
        self.excel = self.get_excel()
    
    def get_excel(self):
        tables = xlrd.open_workbook(self.file_path)
        return tables
    
    def get_sheet(self, i=None):
        if i is None:
            i = 0
        sheet_data = self.excel.sheets()[i]
        return sheet_data
    
    def get_lines(self):
        """获取行数"""
        lines = self.get_sheet().nrows
        return lines
    
    def get_cell(self, row, cell):
        """获取单元格内容"""
        data = self.get_sheet().cell(row, cell).value
        return data


if __name__ == '__main__':
    opera = OperaExcel()
    print(opera.get_lines())
    print(opera.get_cell(0, 1))

  1. 使用Excel中关键字对selenium 常用操作方法的封装

这里这有基本方法,可以自己丰富其他的的基本操作

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/9/8 1:35
# @Author  : Paulson
# @File    : base.py
# @Software: PyCharm
# @define  : function
import time

from selenium import webdriver
from util.get_by_local import GetByLocal


class ActionMethod:
    def open_browser(self, *args):
        """打开浏览器"""
        # self.driver = None
        browser = args[0]
        print(browser)
        if browser == "chrome":
            self.driver = webdriver.Chrome()
        else:
            self.driver = webdriver.Firefox()
            
    def get_url(self, *args):
        """打开 url"""
        url = args[0]
        self.driver.get(url)
        
    def get_element(self, *args):
        """定位方式"""
        key = args[0]
        get_by_element = GetByLocal(self.driver)
        element = get_by_element.get_local_element(key)
        return element
    
    def element_send_keys(self, *args):
        """对元素进行输入"""
        
        key, value = args[0], args[1]
        element = self.get_element(key)
        element.send_keys(value)
        
    def click_element(self, *args):
        """点击元素"""
        key = args[0]
        element = self.get_element(key)
        element.click()
        
    def sleep_time(self):
        """等待"""
        time.sleep(3)
        
    def close_browser(self):
        """关闭浏览器"""
        self.driver.quit()
     
     
    
  1. 对selenium定位方法的通用方法提供的util方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/9/8 1:56
# @Author  : Paulson
# @File    : get_by_local.py
# @Software: PyCharm
# @define  : function

class GetByLocal:
    def __init__(self, driver):
        self.driver = driver
    
    def get_local_element(self, key):
        """
        name=email
        :return:
        """
        by = key.split('=')[0]
        by_value = key.split('=')[1]
        if by == 'id':
            return self.driver.find_element_by_id(by_value)
        elif by == 'name':
            return self.driver.find_element_by_name(by_value)
        elif by == 'className':
            return self.driver.find_element_by_class_name(by_value)
        else:
            return self.driver.find_element_by_xpath(by_value)
        
  1. 执行case

这里使用了反射机制,需要注意传参的类型与数目

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/9/8 2:13
# @Author  : Paulson
# @File    : test_case.py
# @Software: PyCharm
# @define  : function
# import sys
# sys.path.append(r"C:\Users\ybsde\PycharmProjects\Life_Process_Study\StudyPacticePython\selenium_pageObject\selenium_excel")

from util.opera_excel import OperaExcel
from base.base import ActionMethod


class TestCase:
    def __init__(self):
        self.handle_excel = OperaExcel()
        self.action_method = ActionMethod()
        
    def run_main(self):
        
        case_lines = self.handle_excel.get_lines()
        for i in range(1, case_lines):
            is_run = self.handle_excel.get_cell(i, 2)
            if is_run == "yes":
                case_num = self.handle_excel.get_cell(i, 0)
                print(f"开始测试: {case_num}")
                method = self.handle_excel.get_cell(i, 3)
                handle_value = self.handle_excel.get_cell(i, 4)
                send_value = self.handle_excel.get_cell(i, 5)
                # print(method, handle_value, send_value)
                if send_value == '':
                    if handle_value == '':
                        self.run_method(method)
                    else:
                        self.run_method(method, handle_value)
                else:
                    self.run_method(method, handle_value, send_value)

    def run_method(self, method, handle_value=None, send_value=None):
        """反射机制"""
        # print(method, handle_value, send_value)
        action_function = getattr(self.action_method, method)
        if send_value is None:
            if handle_value is None:
                action_function()
            else:
                action_function(handle_value)
        else:
            action_function(handle_value, send_value)
        
            
if __name__ == '__main__':
    test = TestCase()
    test.run_main()

github

点击前往GitHub

以上,希望可以帮到大家
关注、点赞、评论
star

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【2019.09.08】python 基于Excel设计实现的关键字驱动的自动化测试框架 的相关文章

  • 如何在 Django 管理中以表格格式显示添加模型?

    我刚刚开始使用 Django 编写我的第一个应用程序 为我的家庭设计的家务图表管理器 在本教程中 它向您展示了如何添加相关对象 http docs djangoproject com en dev intro tutorial02 cust
  • 创建圆形图像 PIL Tkinter

    Currently I have a zoom feature in my application that works very well however I d like the actual zoom box to be a circ
  • 创建一个打开文件并创建字典的函数

    我有一个正在处理的文件 我想创建一个读取文件并将内容放入字典中的函数 然后该字典需要通过 main 函数传递 这是主程序 它无法改变 我所做的一切都必须与主程序配合 def main sunspot dict file str raw in
  • 在 Python 3 中动态导入模块的问题

    我遇到的情况是 在我的 Python 3 项目中 在运行时必须包含某些模块 我在用着importlib import module为了这 第二次更新 我确实找到了一种方法来做一些接近我想要的事情 一些额外的代码可能会使我的一些链接稍微偏离一
  • 使用opencv计算深度视差图

    我无法使用 opencv 从视差图计算深度 我知道两个立体图像中的距离是用以下公式计算的z baseline focal disparity p 但我不知道如何使用地图计算视差 我使用的代码如下 为我提供了两个图像的视差图 import n
  • 理解@property装饰器和继承[重复]

    这个问题在这里已经有答案了 这里是 Python 3 以防万一它很重要 我试图正确理解如何实现继承 property使用 我已经搜索了 StackOverflow 并阅读了大约 20 个类似的问题 但无济于事 因为他们试图解决的问题略有不同
  • Selenium Webdriver - Python - leboncoin - pb 选择带重音的按钮

    我正在尝试在以下网站上自动填写表格 https www leboncoin fr https www leboncoin fr 我用 Selenium IDE 录制了一个脚本 我有一个通过单击 Se 连接器 按钮并填写我的密码和用户名来自动
  • Pandas Pivot_Table :非数字值的行计算百分比

    这是我在数据框 df 中的数据 Document Name Time SPS2315511 A 1 HOUR SPS2315512 B 1 2 HOUR SPS2315513 C 2 3 HOUR SPS2315514 C 1 HOUR S
  • 属性错误:类型对象“图像”没有属性“打开”

    Exception in Tkinter callback Traceback most recent call last File C Python34 lib tkinter init py line 1482 in call retu
  • Selenium:等到 WebElement 中的文本发生变化

    我在用着selenium使用Python 2 7 从网页上的搜索框检索内容 搜索框动态检索结果并在框本身中显示结果 from selenium import webdriver from selenium webdriver common
  • 当 DetailView 遇到时更新模型字段。 [姜戈]

    我有一个类似的 DetailViewviews py views py class CustomView DetailView context object name content model models AppModel templa
  • InvalidArgumentException:消息:无效参数:“using”必须是字符串

    我对 python 很陌生 试图创建可重用的代码 当我尝试通过传递 Login 类下使用的所有参数来调用 test main py 中的 Login 类和函数 login user 时 我收到错误 InvalidArgumentExcept
  • 为什么 Excel 有时会在工作表名称中添加 $?

    我有时但并非总是发现 Excel 会放置一个 位于工作表名称末尾 但在 Excel 中看不到 只有在尝试使用 C 将其导入 SQL Server 时才可见 我遇到过很多不同的情况 它保留了原始工作表 但也创建了第二个空的 隐藏 工作表 其中
  • 提交表格并上传带有请求的文件

    我正在努力提交特定的表格蟒蛇请求 http www python requests org 我想使用它的网站上的其他表单工作正常 我可以提交登录表单等 这只是我遇到问题的文件上传 显然 提交表单效果很好 因为我从网站收到一条消息 说 请返回
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • 如何从数据框的单元格中获取值?

    我构建了一个条件 从我的数据框中提取一行 d2 df df l ext l ext df item item df wn wn df wd 1 现在我想从特定列中获取一个值 val d2 col name 但结果 我得到一个包含一行和一列
  • 有没有任何方法可以使用 openpyxl 获取 .xlsx 工作表中存在的行数和列数?

    有没有任何方法可以使用 openpyxl 获取 xlsx 工作表中存在的行数和列数 在xlrd中 sheet ncols sheet nrows 将给出列数和行数 openpyxl中有这样的方法吗 给定一个变量sheet 可以通过以下方式之
  • x11 - 导入错误:没有名为“kivy.core.window.window_x11”的模块

    目前我正在尝试构建一个我通过 buildozer 用 Python 和 Kivy 编写的应用程序 无论我在做什么 我都会遇到 window x11 的问题 即使我在代码中注释掉所有与 Windows 相关的内容或执行本文中描述的所有操作 这
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • 如何使用 Python 将我的 GoPro Hero 4 相机直播连接到 openCV?

    我在尝试从我的新 GoPro Hero 4 相机捕获实时流并使用 openCV 对其进行一些图像处理时遇到麻烦 这是我的试用 创建的窗口上没有显示任何内容 import cv2 import argparse import time imp

随机推荐

  • CTF加密解密—CRYPTO—crypto8

    0x00 考察知识点 这道题和上道Ook的题目同源 直接通过Ook底层的解码进行解码 因为Ook本身就是在brainfuck的基础上完成的 0x01 题目 gt lt gt lt gt lt gt lt gt lt gt lt gt lt
  • Ubuntu系统下《汇编语言》环境配置

    说明 1 系统 Ubuntu codists pc lsb release a No LSB modules are available Distributor ID Ubuntu Description Ubuntu 21 10 Rele
  • C语言实现快速排序与归并排序

    快排 代码如下 include
  • 深度学习框架太抽象?其实不外乎这五大核心组件

    转 http www leiphone com news 201701 DZeAwe2qgx8JhbU8 html 导语 一般深度学习框架都会包括的五大核心组件都有哪些 许多初学者觉得深度学习框架抽象 虽然调用了几个函数 方法 计算了几个数
  • 电阻中联分压电路的计算

    方法一 如下图所示 大概1K 分压1V Vp Vin x R2 R1 R2 3Vx2K 1K 2K 2V 结论 R2增加P增加 R1减小 P增加 方法二 用工具计算 如下图
  • 软件设计师备考——第七章 面向对象

    软件设计师备考 第七章 面向对象 一 面向对象基础 1 面向对象的基本概念 2 类 3 对象 4 消息 二 方法 1 方法重载 2 封装 3 继承 4 多态 5 静态 动态绑定 三 面向对象设计 1 面向对象设计原则 2 面向对象分析 3
  • Git:husky > npm run -s precommit

    git commit前检测husky与pre commit 问题 我是通过vs code 编辑器中进行提交代码 以往都是在勾选上需要提交的文件后 并输入提交描述 点击commit就提交成功了 但是今天点击commit突然报错 思路 先想办法
  • centos red5 添加成为服务并且设置开机自启动

    1 vi etc init d red5 创建tomcat red5 2 在red5中添加如下的内容 一定要在头部添加java环境的引用 否则可能启动不成功 说明 其中的JAVA HOME要设置为本机真实的java路径 RED5 HOME也
  • matlab 画随机数图,怎么用matlab生成100个标准正态分布的随机数并画出直方图

    正态分布是normpdf x mu sigma mu sigma 默认是 0 1例子ez 由热心网友提供的答案1 生成一组随机数 正态分布 data normrnd 0 1 1 500 绘制直方图hist d f normrnd 0 1 1
  • StrongSORT(deepsort强化版)学习体会

    少废话 先做备忘录 StrongSORT deepsort强化版 浅实战 代码解析 参考 https blog csdn net weixin 50862344 article details 127070391 https github
  • 关于angular2路由传参

    在开发一个网站中遇到需要在路由传参的需求 一个示例列表组件 其中每个示例项点击进入均可加载该示例详情页 在路由中传参有3种方法 1 routerLink 单一参数 在 a a 中加routerLink进行跳转 其中 exampledetai
  • SpringBoot3.0都正式发布了,尝鲜之前先搞明白AQS底层再说!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 写在前面 上一篇文章聊了一下java并发中常用的原子类的原理和Java 8的优化 具体请参见文章 为什么程序员招聘都要5年经验起 因为他们懂Java8底层优化 这
  • 测试工程师的核心竞争力

    基础能力 1 测试策略设计能力 测试策略设计能力是指 对于各种不同的被测软件 能够快速准确地理解需求 并在有限的时间和资源下 明确测试重点以及最适合的测试方法的能力 例如 测试要具体执行到什么程度 测试需要借助于什么工具 如何运用自动化测试
  • git - 简明指南

    安装 下载 git OSX 版 下载 git Windows 版 Linux自己通过yum apt get等命令安装 创建新仓库 创建新文件夹 打开 然后执行 git init 以创建新的 git 仓库 检出仓库 执行如下命令以创建一个本地
  • SpringBoot使用Slf4j进行日志配置

    首先在resource文件夹下面创建logback spring xml文件
  • eslint+prettier前端代码规范配置

    前端代码规范配置 参考来源 https blog csdn net u013361179 article details 108885859 前言 eslint的作用 eslint作用是按照一定规则 检测代码质量 prettier的作用 p
  • Hyperledger Fabric网络快速启动

    目录 1 网络服务配置 2 关联的docker compose base yaml 各Peer节点容器设置如下信息 3 被关联的Peer base yaml 4 启动网络 2 完成通道的创建 2 1将节点加入应用通道 更新锚节点 2 为什么
  • 【数据结构实验】哈希表设计

    数据结构实验 哈希表设计 简介 针对本班同学中的人名设计一个哈希表 使得平均查找长度不超过R 完成相应的建表和查表程序 文末贴出了源代码 需求分析 假设人名为中国人姓名的汉语拼音形式 待填入哈希表的人名共有三十个左右 取平均查找长度上限为2
  • python将dataframe输出到word文档中

    python将文本 dataframe输出到word文档中 加载基本库 from docx import Document import pandas as pd temp name link dir south beizhu test d
  • 【2019.09.08】python 基于Excel设计实现的关键字驱动的自动化测试框架

    之前写过PO模式 数据驱动的测试框架 最近要做一个测试平台 先写一个关键字驱动的测试框架练练手 Excel 样式展示 如图 结果展示 代码 结构 读取excel usr bin env python coding utf 8 Time 20