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的范围需要变动。

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

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

目录
相关文章
|
测试技术 Python
pytest--fixture
pytest--fixture
|
Web App开发 测试技术
10-pytest-parametrize中使用fixture
10-pytest-parametrize中使用fixture
|
测试技术
pytest conftest.py和fixture的配合使用
pytest conftest.py和fixture的配合使用
|
测试技术 Python
pytest学习和使用17-Pytest如何重复执行用例?(pytest-repeat)
pytest学习和使用17-Pytest如何重复执行用例?(pytest-repeat)
163 0
pytest学习和使用17-Pytest如何重复执行用例?(pytest-repeat)
|
测试技术
pytest学习和使用13-Pytest的fixture如何使用request传入参数?
pytest学习和使用13-Pytest的fixture如何使用request传入参数?
114 0