Pytest 读取excel文件参数化应用

2024-06-16 00:12

本文主要是介绍Pytest 读取excel文件参数化应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文是基于Pytest框架,读取excel中的文件,传入页面表单中,并做相应的断言实现。

1、编辑媒体需求

首先明确一下需求,我们需要对媒体的表单数据进行编辑,步骤如下:

具体表单如下图所示

1、登录

2、点击我的媒体

3、点击媒体

4、点击编辑媒体

5、设置标题

6、设置媒体标题分类

7、设置标签001

8、设置产生日期

9、上传图片

10、描述

11、状态

12、启动评论

13、缩略图时刻

14、允许下载

然后点击"Update Media"后,就会跳转到这个媒体的界面上。可以查看提交的配置是否生效。

2、编辑媒体V1.0

第一版先定位到元素并手工实现。

2.1 登录

2.1.1  conftest.py配置

首先在conftest.py做好公共方法的配置工作,也就是登录退出等一些常用的方法。

conftest.配置特点

conftest.py配置脚本名称是固定的,不能改名称

conftest.py与运行的用例要在同一个package下,并且有————init__.py文件

测试用例文件不需要import conftest.py就能自动找到配置好的@pytest.fixture

import timeimport pytest
from selenium import webdriver@pytest.fixture(scope='session')
def driver():driver=webdriver.Firefox()driver.maximize_window()driver.implicitly_wait(10)yield drivertime.sleep(10)   # 如果需要观察程序运行过程,那么加时间等待;代码调试弯沉后,去掉时间等待。# driver.quit()@pytest.fixture(scope='session')
def login(driver):driver.get("https://svr-6-9010.share.51env.net/accounts/login/")# 3、输入用户名driver.find_element_by_id("id_login").send_keys("changcheng1211")# 4、输入密码driver.find_element_by_id("id_password").send_keys("changcheng1211")driver.find_element_by_id("id_captcha_1").send_keys("changcheng1211")# 5、点击登录driver.find_element_by_class_name("primaryAction").submit()yield driver

介绍一下

Pytest Fixture

作用

为每个测试用例完成一些公共的前置或者后置工作

限制范围

scope="function"每个方法调用一次

scope="class"每个类调用一次

scope="module"每一个.py文件调用一次

scope="session"多个.py文件只调用一次

用法

import pytest

打开浏览器  def driver():

登录功能   def login():

2.1.12 pytest之全局配置文件pytest.ini

[pytest]
addopts = -s -v
testpaths = test_cases/test_update_media.py

-s:表示输出调试信息,用于显示测试函数中print()打印的信息

-v:未加前只打印模块名,加v后打印类名、模块名、方法名,显示更详细的信息

-q:表示只显示整体测试结果

-vs:这两个参数可以一起使用

-n:支持多线程或者分布式运行测试用例(前提需安装:pytest-xdist插件)

–html:生成html的测试报告(前提需安装:pytest-html插件) 如:pytest -vs --html ./reports/result.html

testpaths 是指定执行的路径的。

2.2  编辑媒体test_update_media.py

首先在测试的目录下新建一个测试文件test_update_media.py,D:\python\autoFuncTest2\test_cases\test_update_media.py

from selenium.webdriver.support.select import Selectclass TestUpDateMedia:def test_update_meida(self,login):# 1、登录# 2、点击我的媒体login.find_element_by_partial_link_text('我的媒体').click()# 3、点击媒体login.find_element_by_class_name('item-thumb').click()# 4、点击编辑媒体login.find_element_by_link_text('编辑媒体').click()# 5、设置标题login.find_element_by_id('id_title').clear()login.find_element_by_id('id_title').send_keys('小猴子.MP4')# 6、设置媒体标题分类id_category = login.find_element_by_id('id_category')# 如果用ctrl键,可以多选,用click()方法不能多选。# Selenium给我们提供了一种方法 select_by_visible_text('Film')  可以多选select_category = Select(id_category)select_category.select_by_visible_text('Film')select_category.select_by_index(0)  # Artselect_category.select_by_value('2') # Documentary# 7、设置标签001id_new_tags = login.find_element_by_id('id_new_tags')id_new_tags.clear()id_new_tags.send_keys('001')# 8、设置产生日期id_add_date = login.find_element_by_id('id_add_date')id_add_date.clear()id_add_date.send_keys('2000/06/04 20:49')# 9、上传图片login.find_element_by_id('id_uploaded_poster').send_keys('D:\\niupeng2.png')# 10、描述id_description = login.find_element_by_id('id_description')id_description.clear()id_description.send_keys('今天我们去动物园,参观了小猴子')# 11、状态id_state = login.find_element_by_id('id_state')Select(id_state).select_by_visible_text('私有')# 12、启动评论login.find_element_by_id('id_enable_comments').click()# 13、缩略图时刻id_thumbnail_time = login.find_element_by_id('id_thumbnail_time')id_thumbnail_time.clear()id_thumbnail_time.send_keys('50')# 14、允许下载login.find_element_by_id('id_allow_download').click()# 15、点击Update Medialogin.find_element_by_class_name('primaryAction').submit()

下面介绍一下代码的实现

from selenium.webdriver.support.select import Selectclass TestUpDateMedia:def test_update_meida(self,login):

首先导入一个Select的包,因为里面有用到下拉框选择。

新建一个class TestUpDateMedia  的类。

def test_update_meida(self,login):    

并在里面声明一个‘test_update_meida’的方法,它继承自conftest.py的login的类。这里是直接调用登录功能。

        # 2、点击我的媒体login.find_element_by_partial_link_text('我的媒体').click()# 3、点击媒体login.find_element_by_class_name('item-thumb').click()# 4、点击编辑媒体login.find_element_by_link_text('编辑媒体').click()

先点我的媒体,点击媒体,再点击编辑媒体

        # 5、设置标题login.find_element_by_id('id_title').clear()login.find_element_by_id('id_title').send_keys('小猴子.MP4')

设置标题前应先清空输入框

        # 6、设置媒体标题分类id_category = login.find_element_by_id('id_category')# 如果用ctrl键,可以多选,用click()方法不能多选。# Selenium给我们提供了一种方法 select_by_visible_text('Film')  可以多选select_category = Select(id_category)select_category.select_by_visible_text('Film')select_category.select_by_index(0)  # Artselect_category.select_by_value('2') # Documentary

设置媒体的标题分类

这里涉及到下拉框的操作

下拉框操作
    假设有一个元素使select标签,这时需要选择其中一个/多个选项
    这时就不是click或者sendKeys这样的操作,而是应该使用”选择“操作
    代码实现步骤
        1.首先定位下拉框
            WebElement element = driver.findElement(By...)
        2.把定位到的元素转成下拉框类型
            Select select = new Select(element);
        3、执行”选择“操作
            select.deselectAll()
                清空选择
            选择某个元素,有三种方式
                select.select_by_visible_text('界面可见的文字')
                select.select_by_index(0) #选项的value属性
                select.select_by_value('2')  #第几个选项

        # 7、设置标签001id_new_tags = login.find_element_by_id('id_new_tags')id_new_tags.clear()id_new_tags.send_keys('001')# 8、设置产生日期id_add_date = login.find_element_by_id('id_add_date')id_add_date.clear()id_add_date.send_keys('2000/06/04 20:49')

设置标签和产生日期。

        # 9、上传图片login.find_element_by_id('id_uploaded_poster').send_keys('D:\\niupeng2.png')# 10、描述id_description = login.find_element_by_id('id_description')id_description.clear()id_description.send_keys('今天我们去动物园,参观了小猴子')# 11、状态id_state = login.find_element_by_id('id_state')Select(id_state).select_by_visible_text('私有')

正常定位元素并发送值就可以。

        # 12、启动评论login.find_element_by_id('id_enable_comments').click()# 13、缩略图时刻id_thumbnail_time = login.find_element_by_id('id_thumbnail_time')id_thumbnail_time.clear()id_thumbnail_time.send_keys('50')# 14、允许下载login.find_element_by_id('id_allow_download').click()# 15、点击Update Medialogin.find_element_by_class_name('primaryAction').submit()

到这后,第一版已经完成了。已经实现了基本的功能。

在命令行界面输入pytest,会显示执行完成。

3、编辑媒体V2.0

简要说明一下代码的结构。首先新建了一个叫autoFuncTest2的工程。里面按顺序resource下面有test_data.xlsx的测试数据文件。test_cases下面的conftest.py的配置文件和test_update_media2.py的测试用例文件,utils里面有一个专门读取xlsx文件的excel_utils.py文件。最后是一个pytest.ini的全局配置文件。

执行顺序为,首先命令行,输入pytest,会读取pytest.ini配置文件,按照里面的路径执行测试test_cases下面的测试用例test_update_media2.py。test_update_media2.py再调用conftest.py进行登录,登录完成后调用utils里面有一个专门读取xlsx文件的excel_utils.py文件,读取resource下面有test_data.xlsx的测试数据文件,进行操做。

3.1 pytest之全局配置文件pytest.ini

把代码的执行路径改了。因为我们要重新编写V2.0版本。我们要将待执行的命令指向要执行的文件。

[pytest]
addopts = -s -v
testpaths = test_cases/test_update_media2.py

3.2 测试数据文件test_data.xlsx

这个是要读取的excel文件

其中,里面有一些参数,是我们要读取的。

title, category, tag, date, image, description, state, enable_comments, thumbnail_time, allow_download,verify_state, verify_date, verify_enable_comments,verify_allow_download

3.3 test_update_media2.py

这个要从excel里面读取数据,进行参数化。

import timeimport pytest
from selenium.webdriver.support.select import Selectfrom utils import excel_utilsclass TestUpDateMedia:test_data = excel_utils.read(__file__)@pytest.mark.parametrize('title, category, tag, date, image, description, state,'' enable_comments, thumbnail_time, allow_download,'' verify_state, verify_date, verify_enable_comments,'' verify_allow_download', test_data)def test_update_media(self,login,title, category, tag, date, image, description,state, enable_comments, thumbnail_time, allow_download,verify_state, verify_date, verify_enable_comments,verify_allow_download):# 1、登录# 2、点击我的媒体if 'Media was edited!' in login.page_source:login.find_element_by_xpath('//i[text()="menu"]').click()# 如果页面出现了'Media was edited!',那么需要先点击左上角的”i“标签,三个横线的按钮login.find_element_by_partial_link_text('我的媒体').click()# except Exception as e:#     login.find_element_by_xpath('//i[text()="menu"]').click()# 3、点击媒体login.find_element_by_class_name('item-thumb').click()# 4、点击编辑媒体login.find_element_by_link_text('编辑媒体').click()# 5、设置标题login.find_element_by_id('id_title').clear()login.find_element_by_id('id_title').send_keys(title)# 6、设置媒体标题分类id_category = login.find_element_by_id('id_category')# 如果用ctrl键,可以多选,用click()方法不能多选。# Selenium给我们提供了一种方法 select_by_visible_text('Film')  可以多选select_category = Select(id_category)select_category.deselect_all()for c in category.split(','):select_category.select_by_visible_text(c)# select_category.select_by_index(0)  # Art# select_category.select_by_value('2') # Documentary# Experimental,Music,TV# 7、设置标签001id_new_tags = login.find_element_by_id('id_new_tags')id_new_tags.clear()id_new_tags.send_keys()# 8、设置产生日期id_add_date = login.find_element_by_id('id_add_date')id_add_date.clear()id_add_date.send_keys(date)# 9、上传图片login.find_element_by_id('id_uploaded_poster').send_keys(image)# 10、描述id_description = login.find_element_by_id('id_description')id_description.clear()id_description.send_keys(description)# 11、状态id_state = login.find_element_by_id('id_state')Select(id_state).select_by_visible_text(state)# 12、启动评论id_enable_comments = login.find_element_by_id('id_enable_comments')if enable_comments == '启用评论' and id_enable_comments.is_selected():passelif enable_comments == '不启用评论' and  not id_enable_comments.is_selected():passelse:id_enable_comments.click()# 13、缩略图时刻id_thumbnail_time = login.find_element_by_id('id_thumbnail_time')id_thumbnail_time.clear()id_thumbnail_time.send_keys(thumbnail_time)# 14、不允许下载                            allow_download,id_allow_download = login.find_element_by_id('id_allow_download')if allow_download == '允许下载' and id_allow_download.is_selected():passelif allow_download == '不允许下载' and not id_allow_download.is_selected():passelse:id_allow_download.click()# 15、点击Update Medialogin.find_element_by_class_name('primaryAction').submit()# 16.断言# 检查标题assert login.find_element_by_css_selector('.media-title-banner h1').text == title# 检查分类for c in category.split(','):assert c in login.page_source# 检查标签assert tag in login.page_source# 检查日期assert verify_date in login.page_source# 检查描述assert description in login.page_source# 检查状态if state == '公开':assert 'private' not in login.page_sourceassert 'unlisted' not in login.page_sourceelse:assert verify_state in login.page_source# 检查评论assert verify_enable_comments in login.page_source# 检查是否允许评论  form-textareaif 'Add a comment...' == verify_enable_comments:assert login.find_element_by_class_name('form-textarea').get_attribute('placeholder') == 'Add a comment...'else:assert verify_enable_comments in login.page_source# 检查是否允许下载if verify_allow_download == '允许下载':# login.find_element_by_xpath('//span[text()="下载"]')assert '下载' in login.page_sourceelse:assert '下载' not in login.page_source

下面解释一下

@pytest.mark.parametrize('excel中的标题',test_data)

接下来将这些参数传进去。并将里面的响应参数替换成传进去的参数。

def test_update_media(self,login,title, category, tag, date, image, description,state, enable_comments, thumbnail_time, allow_download,verify_state, verify_date, verify_enable_comments,verify_allow_download):

有时隐式等待一些元素需要用一些条件触发,可以用一些条件判断代替。

if 'Media was edited!' in login.page_source:login.find_element_by_xpath('//i[text()="menu"]').click()

有时一个参数里面有多个值,比如category里面有Experimental,Music,TV,下拉框里面需要选多个值,需要用for循环遍历,并用逗号隔开他们。

        # 6、设置媒体标题分类id_category = login.find_element_by_id('id_category')# 如果用ctrl键,可以多选,用click()方法不能多选。# Selenium给我们提供了一种方法 select_by_visible_text('Film')  可以多选select_category = Select(id_category)select_category.deselect_all()for c in category.split(','):select_category.select_by_visible_text(c)

有时需要判断同时页面上是否勾选,如果勾选,并且excel中要求启用评论,那么不操作,反之就勾选。这里面涉及到一个多重判断。

        # 12、启动评论id_enable_comments = login.find_element_by_id('id_enable_comments')if enable_comments == '启用评论' and id_enable_comments.is_selected():passelif enable_comments == '不启用评论' and  not id_enable_comments.is_selected():passelse:id_enable_comments.click()

这篇关于Pytest 读取excel文件参数化应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064975

相关文章

Mac excel 同时冻结首行和首列

1. 选择B2窗格 2. 选择视图 3. 选择冻结窗格 最后首行和首列的分割线加粗了就表示成功了

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

ABAP怎么把传入的参数刷新到内表里面呢?

1.在执行相关的功能操作之前,优先执行这一段代码,把输入的数据更新入内表里面 DATA: lo_guid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_guid.CALL METHOD lo_guid->check_changed_data.CALL M

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用。如果你看不懂,请留言。 完整代码: <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><ti

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述。以下是从不同角度对气象站的种类和应用范围的介绍: 一、气象站的种类 根据用途和安装环境分类: 农业气象站:专为农业生产服务,监测土壤温度、湿度等参数,为农业生产提供科学依据。交通气象站:用于公路、铁路、机场等交通场所的气象监测,提供实时气象数据以支持交通运营和调度。林业气象站:监测林区风速、湿度、温度等气象要素,为林区保护和

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:+UseCompressedOops的作用 JVM参数-XX:+UseCompressedOops的作用是启用对象指针压缩(Ordinary Object Pointers compression)。这一特性主要应用于64位的Java虚拟机中,目的是为了减少内存使用。在传统的64位系统中,对象引用(即指针)通常占用8字节(64位),而大部分应用程序实际上并不需要如此大的地址空间

LeetCode--171 Excel表列序号

题目 给定一个Excel表格中的列名称,返回其相应的列序号。例如,A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ... 示例 示例 1:输入: "A"输出: 1示例 2:输入: "AB"输出: 28示例 3:输入: "ZY"输出: 701 class Solution {public:int titleToNumber(strin

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<