Pytest前后置以及fixture实战部分

简介: Pytest前后置以及fixture实战部分

前面写了很多篇的pytest文章,始终没有小实战,本章就来一起浅试一下。


selenium==4.7

python==3.9.13

pytest==7.1.3


前后置

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from time import sleep
class Test_browser:
    def setup_method(self):
        s = Service(r'E:\selenium_test\lib\geckodriver.exe')
        self.driver = webdriver.Firefox(service=s)
    def test_start_browser(self):
        self.driver.get("https://www.baidu.com")
        self.driver.find_element(By.ID,'kw').send_keys('拾|贰')
        sleep(1)
    def test_new_start_browser(self):
        self.driver.get('https://mp.weixin.qq.com/mp/homepage?__biz=MzkwODI1OTYwMg==&hid=9&sn=3bcfe7970477ab4fd454dfa0011c9245')
        sleep(1)
    def teardown_method(self):
        self.driver.quit()

setup_method以及teardown_method每个方法都执行一次浏览器打开的动作,如果想不论多少条用例都是只打开一次浏览器。将方法切换成setup_class以及teardown_class即可。

「这是最为基础的部分,如果还是不懂,需要回头好好学习学习了」

fixture

「conftest.py」文件

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
@pytest.fixture(scope='session')
def browser():
    s = Service(r'D:\pytest_\Case\geckodriver.exe')
    driver = webdriver.Firefox(service=s)
    print("*_*准备启动浏览器!!!")
    yield driver
    driver.quit()

这样写可以传递driver示例对象也能便捷的启动与关闭浏览器。

「test.py」文件

def test_start_browser(browser):
    browser.get("https://www.baidu.com")

你会发现这样也能启动浏览器。除了启动浏览器,还能进行元素定位操作。

from selenium.webdriver.common.by import By
from time import sleep
def test_start_browser(browser):
    browser.get("https://www.baidu.com")
    browser.find_element(By.ID,'kw').send_keys('拾|贰')
    sleep(1)

fixture的妙用之一,你领会了吗?

「当然,fixture不一定需要写到conftest.py文件中,也能直接写在普通的测试文件中。」

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from time import sleep
@pytest.fixture(scope='session')
def browser():
    s = Service(r'E:\selenium_test\lib\geckodriver.exe')
    driver = webdriver.Firefox(service=s)
    yield driver
    driver.quit()
class Test_browser:
    def test_start_browser(self,browser):
        browser.get("https://www.baidu.com")
        browser.find_element(By.ID,'kw').send_keys('拾|贰')
        sleep(1)
    def test_new_start_browser(self,browser):
        browser.get('https://mp.weixin.qq.com/mp/homepage?__biz=MzkwODI1OTYwMg==&hid=9&sn=3bcfe7970477ab4fd454dfa0011c9245')
        sleep(1)

如上都是fixture的部分用法。你熟悉了吗?

fixture参数化

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from time import sleep
@pytest.fixture(scope='session')
def browser():
    s = Service(r'E:\selenium_test\lib\geckodriver.exe')
    driver = webdriver.Firefox(service=s)
    yield driver
    driver.quit()
@pytest.fixture(params=['qingan','qinganan'])
def user(request):
    return request.param
@pytest.fixture(params=['123456','qingan'])
def pwd(request):
    return request.param
class Test_browser:
    def test_start_browser(self,browser):
        browser.get("https://d2.shopxo.vip/login.html")
    def test_new_start_browser(self,browser,user,pwd):
        browser.find_element(By.NAME, 'accounts').send_keys(user)
        browser.find_element(By.NAME,'pwd').send_keys(pwd)
        sleep(1)
        browser.find_element(By.CLASS_NAME,'am-btn.am-btn-primary.am-btn-block.am-radius.am-btn-sm.btn-loading-example').click()
        sleep(2)
        browser.find_element(By.NAME, 'accounts').clear()
        browser.find_element(By.NAME, 'pwd').clear()
        text = browser.find_element(By.XPATH, '//*[text()="密码格式6~18个字符"]').text
        assert text == '密码格式6~18个字符'
        sleep(2)

这是简单的运用,当然,这样的方式存在一定的缺陷,但是依旧不影响举一反三的使用。

缺陷一:登录成功后无法退出。所以fixture的范围需要变动。

缺陷二:断言不够全面,需要根据实际情况来断言对应的值。

缺陷三:参数化这样的方式存在一定的缺陷,它会给你一套组合拳。打乱原本的参数化数据。

目录
相关文章
|
9月前
|
测试技术 Python
pytest--fixture
pytest--fixture
06-pytest-fixture的三种调用方式
06-pytest-fixture的三种调用方式
|
10月前
|
测试技术
30-pytest-重复执行用例-pytest-repeat
30-pytest-重复执行用例-pytest-repeat
30-pytest-重复执行用例-pytest-repeat
|
12月前
pytest 前后置方法
pytest 前后置方法
|
12月前
|
测试技术
pytest conftest.py和fixture的配合使用
pytest conftest.py和fixture的配合使用
pytest学习和使用19-pytest断言失败后,怎样保持后续的断言继续执行?(pytest-assume)
pytest学习和使用19-pytest断言失败后,怎样保持后续的断言继续执行?(pytest-assume)
92 0
|
测试技术 Python
pytest学习和使用17-Pytest如何重复执行用例?(pytest-repeat)
pytest学习和使用17-Pytest如何重复执行用例?(pytest-repeat)
104 0
pytest学习和使用17-Pytest如何重复执行用例?(pytest-repeat)
|
测试技术
pytest学习和使用8-fixture如何实现teardown功能?(yield的使用)
pytest学习和使用8-fixture如何实现teardown功能?(yield的使用)
74 0
|
测试技术 Python
pytest学习和使用10-Pytest中的测试用例如何跳过执行?
pytest学习和使用10-Pytest中的测试用例如何跳过执行?
72 0
pytest学习和使用10-Pytest中的测试用例如何跳过执行?