自动化测试笔记(selenium+pytest+Allure)

这篇具有很好参考价值的文章主要介绍了自动化测试笔记(selenium+pytest+Allure)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


自动化测试:所有采用程序或代码来替代或辅助人工测试的行为称为自动化测试。
自动化测试好处:提升工作效率
主要应用环节:回归测试、兼容性测试、冒烟测试
适合自动化测试的项目特点:
1、项目需求稳定
2、项目周期较长
3、脚本可以重复使用

selenium:是由thoughtworks公司2004年左右开发的基于浏览器的自动化测试工具,提供了一整套的用于
          web UI自动化的函数。
    组成:webdriver:基于浏览器的自动化测试工具,提供了一整套的用于web UI自动化的函数。
          selenium IDE:firefox浏览器的插件,可以录制脚本,selenium3.0已被淘汰。
          selenium grid:用于管理和执行自动化测试用例(课程中讲jenkins)
    
    selenium是一个C/S模式工具,脚本是C端,浏览器是S端,使用json wire协议。

搭建自动化测试环境:
1、安装python和编译器
2、安装浏览器,将浏览器的安装路径添加到path变量中。
3、将浏览器的驱动文件存放路径添加到path变量中
4、导入selenium库(pip install selenium)
        离线导入:下载selenium tar包,解压。
                   python setup.py build
                   python setup.py install

注意:浏览器驱动文件与浏览器版本需要匹配,工作中浏览器版本不能频繁升级


chrome浏览器驱动文件下载地址:http://chromedriver.storage.googleapis.com/index.html
https://npm.taobao.org/mirrors/chromedriver
火狐浏览器驱动文件对应地址:https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html
                   下载地址:  https://github.com/mozilla/geckodriver/releases

edge浏览器驱动文件下载地址:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

元素定位:
定位方法:
find_element():单元素定位,返回值为定位到的元素对象
find_elements():多元素定位,返回值为列表,列表中是定位到的元素对象

八种元素定位方式:
1、id定位:find_element(By.ID,'id属性值')
2、name定位:find_element(By.NAME,'name属性值')
3、class定位:find_element(By.CLASS_NAME,'name属性值')
            class属性值中有空格时必须使用点代替
4、tag定位:find_element(By.TAG_NAME,'元素的标签值')
5、link_text定位:find_element(By.LINK_TEXT,'超链接文字')
6、partial_link_text定位:find_element(By.PARTIAL_LINK_TEXT,'超链接部分文字')
7、css定位:find_element(By.CSS_SELECTOR,'css值')
8、xpath定位:find_element(By.XPATH,'xpath值')

Day2:
frame框架(标签是iframe或frame)切换:
切换方法:
切入框架:    switch_to.frame()
    1、id切入:switch_to.frame('frame框架id属性值')
    2、name切入:switch_to.frame('frame框架name属性值')
    3、先定位frame框架,再切入:switch_to.frame(frame框架对象)
    4、索引切入:switch_to.frame(索引值)

    注意:frame框架存在嵌套的情况下需要一层一层切入

返回父框架:switch_to.parent_frame()
切出框架:switch_to.default_content()


网页切换:
1、获取打开网页的句柄,得到一个由网页对象组成的列表,按照网页打开顺序,索引从0开始
handles = driver.window_handles

2、切换网页:switch_to.window(handler[索引值])
3、close():关闭网页

网页常用操作:
网页最大化:maximize_window(),避免由于没有最大化显示,网页上元素堆叠,影响元素定位。浏览器打开后第一件事情就是网页最大化。
网页最小化:minimize_window()
设置网页大小:set_window_size(1024,768)
网页刷新:refresh()
网页前进:forword()
网页后退:back()
获取网页的url:current_url
获取网页的标题:titile
网页截图:get_screenshot_as_file()

页面元素常用操作:
1、获取元素上的文字:text
2、获取元素的属性值:get_attribute()
3、清除元素内容:clear() ,避免由于浏览器缓存,造成重复输入,原则上输入前都清除一下
4、判断元素是否被选中:is_selected()
5、判断元素是否显示:is_displayed()
6、判断元素是否可用:is_enabled()


鼠标模拟操作:
在ActionChains库中提供了模拟鼠标操作的方法
鼠标右击:context_click()
鼠标双击:double_click()
鼠标悬停:move_to_element()
按住鼠标不松开:click_and_hold()
拖拽某个元素一定的距离:drag_and_drop_by_offset()
拖拽某个元素到另一个元素上:drag_and_drop()
移动鼠标距离某个元素左上角一定像素的位置上:move_to_element_with_offset()
发送某些键到当前焦点元素:send_keys()
点击当前焦点元素:click()
松开鼠标:release()
执行以上动作:perform()

火狐浏览器下像素距离测量插件:Measure-it

警告窗口处理:
1、切入警告窗口,获取窗口对象
alert_window = switch_to.alert
2、点击确定:alert_window.accept()
3、点击取消:alert_window.dismiss()
4、获取提示信息:alert_window.text
5、发送键:alert_window.send_keys()

模拟键盘操作:
send_keys(Keys.xxx)

下拉菜单操作:
1、直接定位子菜单,通过点击选择
2、当无法直接定位子菜单时,可以采取二次定位方式,先定位子菜单的上层元素,再定位子菜单
    find_element().find_element()
3、对于标签为select的元素(一般是下拉菜单或多选框),可以使用select类下的方法来选择。
常用的方法:
select_by_index():通过索引选择
select_by_value():通过value属性值选择
select_by_visible_text():通过文字选择
deselect_all():取消所有选择
deselect_by_index():通过索引取消选择,适用于多选的情况
deselect_by_value():通过value属性值取消选择,适用于多选情况
deselect_by_visible_text():通过文字取消选择,适用于多选情况
first_select_option: 返回第一个选择
all_select_options:返回所有选择

注意:用select类下的方法操作下拉菜单或多选框时,需要先定位下拉菜单或多选框

java script应用:
在ui自动化测试过程中,可能会通过改变元素的属性值或删除元素的某个属性值来达到简化操作的目的。
常用方法:删除元素的属性值、修改元素的属性值、添加属性值
1、删除元素属性js:
js = 'arguments[0].removeAttribute();'

2、修改元素的属性值、添加属性值(属性存在就是修改,属性不存就是添加):
js = 'arguments[0].setAttribute();'

3、滚动浏览器的滚动条:
'window.scrollTo();'
4、移动滚动条到某个元素可以显示出来的位置
'arguments[0].scrollIntoView();'

文件上传:
1、如果文件路径输入框的type属性为file,可以定位文件路径输入框,使用send_keys()将上传文件
   的路径及名称填入输入框,点击上传,实现上传操作。

2、使用win32gui库和win32con下的方法实现上传。
   需要 pip install pypiwin32
   
文件下载:
opt = webdriver.ChromeOptions()  # 实例化ChromeOptions类对象
prefs = {"download.default_directory":"D:\jnc\selenium_0630"}  # 设置下载的默认路径
opt.add_experimental_option('prefs',prefs)
driver = webdriver.Chrome(options=opt)


等待设置:
强制等待sleep():使用起来最简单的一种等待方式。确定很明显就是设置短了不管用,时间设置长了又浪费时间。

隐式等待implicitly_wait():隐式等待是设置一个等待时间,等待网页是否加载完成,如果在设置的等待时间内
网页加载完成,则会立刻执行后续脚本,不会等完设置的时间,如果在设置的时间内网页没有加载完成,则会超
时报错。隐式等待依然存在浪费时间的情况,因为现在网页都是随时间局部加载的,只要所需的元素加载出来就
可以执行后续脚本了,不需要等完整个网页的加载的,但是隐式等待是必须等完整个页面加载完成,所以依然存
在浪费时间的情况。隐式等待在整个浏览器的驱动周期内只需要设置一次。

显示等待webdriverwait():显示等待可以结合until()方法,在until方法中设置等待条件,在webdriverwait()中设置
等待时间和间隔时间(默认0.5秒),按照设置的间隔时间每隔一定时间判断一下等待条件是否成立,成立则立刻执行后续脚本,不会等完设置的等待时间,如果在设置的等待时间内条件一直不成立,则超时报错。在until中可以设置多种等待条件满足各种等待场景,例如等待某个元素是否出现,出现立刻执行后续脚本,判断框架是否可以切入,可以则直接切入。

在expected_conditions模块下,提供了各种各样的等待条件,可以形成丰富的等待场景。
常用动态等待条件(方法):
title_is():判断当前页面的标题是否等于某个字符串,相等则条件成立,成立返回bool值,如果在设置的等待时间内条件一直不成立,则超时报错。
title_contains():判断当前页面的标题是否包含某个字符串,相等则条件成立,成立返回bool值,如果在设置的等待时间内条件一直不成立,则超时报错。

presence_of_element_located():判断某个元素是否出现,传参为元组,例(By.ID,"ID值"),返回值为定位到的元素。
在设置的等待时间内,元素出现则返回元素对象,否则超时报错。


visibility_of_element_located():判断某个元素是否出现且元素为非隐藏且宽和高不为0的元素,传参为元组,例(By.ID,"ID值"),返回值为定位到的元素。
在设置的等待时间内,元素出现则返回元素对象,否则超时报错。

presence_of_all_elements_located():判断多个元素是否出现,传参为元组,例(By.ID,"ID值"),返回值为定位到的元素组成的列表。在设置的等待时间内,元素出现则返回元素对象组成的列表,否则超时报错。

visibility_of_all_elements_located():判断多个元素是否出现且元素为非隐藏且宽和高不为0的元素,传参为元组,例(By.ID,"ID值"),返回值为定位到的元素组成的列表。在设置的等待时间内,元素出现则返回元素对象组成的列表,否则超时报错。

element_to_be_clickable():判断元素是否可以点击,传参为元组,例(By.ID,"ID值"),返回值为定位到的元素。
在设置的等待时间内,元素出现则返回元素对象,否则超时报错。

frame_to_be_available_and_switch_to_it():判断某个框架是否可以切入,可以则直接切入。传参为元组,条件成立
返回bool值,如果设置时间内一直不成立则超时报错。


alert_is_present():判断警告窗口是否出现,出现则返回警告窗口对象。


text_to_be_present_in_element():判断某个元素的文字中是否包含某个字符,传参为一个元组和一个字符串,如果包含
则返回bool值,在设置的等待时间内条件一直不成立则超时报错

text_to_be_present_in_element_value():判断某个元素的value属性值中是否包含某个字符,传参为一个元组和一个字符串,如果包含
则返回bool值,在设置的等待时间内条件一直不成立则超时报错


框架搭建:提升代码的复用性和可维护性,提升工作效率。
搭建框架步骤:
1、规划框架的分层  2、采用什么自动化测试的思想或模式 3、编码
框架分层:
第一层(基础功能层):实现页面动作(AW   actionword)的  封装、实现日志输出、测试数据读取、配置数据读取、数据库SQL执行等功能
第二层(页面层):在第一层的基础上,基于第一层所封装的方法或函数,采用po模式,将每个页面看做一个独立
        的对象,把页面上的操作步骤进行封装。
第三层(业务流程层):在第二层基础上,组合不同页面上的操作步骤方法,形成不同的业务流程。
基于第三层编写用例。

po(page object)模式:把每一个页面看做一个独立对象,将页面上元素的定位方式定义为属性,页面上的操作步骤
                       封装为方法。
数据驱动:测试数据记录在excecl文件中,自动化测试脚本按照测试数据编写,最终的体现就是脚本是按照数据执行。

pytest框架:
是一个第三方的python单元测试框架,适用于python的单元测试,也适用于自动化测试。可以通过插件扩展功能。
安装pytest:pip install pytest

pytest框架用例编写规则:
1、.py格式用例文件命名时必须以test_开头或以_test结尾。
2、测试用例类命名必须以Test开头
3、测试用例函数和测试用例方法命名必须以test_开头
    (测试用例在pytest框架下,可以定义为函数也可以定义为方法)
4、pytest框架下,断言使用assert。

需要定义前置方法和后置方法:
前置方法setup():定义所有用例执行前的公共的操作,例如:驱动浏览器,实例化某些类的对象
后置方法teardown():定义所有用例执行后的公共的操作,例如:关闭浏览器

在.py文件中执行用例,可以使用
pytest.main(['-s','XXXXXXX.py']),-s:允许用例执行时输出一些执行信息。-q:简单化输出执行信息

断言的机制:
当用例执行完成,如果系统中没有捕获到任何异常,则用例pass,如果系统捕获到AssertionError异常,
用例被标识为failed。如果用例执行失败,系统捕获到非AssertionError异常,用例标识为error。



pytest框架下的前置方法和后置方法:
setup_module(),teardown_module():整个模块中的用例执行前和执行后只执行一次
setup_function(),teardown_function():每一个定义为函数的测试用例执行前和执行后各执行一次
setup_class(),teardown_class():整个类中的用例执行前和执行后只执行一次
setup(),teardown():类中的用例每个用例执行前和执行后各执行一次
setup_method(),teardown_method():类中的用例每个用例执行前和执行后各执行一次


pytest插件网站:https://docs.pytest.org/en/latest/reference/plugin_list.html

1、pytest 控制用例执行顺序
    在用例上使用装饰器来控制用例执行顺序
    插件名称:pytest-ordering
    安装:pip install pytest-ordering
    使用方法:在测试用例上添加装饰器@pytest.mark.run(order=x)
    order参数的值决定用例的执行顺序,可以是正数可以是负数,
    正负数都有的情况下优先执行正数。
    执行优先级:正数>没有设置优先级>负数,值越小执行优先级越高。

2、跳过部分用例执行
    使用方法:通过装饰器控制
    @pytest.mark.skip(reason=None)#无条件跳过
    @pytest.mark.skipif(condition=xxx,reason=None)#有条件跳过
    condition:跳过条件,True则跳过   reason:跳过的原因
    当在skipif中设置了跳过条件后,必须设置reason=xxx

3、用例执行失败重新执行一定的次数
    需要导入插件:pip install pytest-rerunfailures
    1、在用例上添加装饰器:@pytest.mark.flaky(reruns=3)
       控制单个用例重新执行
      
    2、在pytest.ini文件中添加参数 -- reruns x  # x就是重新执行的次数
        
4、标记用例执行(指定哪些用例执行)
    使用方法:添加装饰器 pytest.mark.标签名  #标签名由自己定义
    标签名需要在pytest.ini文件中提前配置:
    markers =
        标签1
        标签2
        标签3
    执行用例时pytest命令后加-m参数
    例:pytest -m 标签名
        pytest -m "标签1 and 标签2"
        pytest -m "标签1 or 标签2"

5、pytest测试用例参数化
    使用方法:添加装饰器
    @pytest.mark.parametrize(arguments,argvalue)
    arguments:参数名   argvalue:参数值
    有几组参数用例就会执行几次

6、pytest下fixture函数(锚定函数,固定装置函数):
    
    
    fixture函数功能类似于前置方法和后置方法,相对于setup teardown有明显的优点:
    1、有独立的命名,通过声明它从测试函数、模块、类、整个项目中使用
    2、每个fixture函数可以互相调用
    3、可以对fixture函数设置参数,可以跨类、函数、模块使用
    
    
    
定义fixture函数规则:
 fixture函数命名不能以test_开头,要跟用例区分
 在函数上添加装饰器@pytest.fixture(),来声明这个函数是一个fixture函数
 fixture函数必须定义在conftest.py文件中,conftest.py文件名称是固定的,pytest会自动识别该文件,
 该文件放大哪个目录下,就对该目前及其子目录起作用。例如放到项目的根目录下,就会对整个项目起到全局的作用。
 fixture函数使用yield关键字返回值,没有返回值的化默认返回None
 
 在fixture函数中使用yield关键字区分前置代码和后置代码,yield之前的是前置代码,之后是后置代码
 
fixture函数使用:
1、在测试用例上添加装饰器@pytest.mark.usefixtures("fixture函数名称")使用使用
2、fixture函数作为用例的参数使用


如果fixture函数需要定义形参,使用request作为形参来接收实参
如何给fixture函数传参:
使用parametrize()装饰器,将fixture函数名作为参数,即可传参
例:@pytest.mark.parametrize('fixture函数名',[参数值],indirect=True)


fixture函数的作用范围:
在fixture函数中有个参数scope可以控制fixture函数的作用范围:
scope参数的值分别是:session、module、class、function(默认值)
session:一次会话中所有的用例执行前和执行后执行一次前置代码和后置代码,可以跨.py文件使用
module:每一个.py文件中所有的用例执行前和执行后执行一次前置代码和后置代码
class:每一个类中所有的用例执行前和执行后执行一次前置代码和后置代码
function:每个函数或方法执行前和执行后执行一次前置代码和后置代码

Allure测试报告:
allure是一个独立的测试报告库,可以生成美观易懂的测试报告
安装:
1、导入alllure包:pip install allure-pytest
2、下载allure的zip包,allure下载地址:https://github.com/allure-framework/allure2/releases
    下载后将zip包解压,将解压后的bin目录添加的path变量中

allure报告生成:先生成json格式的文件,再将json格式文件转换为html格式。
可以在pytest.ini文件中添加allure报告生成的参数及文件生成路径: --alluredir json格式文件生成路径

json格式报告查看:allure serve json格式文件所在目录
将json格式报告转换为html格式:
allure generate json格式文件所在目录 -o html文件所在目录 --clean
html格式报告查看:allure open html文件所在目录文章来源地址https://www.toymoban.com/news/detail-553724.html

到了这里,关于自动化测试笔记(selenium+pytest+Allure)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Python、Pytest、Allure、Selenium和Jenkins实现自动化测试集成实例

    Python、Pytest、Allure、Selenium和Jenkins实现自动化测试集成实例

    下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdfv1.1 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 本文将介绍如何使用Python、Pytest、Allure、Selenium和Jenkins实现测试自动

    2024年02月09日
    浏览(49)
  • python+pytest+selenium+PO+allure+DDT实现web自动化测试

    python+pytest+selenium+PO+allure+DDT实现web自动化测试

    python:编程语言 pytest:独立的、全功能的python单元测试框架 selenium:用于web应用程序测试的工具 allure:测试报告展示 ddt:数据驱动 1.1 python解释器 3.10版本 1.2 pycharm集成开发环境 社区版 下载浏览器驱动,浏览器驱动版本要与浏览器版本一致。 下载地址: Chrome:http://npm.ta

    2024年02月02日
    浏览(55)
  • Web UI 自动化测试框架(Pytest+Selenium+Allure/Pytest-html+Loguru)

    本框架主要是基于 Python + pytest + selenium + Allure + loguru + 邮件通知/企业微信通知/钉钉通知 实现的WEB UI自动化框架。 基于PageObject设计模式结合,该平台可实现测试用例的自动化执行及自动化测试报告的生成同时包括自动化测试执行时,用例失败的截图操作。 使用webdriver_manag

    2024年02月12日
    浏览(50)
  • 【UI自动化测试技术】自动化测试研究:Python+Selenium+Pytest+Allure,详解UI自动化测试,学习模拟鼠标+模拟键盘进行相关操作(精)(四)

    1、了解元素交互的常用方法 2、学习如何对多选元素进行操作 3、 学习模拟鼠标进行相关操作 ( 本节目标 ) 4、 学习模拟键盘进行相关操作 ( 本节目标 ) 用于向 Web 浏览器提供虚拟化设备输入操作的低级接口.除了刚刚讲过的Web元素交互之外, Actions 接口 还提供了对指定输

    2024年03月24日
    浏览(47)
  • Python+Selenium+Pytest+Allure自动化测试框架实战实例(示例为我司网盘产品)

    Python+Selenium+Pytest+Allure自动化测试框架实战实例(示例为我司网盘产品)

    应公司要求,组织员工培训自动化测试,所以也趁此机会把我所学习的自动化框架整理一下,虽说不是很完美,但也有所收获。 序号 库、插件、工具 版本号 1 Python 3.11 2 Pycharm 22.2.3 3 pytest 7.2.0 4 pywin32 305 5 selenium3 4.6.0 6 openpyxl 3.0.10 7 Chromedriver 与当前浏览器版本对应即可 8 al

    2023年04月16日
    浏览(219)
  • Pytest自动化测试框架之Allure报告

    Pytest自动化测试框架之Allure报告

    Allure Framework是一种灵活的、轻量级、多语言测试报告工具。 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容, 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用信息和测试。 从开发/测试的角度来看: Allure报告可以快速查看到缺陷点,可以将

    2024年02月06日
    浏览(145)
  • 【Pytest实战】Pytest+Allure+Jenkins自动化测试框架搭建

    【Pytest实战】Pytest+Allure+Jenkins自动化测试框架搭建

    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好测试✌️。 如果感觉博主的文章还不错的话,还请点赞、收藏哦

    2024年02月15日
    浏览(46)
  • 【自动化测试】Pytest+Appium+Allure 做 UI 自动化的那些事

    【自动化测试】Pytest+Appium+Allure 做 UI 自动化的那些事

    文本主要介绍下 Pytest+Allure+Appium 记录一些过程和经历。 法主要用了啥: Python3 Appium Allure-pytest Pytest Appium 不常见却好用的方法 Appium 直接执行 adb shell 方法 #Appium 启动时增加 --relaxed-security 参数 Appium 即可执行类似adb shell的方法 appium -p 4723 --relaxed-security #使用方法 def adb_shell(se

    2024年01月25日
    浏览(46)
  • 接口自动化测试实战之pytest框架+allure讲解

    接口自动化测试实战之pytest框架+allure讲解

    本文章主要会讲解Python中pytest框架的讲解,介绍什么是pytest、为何要测试、为何使用以及参考和扩展等等,话不多说,咱们直接进入主题哟。 pytest是一款单元测试框架,在编程过程中,单元主要指的是代码中最小的组成部分,例如函数或类,在面向对象中,最小的单元就是类

    2024年02月05日
    浏览(120)
  • 接口自动化测试:Python+Pytest+Requests+Allure

    接口自动化测试:Python+Pytest+Requests+Allure

    本项目实现了对Daily Cost的接口测试: Python+Requests 发送和处理HTTP协议的请求接口 Pytest 作为测试执行器 YAML 管理测试数据 Allure 来生成测试报告。 本项目是参考了pytestDemo做了自己的实现。 项目结构 api : 接口封装层,如封装HTTP接口为Python接口 commom : 从文件中读取数据等各种

    2024年02月09日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包