【技能提升】python操作数据库完成接口测试
各位小伙伴,接口测试中我们会使用到各种各样的数据,特别是在编写接口自动化测试代码时,我们不可能在代码中写”死”数据,我们需要把数据和代码分离,便于我们后期维护代码和数据。
数据储存的形式多种多样,我们可以储存到txt格式的文档里,也可以储存到csv格式的文件里,前面两种都是数据量比较小的时候我们可以临时使用一下,但数据量多的时候我们都是储存到数据库中的。Mysql是我们最常用到的关系型数据库,接下来我们来学习一下,怎么使用python获取数据库中的数据,然后使用到接口测试中。
阅读这篇文章你需要python,mysql,接口测试,软件测试,自动化测试等知识
首先数据是储存在mysql数据库中的,如用户登录的用户名和密码,我们需要获取用户名和密码作为登录接口的参数,如下图:
下面是我们的自动化接口测试代码,接口测试中使用了requests和unittest测试框架。如标注的地方,需要我们从数据库获取数据来替换
Import unittest#这种引入模块的方式,使用模块里的变量或函数时,要用模块名.函数来使用函数
Import requests
Class Myclass(unittest.TestCase):
#为用例初始化
Def setUp(self):
pass
Def test_longin(self):
#这里的用户名和密码需要从数据库中获取
data={"name":'maker','passwd':'123456'}
res=requests.post('http://127.0.0.1:8808/api/block/login',params=data)
print(res.text)
mystr2=res.text
mystr='''{
"code":"200",
"msg":"成功",
"data":"bbb"
}'''
self.assertEqual(mystr,mystr2,"预期结果和实际结果不符")
if__name__=='__main__':
unittest.main()
接下来我们看一下怎么使用python从mysql数据库中获取数据,具体的步骤如:
1. 引入pymysql
2. 连接数据库
3. 创建游标对象
4. 查看一下所在数据库(如果不在,需要切换数据库)
5. 获取数据
6. 关闭数据库
上面需要注意的是,必须先下载pymysql模块
代码如下:
#1.引入pymysql
import pymysql
#2.连接数据库
mydb=pymysql.connect(host='localhost',port=3306,user='root',
passwd='123456',db='qftestdb',charset='utf8')
#3..创建游标对象
cur=mydb.cursor()
#4.查看所在的数据库
cur.execute("select DATABASE()")
data=cur.fetchone()
print(data)
#5.获取数据
str="select *from user"
cur.execute(str)
data=cur.fetchone()
print(data)#这里就是获取的数据
#6.关闭数据库
mydb.close()
现在我们知道怎么使用python从mysql获取数据,接下来我们要把两份代码整合到一起,重点在如下图
你需要的完整代码如下:
import unittest
"""
这种引入模块的方式,使用模块里的变量或函数时,
要用模块名.函数来使用函数
"""
import requests
# 1.引入pymysql
import pymysql
class Myclass(unittest.TestCase):
def setUp(self):
# 2.连接数据库
mydb = pymysql.connect(host='localhost', port=3306,
user='root', passwd='123456', db='qftestdb', charset='utf8')
# 3..创建游标对象
cur = mydb.cursor()
# 4.查看所在的数据库
cur.execute("select DATABASE()")
data = cur.fetchone()
print(data)
# 5.获取数据
str = "select *from user"
cur.execute(str)
data = cur.fetchone()
#需要把data中的数据给到test_login函数中
self.user=data[0]
self.password=data[1]
# 6.关闭数据库
mydb.close()
def test_longin(self):
data = {"name":self.user, 'passwd':self.password}
res = requests.post('http://127.0.0.1:8808/api/block
/login',params=data)
print(res.text)
mystr2 = res.text
mystr = '''{
"code": "200",
"msg": "成功",
"data": "bbb"
}'''
self.assertEqual(mystr, mystr2, "预期结果和实际结果不符")
if __name__=='__main__':
unittest.main()
整个代码编写思路是:先使用具体数据进行接口自动化测试,ok没有问题后,然后再编写获取mysql数据库中数据的代码,代码运行ok,能获取到数据,然后再把两个代码整合到一起,整合中考虑从数据库获取的数据怎么给到接口测试代码中。这里我们使用了对象属性的方式。