pytest-bdd封装
- 简介
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封装相关推荐
- pytest assert 封装
由于pytest 自带的assert 断言失败的时候,是不会打印出失败的实际结果和预期结果值,给查看的时候带来不变,所以进行封装格式化打印 import loggingimport pytestfro ...
- Python版UI自动化测试的断言方法/Selenium Pytest方法封装断言
分享几个自己封装的一些断言! 觉得有帮助的小伙伴可以点个赞!分享给更多人! 目录标题 前置条件 断言预期的元素是否可见 断言实际值是否包含预期值 断言实际值是否包含多个预期的文本中的一个(模糊断言) ...
- Python+requests+pytest+allure封装接口自动化6-mysql、redis数据库封装
一.Mysql数据库封装 在common中新建一个mysql_db_util.py的文件 import pymysqlclass MysqlDBUtil:#字典输出def __init__(self, ...
- 【10w字】超详细【百分百拿offer】的面试教程,集合5000多家软件测试公司面试题。
一.引言 1.1 文档目的 [百分百解决在面试中遇到的些问题] 1.2 背景 此文档历经1年的时间,基本概括了深圳与广州,上干家公司的面试问题并结合基本盖了,95%以上的面试问题,文章内容比较多耐心看 ...
- App自动化测试笔记(十二):Yaml数据
目录 Yaml数据格式 应用场景 字典和列表相互嵌套 规律 字典嵌套字典 字典嵌套列表 列表嵌套字典 列表嵌套列表 yaml其他数据类型 Yaml读写 读取yaml 写入yaml Yaml数据驱动应用 ...
- python+pytest接口自动化之测试函数、测试类/测试方法的封装
前言 今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码如下: import requestshea ...
- 【python做接口测试的学习记录day9——pytest自动化测试框架之yaml数据驱动封装】
之前我们的框架中,如果有多个测试用例,则需要在yaml文件中写入多个用例,而每个用例可能不同的仅仅只是个别参数值,这就导致很多重复代码,现在我们使用数据驱动就可以解决这个问题了. 我依旧采用之前的登录 ...
- 【pytest】三、pytest用例管理框架的前后置(固件、夹具)setup和teardown,及封装
一.引言: 1)setup的作用:用来实现执行前的一些初始化操作(如:数据准备.连接设备.打开APP/浏览器.创建日志对象.创建数据库连接.创建接口的请求对象等操作): 2)teardown的作用:用 ...
- 2023最新pytest+yaml接口自动化测试框架封装总结
1. 框架封装基础 以下是框架封装的技术基础,打好这些基础的话,能够很轻松地封装出来框架 对于基础还有欠缺的话,建议针对性精进: 1. 扎实的Python语言基础 函数.类 文件读写 处理报错 数据结 ...
- 最新出炉 全网最牛最新的pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试【超详细】从0到封装
接口自动化测试框架(用例自动生成) 项目说明 本框架是一套基于pytest+requests+Python3.7+yaml+Allure+Jenkins+docker而设计的数据驱动接口自动化测试框架 ...
最新文章
- dalsa线扫相机调试文档_线阵相机调试文档
- TensorFlow发布全新版本,又会带来哪些变革?
- Golang 的 “omitempty” 关键字略解
- 如何确定oracle进程,Oracle DBWR进程的工作流程以及和其他进程的协调工作!
- java questionbank_JavaQuestionBank
- asp.net5开发中DNX SDK版本的影响
- java反编译jar包
- drool 7.x 属性 : no-loop
- sox 转换pcm格式采样率
- 实现WinForm的DataGridView折叠功能(非原创,仅供收藏)
- 叉积 微分 恒等式_一个斜三角中的恒等式
- 罗马帝国 Ancient Rome 简易修改器
- 解决为什么电脑连接不上网络,应该如何查找问题
- 3.5亿!创维电视董事长双11直播带货,哪些细节值得借鉴?
- 我是怎么薅的双十一羊毛
- CSDN博文周刊第一期 | 2018年总结:向死而生,为爱而活——忆编程青椒的戎马岁月
- mysql群发消息_百万级用户量的站内信群发数据库设计
- 进程间通信方式有哪些-Linux进程间通信
- 写一个工具来了解ELF文件(一)
- 利用opencv识别路标
热门文章
- web前端开发面试题,都是整理出的精华
- Mac-XQuartz-linux
- 有限布尔代数的表示理论:由集合生成的布尔代数
- 中国整形外科医院发展规模分析:诊疗人次数为96万人,同比减少5.46%[图]
- 1978-2020年全国及31省市农业机械总动力(万千瓦)
- 常见文件的加密工具类
- 达观数据CEO陈运文:“AI+RPA”如何赋能企业数字化转型
- 两轮市场红海,利尔达芯智行如何乘风破浪?
- GTD待办事项管理器都有那些功能
- 856计算机专业综合考试,2017年中央民族大学856计算机学科专业综合硕士研究生考试大纲...