鱼C论坛

 找回密码
 立即注册
查看: 2919|回复: 2

[已解决]求助fixture应用

[复制链接]
发表于 2022-11-28 14:53:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定义一个fixture,实现连接和关闭数据库的操作
1、封装一个数据库对象,提供四个方法:
(1)初始化数据库连接配置信息
(2)连接数据库
(3)关闭数据库连接
(4)执行sql语句

提示:python连接数据库使用pymysql库,具体代码大家可以自行百度下
2、在conftest.py中定义一个fixture,作用域范围为function级别:
        前置操作:初始化数据库对象,并建立数据库连接
        后置操作:关闭数据库连接

选做题:
封装一个reponse基类对象


响应基类封装要求:
初始化方法:
入参:requets模块的response对象
出参:None
http_response
只读
出参:返回一个http协议格式的response字符串
http_request
只读
出参:返回要给http协议格式的request字符串
最佳答案
2022-11-29 22:10:33
本帖最后由 阿奇_o 于 2022-11-29 22:12 编辑

你这是 自动化测试 的面试题?? 课程作业??  我也没用过这个pytest,也不知道是否理解正确了题意(甚至觉得题目有点问题。。)

现学现卖,第一题大概这样实现吧:
# conftest.py 
import pytest
import pymysql


@pytest.fixture(scope='function')
def db_session():
    conn = pymysql.connect(
        host='localhost',
        user='root',
        password='123456',
        database='mydb',
    )
    yield conn
# test_pymysql.py
import pymysql


def test_init(db_session):
    assert db_session.user.decode() == 'root'
    assert db_session.db.decode() == 'mydb'
    # assert 0


def test_conn(db_session):
    assert db_session.open == True


def test_execute_sql(db_session):
    conn = db_session
    with conn.cursor() as cursor:
        cursor.execute("drop table if exists foo;")
        cursor.execute("create table if not exists foo(`id` int, `name` varchar(20), `age` int);")
        cursor.execute("insert into foo(`id`,`name`,`age`) values(1001, 'Alice', 18), (1002, 'Bill', 20);")
        cursor.execute("commit;")
        cursor.execute("select * from foo")
        result = cursor.fetchall()
        # for row in result: print(row)
        assert result == ((1001, 'Alice', 18), (1002, 'Bill', 20))
        # assert 0


def test_close_conn(db_session):
    db_session.close()
    try:
        db_session.ping(reconnect=False)
    except pymysql.err.Error as e:
        # print(e, e.args)
        assert 'Already closed' in e.args[0]
        # assert 'Not closed ?' in e.args  # deliberately fails
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-29 22:10:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿奇_o 于 2022-11-29 22:12 编辑

你这是 自动化测试 的面试题?? 课程作业??  我也没用过这个pytest,也不知道是否理解正确了题意(甚至觉得题目有点问题。。)

现学现卖,第一题大概这样实现吧:
# conftest.py 
import pytest
import pymysql


@pytest.fixture(scope='function')
def db_session():
    conn = pymysql.connect(
        host='localhost',
        user='root',
        password='123456',
        database='mydb',
    )
    yield conn
# test_pymysql.py
import pymysql


def test_init(db_session):
    assert db_session.user.decode() == 'root'
    assert db_session.db.decode() == 'mydb'
    # assert 0


def test_conn(db_session):
    assert db_session.open == True


def test_execute_sql(db_session):
    conn = db_session
    with conn.cursor() as cursor:
        cursor.execute("drop table if exists foo;")
        cursor.execute("create table if not exists foo(`id` int, `name` varchar(20), `age` int);")
        cursor.execute("insert into foo(`id`,`name`,`age`) values(1001, 'Alice', 18), (1002, 'Bill', 20);")
        cursor.execute("commit;")
        cursor.execute("select * from foo")
        result = cursor.fetchall()
        # for row in result: print(row)
        assert result == ((1001, 'Alice', 18), (1002, 'Bill', 20))
        # assert 0


def test_close_conn(db_session):
    db_session.close()
    try:
        db_session.ping(reconnect=False)
    except pymysql.err.Error as e:
        # print(e, e.args)
        assert 'Already closed' in e.args[0]
        # assert 'Not closed ?' in e.args  # deliberately fails
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-30 11:48:55 | 显示全部楼层
阿奇_o 发表于 2022-11-29 22:10
你这是 自动化测试 的面试题?? 课程作业??  我也没用过这个pytest,也不知道是否理解正确了题意(甚至 ...

这个是课程作业。。自动化测试的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 19:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表