Selenium + Python 自动化测试22(PO+数据驱动)

news2025/4/7 0:51:42

        我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。

上一篇我们讨论了PO模式和unittest框架结合起来使用。

         本篇文章我们综合一下之前学习的内容,如先将PO模式、数据驱动思想和我们生成HTML报告融合起来,综合的灵活的使用之前学习的内容。

1、先回忆一下之前的脚本:

         如下图所示:我们有四个脚本文件:page_object、login_object、测试用例以及执行入口文件。

         我们这次加入数据驱动的思想,主要改测试用例层就可以了。这样我们的代码就可以大致分为:基础页面层、数据层、业务页面层、测试用例层。使用分层的思想开始看起来有点麻烦,但是正是设计好了以后,后面使用起来相当方便、灵活。      

2、测试用例层分离出数据模块

开始我们的测试用例脚本如下:

def login(driver,username,password):#登录的函数,基本是按流程

    login_page=LoginPage(driver)

    login_page.open()

    login_page.enter_username(username)

    login_page.enter_password(password)

    login_page.submit()



#使用unittest的框架,每个案例的标准形式

class LoginTest(unittest.TestCase):

    def setUp(self):

        self.driver=webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")

        print("登录测试开始")



    #输入正确的密码登录成功测试

    def test_login_Y(self):

        username = "standard_user"

        password = "secret_sauce"

        print("登录的用户名是:%s,密码是:%s"%(username,password))

        driver=self.driver

        login(driver,username,password)    #调用登录函数


        time.sleep(3)

        #加入断言  //*[@id="header_container"]/div[1]/div[2]/div

        # 验证有显示:Products

        UIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text

        self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail")



    def tearDown(self)#浏览器退出

        self.driver.quit()

        print("登录测试结束")

加入ddt模式,就是黄色部分修改:

1)先将Excel数据准备好

数据名称login_data.xlsx,放到本项目下面

  

2)参考之前编写获取Excel数据的方法:
#coding=utf-8

import xlrd



#通过Excel来获取数据,希望返回字典组成的列表:[{"username":" standard_user","password":"secret_sauce"},

# {"username":" visual_user","password":"secret_sauce"},{"username":" error_user","password":"password_NG"}]



def get_excel_data(filename,sheetnum):

    path = 'login_data.xlsx'

    book_data = xlrd.open_workbook(path) #打开文档

    book_sheet=book_data.sheet_by_index(0) #打开Excel中第一个表

    rows_num = book_sheet.nrows  #sheet1 行数,row:行

    rows0 = book_sheet.row_values(0) #第一行的各个名称作为字典的键

    rows0_num = len(rows0)   #第一行列表的长度即为数据的列数



    data_list = [ ]  #存放读取的数据,列表的每一项为一个字典

    for i in range(1,rows_num):

        rows_data = book_sheet.row_values(i) #取出每一行的值作为列表

        print(rows_data)  #看下数据,是列表吧

        rows_dir ={ }

        for y in range(0,rows0_num):           #将每一列的值与每一行对应起来

            rows_dir[rows0[y]] = rows_data[y]    #键值对应

        data_list.append(rows_dir)               #每个字典插入到列表中

        print(rows_dir.items())   #看下数据,字典有哪些

    return data_list

3)改写测试用例脚本

下面所示黄色的部分有所改写,其它只是之前的部分;

主要是读取Excel数据>unittest 框架中测试用例引用Excel数据>用户名和密码引用Excel数据>所有数据循环执行一遍

#读取Excel文件

excel_data=get_excel_data("",0)



def login(driver,username,password):#登录的函数,基本是按流程

    login_page=LoginPage(driver)

    login_page.open()

    login_page.max_window()

    login_page.enter_username(username)

    login_page.enter_password(password)

    login_page.submit()



#使用unittest的框架,每个案例的标准形式

@ddt

class LoginTest(unittest.TestCase):

    def setUp(self):

        self.driver=webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")

        print("登录测试开始")



    #输入正确的密码登录成功测试

    @data(*excel_data)       #数据参数化,使用读取的数据,列表中的数据分别执行一次,每次是一个字典

    def test_login_Y(self,dic):

        #username = "standard_user"   #不再使用固定数据

        #password = "secret_sauce"    #不再使用固定数据

        #print("登录的用户名是:%s,密码是:%s"%(username,password))

        driver=self.driver

        print("此次测试的用户名%s" % dic.get("username"))

        login(driver,dic.get("username"),dic.get("password"))    #调用登录函数,这里修改为调用Excel中数据

        time.sleep(3)

        #加入断言  //*[@id="header_container"]/div[1]/div[2]/div

        # 验证有显示:Products

        UIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text

        self.assertEqual("Products", UIResult, "密码正确登录验证失败,fail")

执行结果如下:

今天就先学习到这里吧。后面我们再做优化。

每天进步一点点,加油!

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

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

相关文章

​2024年AI新蓝海:三门生意如何借AI之力,开启变现新篇章

【导语】在这个日新月异的时代,人工智能(AI)已不再是遥不可及的未来科技,而是正逐步渗透到我们生活的方方面面,成为推动产业升级的重要力量。你是否还在为传统行业的未来而忧虑?别担心,AI正以其…

Pandas DataFrame 数据转换处理和多条件查询

工作中需要处理一个比较大的数据,且当中需要分析的日期类型字段为字符串型,需要进行转换,获得一个新的字段用于时间统计。我们应用 datetime.datetime.strptime 函数进行转换。 数据读取与时间列补充代码如下: import pandas as…

原来ChatGPT是这么评价《黑神话:悟空》的啊?

《黑神话:悟空》一经上线便迅速吸引了全球的目光,成为了今日微博热搜榜上的焦点话题。作为中国首款现象级的中国3A大作,它的发布无疑引发了广泛的关注与讨论。 《黑神话:悟空》,这款3A国产游戏大作,由国内游…

根据状态的不同,显示不同的背景颜色

文章目录 前言HTML模板部分JavaScript部分注意:主要差异影响如何处理示例 总结 前言 提示:这里可以添加本文要记录的大概内容: 实现效果: 提示:以下是本篇文章正文内容,下面案例可供参考 根据给定的状态…

文件操作2(函数的专栏)

1、文件的打开和关闭 1.1文件指针 在缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”取名为FILE。 例如, VS2013编译环境提供的 stdio. h头文件中有以下的文件类型申明: struct _ iobuf { char *_ ptr; int _…

【YOLO5 项目实战】(6)YOLO5+StrongSORT 目标追踪

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】(1)YOLO5 环境配置与检测 【YOLO5 项目实战】(2)使用自己的数据集训练目标检测模型 【YOLO5 项目实战】(6)Y…

数据库机器上停service360safe

发现有个数据库的负载较高,发现有360safe,就准备停了该服务再观察 [rootdb1 ~]# ps -ef |grep 360 root 970 1 0 15:12 ? 00:00:10 /opt/360safe/360entclient root 976 970 5 15:12 ? 00:18:42 /opt/360…

Linux之RabbitMQ集群部署

RabbitMQ 消息中间件 1、消息中间件 消息(message): 指在服务之间传送的数据。可以是简单的文本消息,也可以是包含复杂的嵌入对象的消息 消息队列(message queue): 指用来存放消息的队列,一般采用先进先出的队列方式,即最先进入的…

关于springboot的异常处理以及源码分析(一)

一、什么是异常处理 1、文档定义 首先我们先来看springboot官方对于异常处理的定义。springboot异常处理 在文档的描述中,我们首先可以看到的一个介绍如下: By default, Spring Boot provides an /error mapping that handles all errors in a sensib…

优思学院|如何在30分钟内评审一家供应商?SQE必需知道的11点

在供应商评审中,特别是时间有限的情况下,SQE(供应商质量工程师)需要通过高效的观察和分析来快速评估供应商的能力。在《哈佛商业评论》中,R. Eugene Goodson 的一篇“Read a Plant—Fast”文章正好提供了一个极为实用的…

python实现指数平滑法进行时间序列预测

python实现指数平滑法进行时间序列预测 一、指数平滑法定义 1、指数平滑法是一种常用的时间序列预测算法,有一次、二次和三次平滑,通过加权系数来调整历史数据权重; 2、主要思想是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数…

基于x86 平台opencv的图像采集和seetaface6的人脸识别功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的人脸识别功能,opencv通过读取本地图像,将采集的本地图像送给seetaface6的人脸识别模块从而实现人脸识…

FreeRTOS学习笔记(四)——延时函数,列表,软件定时器,低功耗模式,内存管理

FreeRTOS学习笔记(四)——延时函数,列表,软件定时器,低功耗模式,内存管理 文章目录 FreeRTOS学习笔记(四)——延时函数,列表,软件定时器,低功耗模…

尚硅谷Java面试题第四季-MySQL面试题

1.如何建立复合索引,一般加在哪些字段?建索引的理论依据或者经验 2.Innodb的行锁到底锁了什么? 结论: InnoDB的行锁,是通过锁住索引来实现的,如果加锁查询的时候没有使用到索引,会将整个聚簇索引都锁住&am…

【python报错已解决】`Traceback (most recent call last)`

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 你是否在运行Python程序时遇到了Traceback (most recent call last)的错误?这个错误通常表明你的程序中有一个…

为什么大负载通电瞬间电压跌落,前级MOS开关如何设计

文章目录 1.1 前言1.2 简单典型电路1.3 分析优劣性1.4 优化后的开关电路1.5 具体原理分析1.6 实验验证效果1.7 适用应用场景 1.1 前言 电子产品设计电路某负载需要断电省下或异常下电复位,这时候会考虑在负载供电前端增加一个开关对其进行供电做控制,典…

超声波模块HC_SR04(hal库)

超声波模块HC_SR04 原理 1.触发信号:拉高至少10us的高电平 2.回响信号处理:计算高电平时长 3.计算距离:时间*速度(声速)/2(注意单位问题) 代码实现 方法1.下拉输入 配置 用于延时微秒us和…

第四届机械制造与智能控制国际学术会议(ICMMIC 2024)

目录 重要信息 大会介绍 主办单位 协办单位 大会主席 主讲嘉宾 征稿主题 会议日程 参会方式 重要信息 会议时间:2024年9月27-29日 大会官网:www.icmmic.com(点击查看,大会信息,报名,投稿&#x…

【数据结构初阶】单链表接口实现超详解

文章目录 1. 顺序表问题与思考2.单链表2. 1 概念与结构2.1.1 结点2.1.2 链表的性质 3. 单链表实现3. 1 单链表初始化3. 2 单链表的打印3. 3 头插3. 4 创建新节点3. 5 尾插3. 6 头删和尾删3. 7 查找3. 8 在指定位置之后插入或删除3. 9 在指定位置前面插入或删除指定位置3. 10 销…

推荐一款好用的mac解压缩软件

文章目录 介绍软件功能安装下载使用注意事项1.打开系统设置选择隐私与安全性2.点击添加扩展3.勾选访达扩展 小结 介绍 FastZip for Mac集压缩、解压、预览、加密压缩、分卷压缩、固实压缩、右键压缩解压、多线程压缩等功能于一体,绝佳的设计、便捷的操作&#xff0…