最近在使用httprunner进行接口测试,在传参时,用到了三种方法:(1)从csv文件中获取;(2)在config中声名然后进行引用;(3)从函数中获取。在测试过程中,往往有些参数是需要从数据库中获取的,然后考虑到Httprunner提供的debugtalk.py插件,决定试试编写一个从数据库读取值的方法,在经过调试后,最后终于成功了,今天在这里记录下。
连接mysql数据库使用的是python的MySQLdb库,读取配置文件使用的是configparser库。debugtalk.py同级目录下包含文件有:
(1)mysqlDB.py
(2)readConfig.py
(3)config.ini
分别内容如下
一、配置文件config.ini内容如下:
[Mysql] user_id = select id from user where name="root" [DATABASE] host = x.x.x.x user = test passwd = 123456 port = 3306 database = rbac
二、readConfig.py(读取config.ini)
import os import codecs import configparser proDir = os.path.split(os.path.realpath(__file__))[0] configPath = os.path.join(proDir, "config.ini") print configPath class ReadConfig: def __init__(self): fd = open(configPath) data = fd.read() # remove BOM if data[:3] == codecs.BOM_UTF8: data = data[3:] file = codecs.open(configPath, "w") file.write(data) file.close() fd.close() self.cf = configparser.ConfigParser() self.cf.read(configPath) def Mysql(self, name): value = self.cf.get("Mysql", name) return value def Database(self, name): value = self.cf.get("DATABASE", name) return value
三、mysqlDB.py
# -*- coding:utf-8 -*- import MySQLdb from readConfig import ReadConfig mysql = ReadConfig() #db = MySQLdb.connect(host,user,passwd,database,charset="utf8") class MysqlDb: def __init__(self): self.host = mysql.Database("host") self.user = mysql.Database("user") self.passwd = mysql.Database("passwd") self.database = mysql.Database("database") self.db = MySQLdb.connect(self.host,self.user,self.passwd,self.database,charset="utf8") def user_id(self): cursor = self.db.cursor() sql = mysql.Mysql("user_id") cursor.execute(sql) #db.commit()提交到数据库执行 data = cursor.fetchone() #cursor return data
四、debugtalk.py(提供给httprunnertest函数)
# -*- coding:utf-8 from mysqlDB import MysqlDb test = MysqlDb() def UserId(): User_Id = test.user_id() return int(User_Id[0])
五.在test.yml中引用
- config: name: 'dashboard' request: variables: - user_id: ${UserId()}
然后就可以跑test脚本了。