0


pytest-bdd封装

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

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

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

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

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

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

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

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

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

  1. import pytest
  2. from selenium import webdriver
  3. @pytest.fixture(scope='session',autouse=True)defbrowser(request):global driver
  4. driver_path=r"C:\Users\ADMIN\Desktop\桌面\重要安装包\chromedriver.exe"if driver isNone:
  5. driver=webdriver.Chrome(executable_path=driver_path)defend():
  6. driver.quit()
  7. request.addfinalizer(end)return driver

本文转载自: https://blog.csdn.net/liao_11/article/details/124912638
版权归原作者 你的小啊廖 所有, 如有侵权,请联系我们删除。

“pytest-bdd封装”的评论:

还没有评论