• 简介
    pytestbdd主要是用于代码封装
    代码封装的好处:
    1、提升代码复用率
    2、提示测试效率
    手工测试–使用框架0代码 流程+数据驱动
    产品经理这样的不懂测试的人员–流程驱动
    自动化测试–数据驱动

pytest-bdd:流程驱动封装
行为驱动–敏捷开发模式,消除开发/测试对需要了解的歧义

使用方式:
描述需求/用户场景
Feature(需求)
Scenario(场景)
Given(假设)
When(操作步骤)
Then(验证,清除)

#新建feature 文件之前 需要提取安装支持featrue文件的插件

接下来我们就通过一个实例来看看

  • dushuwu.feature文件用于整个正测试流程框架
Feature: 需求写明:读书屋小说网站,这个网站可以xxxScenario: 场景1-正常登录Given 我有一个账户 用户名:15173532799 密码:123456When 打开登录页面 http://novel.hctestedu.com/And 输入用户名And 输入密码Then 页面中应包含登录连接,文字为:退出
  • dushuwu.feature1文件这里是错误验证, Examples:User里面是我们验证时需要的数据 :
    第一行是标题
    第二行是错误的账号对的密码
    第三行是对的账号,错误的密码
    第四行是对的账号和密码
Feature: 需求写明:读书屋小说网站,这个网站可以xxxScenario: 场景2-错误登录Given 我有一个账户 用户名:<username> 密码:<password>When 打开登录页面 http://novel.hctestedu.com/And 输入用户名And 输入密码And 点击登录按钮Then 页面中应包含登录连接,文字为:退出Examples:User|username|password||admin   |1234567890  ||15173532799|admin111090||15173532799|123456|

dushuwu.feature与dushuwu_test.py实质是相互对应的,测试流程对应测试用例

  • dushuwu_test.py:写具体的代码实现
'''
bdd安装: pip  install pytest-bdd'''
import pytest
from pytest_bdd import given,when,then,parsers,scenario
import time@given(parsers.parse("我有一个账户 用户名:{username} 密码:{password}"),target_fixture="user")
@given(parsers.parse("我有一个账户 用户名:<username> 密码:<password>"),target_fixture="user")
def user(username,password):#类似于pytest的fixture方法,其他步骤可以使用其返回值return dict(username=username,password=password)@when(parsers.parse("打开登录页面{url}"))
def go_to_url(url,browser):browser.get(url)browser.find_element_by_link_text('登录').click()
'''
1、为什么这里不需要用到parsers.parse,而前面会都用到呢,是因为这里不需要转换,parsers.parse相当于转换的意思
前面的方法里面都有变量如:{user}所以需要转换
2、brower是调用了共享文件conftest.py里面打开网页的方法,
'''@when("输入用户名")
def input_username(browser,user):time.sleep(2)browser.find_element_by_xpath('//*[@id="txtUName"]').send_keys(user["username"])
@when("输入密码")
def input_password(browser,user):time.sleep(2)browser.find_element_by_xpath('//*[@id="txtPassword"]').send_keys(user["password"])@when("点击登录按钮")
def input_password(browser):time.sleep(2)browser.find_element_by_xpath('//*[@id="btnLogin"]').click()@then(parsers.parse('页面中应包含登录连接,文字为:{logout_text}'))
def check_login(logout_text,browser):time.sleep(2)text = browser.find_element_by_xpath('//*[@id="headerUserInfo"]/span/a[2]').textassert  text==logout_text#以上是流程步骤
#接下来我们需要根据dushuwus.feature一一对应进行运行,这是正常状态下的登录
# @scenario("../features/dushuwus.feature","场景1-正常登录")
当然也有不正常的状态比如,账号错误或者密码错误,我们在平常测试过程中也是需要反向验证的,所以我们就引入ushuwu1.feature,进行执行用例
@scenario("../features/dushuwu1.feature","场景2-错误登录")
def test_dushuwu_login():pass

这时需要调用共享文件conftest.py中的browser方法

import pytest
from selenium import webdriver@pytest.fixture(scope='session',autouse=True)
def browser(request):global driverdriver_path=r"C:\Users\ADMIN\Desktop\桌面\重要安装包\chromedriver.exe"if driver is  None:driver=webdriver.Chrome(executable_path=driver_path)def end():driver.quit()request.addfinalizer(end)return driver

pytest-bdd封装相关推荐

  1. pytest assert 封装

    由于pytest 自带的assert 断言失败的时候,是不会打印出失败的实际结果和预期结果值,给查看的时候带来不变,所以进行封装格式化打印 import loggingimport pytestfro ...

  2. Python版UI自动化测试的断言方法/Selenium Pytest方法封装断言

    分享几个自己封装的一些断言! 觉得有帮助的小伙伴可以点个赞!分享给更多人! 目录标题 前置条件 断言预期的元素是否可见 断言实际值是否包含预期值 断言实际值是否包含多个预期的文本中的一个(模糊断言) ...

  3. Python+requests+pytest+allure封装接口自动化6-mysql、redis数据库封装

    一.Mysql数据库封装 在common中新建一个mysql_db_util.py的文件 import pymysqlclass MysqlDBUtil:#字典输出def __init__(self, ...

  4. 【10w字】超详细【百分百拿offer】的面试教程,集合5000多家软件测试公司面试题。

    一.引言 1.1 文档目的 [百分百解决在面试中遇到的些问题] 1.2 背景 此文档历经1年的时间,基本概括了深圳与广州,上干家公司的面试问题并结合基本盖了,95%以上的面试问题,文章内容比较多耐心看 ...

  5. App自动化测试笔记(十二):Yaml数据

    目录 Yaml数据格式 应用场景 字典和列表相互嵌套 规律 字典嵌套字典 字典嵌套列表 列表嵌套字典 列表嵌套列表 yaml其他数据类型 Yaml读写 读取yaml 写入yaml Yaml数据驱动应用 ...

  6. python+pytest接口自动化之测试函数、测试类/测试方法的封装

    前言 今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码如下: import requestshea ...

  7. 【python做接口测试的学习记录day9——pytest自动化测试框架之yaml数据驱动封装】

    之前我们的框架中,如果有多个测试用例,则需要在yaml文件中写入多个用例,而每个用例可能不同的仅仅只是个别参数值,这就导致很多重复代码,现在我们使用数据驱动就可以解决这个问题了. 我依旧采用之前的登录 ...

  8. 【pytest】三、pytest用例管理框架的前后置(固件、夹具)setup和teardown,及封装

    一.引言: 1)setup的作用:用来实现执行前的一些初始化操作(如:数据准备.连接设备.打开APP/浏览器.创建日志对象.创建数据库连接.创建接口的请求对象等操作): 2)teardown的作用:用 ...

  9. 2023最新pytest+yaml接口自动化测试框架封装总结

    1. 框架封装基础 以下是框架封装的技术基础,打好这些基础的话,能够很轻松地封装出来框架 对于基础还有欠缺的话,建议针对性精进: 1. 扎实的Python语言基础 函数.类 文件读写 处理报错 数据结 ...

  10. 最新出炉 全网最牛最新的pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试【超详细】从0到封装

    接口自动化测试框架(用例自动生成) 项目说明 本框架是一套基于pytest+requests+Python3.7+yaml+Allure+Jenkins+docker而设计的数据驱动接口自动化测试框架 ...

最新文章

  1. dalsa线扫相机调试文档_线阵相机调试文档
  2. TensorFlow发布全新版本,又会带来哪些变革?
  3. Golang 的 “omitempty” 关键字略解
  4. 如何确定oracle进程,Oracle DBWR进程的工作流程以及和其他进程的协调工作!
  5. java questionbank_JavaQuestionBank
  6. asp.net5开发中DNX SDK版本的影响
  7. java反编译jar包
  8. drool 7.x 属性 : no-loop
  9. sox 转换pcm格式采样率
  10. 实现WinForm的DataGridView折叠功能(非原创,仅供收藏)
  11. 叉积 微分 恒等式_一个斜三角中的恒等式
  12. 罗马帝国 Ancient Rome 简易修改器
  13. 解决为什么电脑连接不上网络,应该如何查找问题
  14. 3.5亿!创维电视董事长双11直播带货,哪些细节值得借鉴?
  15. 我是怎么薅的双十一羊毛
  16. CSDN博文周刊第一期 | 2018年总结:向死而生,为爱而活——忆编程青椒的戎马岁月
  17. mysql群发消息_百万级用户量的站内信群发数据库设计
  18. 进程间通信方式有哪些-Linux进程间通信
  19. 写一个工具来了解ELF文件(一)
  20. 利用opencv识别路标

热门文章

  1. web前端开发面试题,都是整理出的精华
  2. Mac-XQuartz-linux
  3. 有限布尔代数的表示理论:由集合生成的布尔代数
  4. 中国整形外科医院发展规模分析:诊疗人次数为96万人,同比减少5.46%[图]
  5. 1978-2020年全国及31省市农业机械总动力(万千瓦)
  6. 常见文件的加密工具类
  7. 达观数据CEO陈运文:“AI+RPA”如何赋能企业数字化转型
  8. 两轮市场红海,利尔达芯智行如何乘风破浪?
  9. GTD待办事项管理器都有那些功能
  10. 856计算机专业综合考试,2017年中央民族大学856计算机学科专业综合硕士研究生考试大纲...