本文主要是介绍Pytest的fixture的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
fixture在ui自动化中的应用:
fixture在api自动化中的应用:
conftest.py
Conftest.py使用范围
fixture是在测试函数运行前后
import pytest@pytest.fixture()
def login(username='wuya',password='admin'):if username=='wuya' and password=='admin':return 'sdrtyuds344dfgsdfgh345'else:raise '用户名或密码错误'def test_profile(login):assert login=='sdrtyuds344dfgsdfgh345'
初始化与清理:装饰器函数@pytest.fixture(),它是在声明一个函数是fixture,如果测试函数参数列表中含有fixture名,那么pytest执行的时候就会检测到,并在测试函数运行之前执行该fixture,fixture可以完成任务也可以返回数据给测试函数
import pytestfrom selenium import webdriver'''打开浏览器放在的fixture函数中,测试函数运行之前执行该函数'''
@pytest.fixture()
def driver():return webdriver.Chrome()def test_baidu_title(driver):driver.maximize_window()driver.get('http://www.baidu.com')assert driver.title=='百度一下,你就知道'
fixture在ui自动化中的应用:
import pytest@pytest.fixture()
def init(selenium):selenium.maximize_window()selenium.get('https://www.baidu.com/')selenium.implicitly_wait(30)yieldselenium.quit()def test_baidu_title(init, selenium):assert selenium.title == '百度一下,你就知道'def test_baidu_url(init, selenium):assert selenium.current_url == 'https://www.baidu.com/''''pytest-selenium的应用,执行命令:pytest -v -s fixture的应用.py --driver Firefox'''
fixture在api自动化中的应用:
需求:测试获取所有书籍和查找添加的书籍
结合Pytest的Fixture函数,结合requests的库,编写测试固件的应用
#!/usr/bin/env python
# !coding:utf-8
import jsonimport pytest, requests# 登录成功,获取到token
@pytest.fixture()
def login():r = requests.post(url='http://localhost:5000/auth',json=json.load(open("pwd.json")))return r.json()["access_token"]# 获取headers
@pytest.fixture()
def header(login):return {'Authorization': 'jwt {0}'.format(login)}@pytest.fixture()
def init(header):addBook(header)yielddelBook(header)# 添加书籍
def addBook(header):r = requests.post(url='http://localhost:5000/v1/api/books',headers=header,json={"name": "python大法1", "author": "xia", "done": True})print("添加书籍:", r.json())writeBook(str(r.json()[0]['datas']['id']))def writeBook(content):with open("bookID", "w") as f:f.write(content)def bookId():with open("bookID") as f:return f.read()# 删除书籍
def delBook(header):r = requests.delete(url='http://localhost:5000/v1/api/book/{0}'.format(bookId()),headers=header)print(r.json())# 获取到所有的书籍
def test_all_book(login, header, init):r = requests.get(url='http://localhost:5000/v1/api/books',headers=header)print(r.json())# 测试添加的书籍
def test_query_book(login, header, init):r = requests.get(url='http://localhost:5000/v1/api/book/{0}'.format(bookId()),headers=header)print(r.json())assert r.json()['datas'][0]['id'] == int(bookId())
conftest.py
conftest.py可以共享fixture,如果希望多个测试文件共同使用一个fixture,可以在该目录下创建conftest.py文件,然后把需要的fixture加入到里边就可以使用了,也就是把fixture和测试用例分离
conftest文件
import pytest
from selenium import webdriver@pytest.fixture()
def driver():return webdriver.Firefox()@pytest.fixture()
def init(driver):driver.maximize_window()driver.get(url='http://www.baidu.com')driver.implicitly_wait(10)yielddriver.quit()@pytest.fixture()
def login(username='xia', password='123'):if username == 'xia' and password == '123':return 'qweretreteqwqw'else:return False
测试用例
'''driver就是conftest文件里的driver函数'''
def test_baidu_url(driver, init):assert driver.current_url == 'https://www.baidu.com/'def test_baidu_title(driver, init):assert driver.title == "百度一下,你就知道"'''login就是conftest文件里的login函数'''
def test_login_profile(login):if login == 'qweretreteqwqw':print("欢迎登录成功")
Conftest.py使用范围
function级别:
'''function级别的conftest文件'''import pytest
from selenium import webdriver@pytest.fixture()
def driver():return webdriver.Chrome()@pytest.fixture(scope='function')
def init(driver):driver.maximize_window()driver.get('http://www.baidu.com')driver.implicitly_wait(30)yielddriver.quit()
'''测试用例文件'''def test_baidu_url(driver,init):assert driver.title=='百度一下,你就知道'
class级别:类级别,主要应用于类
'''class级别的conftest.py'''import pytest
from selenium import webdriver@pytest.fixture(scope='class')
def driver():return webdriver.Chrome()@pytest.fixture(scope='class')
def init(driver):driver.maximize_window()driver.get('http://www.baidu.com')driver.implicitly_wait(30)yielddriver.quit()
测试模块的代码
'''class级别'''def test_baidu_url(driver,init):assert driver.current_url=='https://www.baidu.com/'class TestUi(object):def test_baidu_title(self,driver,init):assert driver.title=='百度一下,你就知道'
module级别:主要应用于模块,多个测试用例文件共用同一个conftest.py
session级别:在一个工程下,pytest执行的就是一个session级别的,泛指所有的函数、类、模块
这篇关于Pytest的fixture的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!