介绍
在进行接口测试的过程中,我们经常会需要与数据库进行交互,读取、写入测试数据等。Python作为一种高级编程语言,自带连接数据库的功能,非常适合用来编写接口自动化测试框架。本文将详细介绍如何使用Python连接数据库,并在接口自动化测试框架中使用。
MySQL数据库
MySQL是一种常见的关系型数据库,支持多种编程语言的访问。在Python中,可以使用MySQLdb、pymysql等第三方库连接MySQL数据库。
在使用这些库前,需要先安装相关库和MySQL驱动。以MySQLdb库为例,可以使用以下命令进行安装:
```
pip install MySQL-python
```
接着,我们可以用以下代码来测试MySQL连接:
```
import MySQLdb
db = MySQLdb.connect(host='localhost', user='root', passwd='password', db='test_db', port=3306)
cursor = db.cursor()
cursor.execute('SELECT version()')
data = cursor.fetchone()
print('MySQL version:', data)
```
这段代码连接到本地的test_db数据库,输出MySQL的版本信息。其中,host、user、passwd、db和port分别代表数据库的地址、用户名、密码、数据库名和端口号。cursor对象用于执行SQL语句,并可以通过fetchone()方法获取查询结果。
SQLite数据库
SQLite是一种轻量级的关系型数据库,常用于嵌入式系统和移动设备上。在Python中,可以使用sqlite3库连接SQLite数据库。
首先,需要使用以下代码来创建并连接到一个SQLite数据库:
```
import sqlite3
conn = sqlite3.connect('test.db')
```
这里我们创建了一个test.db文件作为我们的SQLite数据库。接着,我们可以用以下代码来创建一个表:
```
conn.execute('''
CREATE TABLE users
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL)
''')
```
这个SQL语句创建了一个名为users的表,包含ID、NAME和AGE三个字段。接着,我们可以用以下代码来往表中插入数据:
```
conn.execute("INSERT INTO users (ID, NAME, AGE) VALUES (1, 'Tom', 18)")
conn.execute("INSERT INTO users (ID, NAME, AGE) VALUES (2, 'Jerry', 20)")
conn.commit()
```
这里我们插入了两条数据,分别是ID为1、NAME为Tom、AGE为18,和ID为2、NAME为Jerry、AGE为20。最后,我们需要使用以下代码来查询表中的数据:
```
cursor = conn.execute('SELECT * FROM users')
for row in cursor:
print(row)
```
这里使用execute()方法执行了一个SELECT语句,得到了表中的所有数据并输出。
应用实例
接下来,我们将介绍如何在接口自动化测试框架中使用Python连接数据库。
假设我们要测试一个用户注册接口,需要在数据库中插入一些测试数据,并在测试完成后清理数据。首先,我们可以定义一个Database类来封装数据库操作:
```python
import MySQLdb
class Database:
def __init__(self, host, user, password, db, port=3306):
self.host = host
self.user = user
self.password = password
self.db = db
self.port = port
self.conn = None
self.cursor = None
def connect(self):
self.conn = MySQLdb.connect(
host=self.host,
user=self.user,
password=self.password,
db=self.db,
port=self.port
)
self.cursor = self.conn.cursor()
def close(self):
if self.cursor:
self.cursor.close()
if self.conn:
self.conn.close()
def query(self, sql):
self.cursor.execute(sql)
return self.cursor.fetchall()
def execute(self, sql):
self.cursor.execute(sql)
self.conn.commit()
def insert_user(self, name, password):
self.execute(f"INSERT INTO users (name, password) VALUES ('{name}', '{password}')")
def delete_users(self):
self.execute("DELETE FROM users")
```
这个类封装了MySQLdb库的一些基本操作。其中,connect()方法用于连接数据库,可以在测试用例之前调用;close()方法用于关闭连接;query()和execute()方法用于查询和执行SQL语句。另外,insert_user()方法用于向用户表中插入一条数据,delete_users()方法用于删除用户表中的所有数据。
接着,我们可以在测试用例中使用这个类:
```python
import requests
from database import Database
def test_register():
db = Database('localhost', 'root', 'password', 'test_db')
db.connect()
# 插入测试数据
db.insert_user('test_user', 'test_password')
# 调用接口
response = requests.post('http://127.0.0.1:8000/register', json={
'name': 'test_user',
'password': 'test_password'
})
# 断言响应结果
assert response.status_code == 200
assert response.json() == {'code': 0, 'msg': 'success'}
# 清理测试数据
db.delete_users()
db.close()
```
这里我们使用了requests库调用接口,并使用Database类在测试用例开始前插入了一条测试数据,在测试用例结束后清理了此条数据。
结论
在Python中连接数据库非常方便。通过简单的封装,我们可以将数据库操作封装成一个类,方便在测试用例中使用。在接口自动化测试中,数据库尤其重要,应重视数据库的构建和管理。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复