- 简介 pytestbdd主要是用于代码封装 代码封装的好处: 1、提升代码复用率 2、提示测试效率 手工测试–使用框架0代码 流程+数据驱动 产品经理这样的不懂测试的人员–流程驱动 自动化测试–数据驱动
pytest-bdd:流程驱动封装
行为驱动–敏捷开发模式,消除开发/测试对需要了解的歧义
使用方式:
描述需求/用户场景
Feature(需求)
Scenario(场景)
Given(假设)
When(操作步骤)
Then(验证,清除)
#新建feature 文件之前 需要提取安装支持featrue文件的插件
接下来我们就通过一个实例来看看
- dushuwu.feature文件用于整个正测试流程框架
Feature: 需求写明:读书屋小说网站,这个网站可以xxx
Scenario: 场景1-正常登录
Given 我有一个账户 用户名:15173532799 密码:123456
When 打开登录页面 http://novel.hctestedu.com/
And 输入用户名
And 输入密码
Then 页面中应包含登录连接,文字为:退出
- dushuwu.feature1文件这里是错误验证, Examples:User里面是我们验证时需要的数据 : 第一行是标题 第二行是错误的账号对的密码 第三行是对的账号,错误的密码 第四行是对的账号和密码
Feature: 需求写明:读书屋小说网站,这个网站可以xxx
Scenario: 场景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")defuser(username,password):#类似于pytest的fixture方法,其他步骤可以使用其返回值returndict(username=username,password=password)@when(parsers.parse("打开登录页面{url}"))defgo_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("输入用户名")definput_username(browser,user):
time.sleep(2)
browser.find_element_by_xpath('//*[@id="txtUName"]').send_keys(user["username"])@when("输入密码")definput_password(browser,user):
time.sleep(2)
browser.find_element_by_xpath('//*[@id="txtPassword"]').send_keys(user["password"])@when("点击登录按钮")definput_password(browser):
time.sleep(2)
browser.find_element_by_xpath('//*[@id="btnLogin"]').click()@then(parsers.parse('页面中应包含登录连接,文字为:{logout_text}'))defcheck_login(logout_text,browser):
time.sleep(2)
text = browser.find_element_by_xpath('//*[@id="headerUserInfo"]/span/a[2]').text
assert text==logout_text
#以上是流程步骤#接下来我们需要根据dushuwus.feature一一对应进行运行,这是正常状态下的登录# @scenario("../features/dushuwus.feature","场景1-正常登录")
当然也有不正常的状态比如,账号错误或者密码错误,我们在平常测试过程中也是需要反向验证的,所以我们就引入ushuwu1.feature,进行执行用例
@scenario("../features/dushuwu1.feature","场景2-错误登录")deftest_dushuwu_login():pass
这时需要调用共享文件conftest.py中的browser方法
import pytest
from selenium import webdriver
@pytest.fixture(scope='session',autouse=True)defbrowser(request):global driver
driver_path=r"C:\Users\ADMIN\Desktop\桌面\重要安装包\chromedriver.exe"if driver isNone:
driver=webdriver.Chrome(executable_path=driver_path)defend():
driver.quit()
request.addfinalizer(end)return driver
版权归原作者 你的小啊廖 所有, 如有侵权,请联系我们删除。