将连接数据库写在conftest.py文件里,并return conn,在test_01.py调用时找不到conn
时间: 2023-12-08 22:03:06 浏览: 191
如果你在 conftest.py 文件中定义了 `conn`,你需要确认以下几点:
1. `conn` 是定义在 `conftest.py` 文件中的,而不是在任何一个测试文件中,因为这样才能确保 `conn` 可以在所有测试文件中使用。
2. `conn` 是定义为一个函数级别的 fixture,即使用 `@pytest.fixture()` 装饰器来修饰。
3. `conn` 函数的返回值是一个代表数据库连接的对象,比如 `psycopg2.connect()` 返回的连接对象。
如果以上条件都满足,那么在你的 `test_01.py` 文件中,你可以通过在测试函数的参数列表中添加一个名为 `conn` 的参数来获取 `conn` fixture。例如:
```
import pytest
def test_something(conn):
cur = conn.cursor()
cur.execute("SELECT * FROM mytable")
rows = cur.fetchall()
assert len(rows) > 0
```
在这个例子中,`test_something` 函数需要使用 `conn` fixture,因此在函数的参数列表中定义了一个名为 `conn` 的参数。当 pytest 运行这个测试函数时,它会自动查找名为 `conn` 的 fixture,并将返回值传递给 `conn` 参数。
相关问题
写一个例子:conftest.py文件中写连接数据库代码,在另一个test0.py文件调用该数据库,写数据库SQL语句如写入数据,查询数据,更新数据,删除数据,删除表
好的,我来为您解答。首先需要明确的是,conftest.py文件是pytest测试框架中的一个钩子函数文件,用于在测试执行前进行一些准备工作,例如连接数据库、读取配置文件等等。而test0.py则是测试用例文件,用于编写具体的测试用例代码。
下面是一个例子:
conftest.py文件中:
```python
import pytest
import pymysql
@pytest.fixture(scope="module")
def db_conn():
conn = pymysql.connect(
host="localhost",
user="testuser",
password="testpass",
database="testdb"
)
yield conn
conn.close()
```
在上述代码中,我们使用了pytest的fixture功能,定义了一个db_conn的fixture,作用域为module,也就是在所有的测试用例执行前都会执行一次。在该fixture中,我们连接了一个名为testdb的MySQL数据库,并返回了连接对象。
test0.py文件中:
```python
def test_insert_data(db_conn):
cursor = db_conn.cursor()
sql = "INSERT INTO user (name, age) VALUES (%s, %s)"
val = ("Alice", 25)
cursor.execute(sql, val)
db_conn.commit()
assert cursor.rowcount == 1
cursor.close()
def test_query_data(db_conn):
cursor = db_conn.cursor()
sql = "SELECT * FROM user WHERE name = %s"
val = ("Alice", )
cursor.execute(sql, val)
result = cursor.fetchone()
assert result is not None
assert result[1] == "Alice"
assert result[2] == 25
cursor.close()
def test_update_data(db_conn):
cursor = db_conn.cursor()
sql = "UPDATE user SET age = %s WHERE name = %s"
val = (26, "Alice")
cursor.execute(sql, val)
db_conn.commit()
assert cursor.rowcount == 1
cursor.close()
def test_delete_data(db_conn):
cursor = db_conn.cursor()
sql = "DELETE FROM user WHERE name = %s"
val = ("Alice", )
cursor.execute(sql, val)
db_conn.commit()
assert cursor.rowcount == 1
cursor.close()
def test_drop_table(db_conn):
cursor = db_conn.cursor()
sql = "DROP TABLE IF EXISTS user"
cursor.execute(sql)
cursor.close()
```
在上述代码中,我们编写了四个测试用例,分别对应插入数据、查询数据、更新数据、删除数据这四种操作。其中,我们都使用了db_conn这个fixture来获取数据库连接对象,并在每个测试用例中创建了游标对象进行SQL语句的执行。在每个测试用例执行完毕后,我们都需要关闭游标对象,确保资源被释放。
最后一个测试用例test_drop_table是用于删除测试用的表user,以便下一次测试时重新创建。这个测试用例执行完毕后,我们也需要关闭游标对象。
如何夸文件调用并执行conftest.py文件
要在一个文件中调用并执行 `conftest.py` 文件,你可以使用 `pytest` 测试框架提供的功能。
首先,确保你已经安装了 `pytest`,可以通过以下命令安装:
```shell
pip install pytest
```
然后,在你希望调用并执行 `conftest.py` 文件的文件中,使用 `pytest` 提供的 `main()` 函数来调用它。以下是一个示例:
```python
import pytest
if __name__ == "__main__":
pytest.main(["-c", "conftest.py"])
```
在上述示例中,`pytest.main()` 函数接受一个参数列表作为命令行参数。在这里,我们使用 `"-c"` 参数指定要加载的配置文件为 `conftest.py`。
运行包含上述代码的文件,将会调用并执行 `conftest.py` 文件中定义的所有 Fixture 和 Hook。
请注意,`conftest.py` 文件应该与要调用它的文件在同一目录中。如果不在同一目录,你需要提供 `conftest.py` 文件的完整路径。
阅读全文
相关推荐















