最近工作之余一直在想关于python接口自动化方面的知识该怎么写,哈哈哈哈。
其实不管任何自动化测试方法中博主个人认为测试用例的管理都是非常重要的,有的小伙伴可能习惯于用excel表格去管理用例,用excel表格管理用例的方法博主以前介绍过今天这里呢,博主就介绍一种更为高效用例管理方式使用数据库的方式管理用例,在测试服务器上创建一个专门用来存放测试用例的库,具体怎么做这里博主就不介绍了。这样做可以做到真正的用例共享了,python对于数据库中用例的调用也比调用excel表中的方法简单许多,很少的代码量能实现很强大的功能,哈哈哈。
好了现在生成存在测试数据的表,博主在这里提供一个sql,里面大致包含了一些接口自动化测试中必要的参数,当然要是大家觉得有需求增加或者删减的地方随意更改字段就好。
CREATE TABLE `case` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',
`app` varchar(128) DEFAULT NULL COMMENT '业务应用',
`module` varchar(128) DEFAULT NULL COMMENT '模块',
`title` varchar(128) DEFAULT NULL COMMENT '用例名称',
`method` varchar(128) DEFAULT NULL COMMENT 'Http提交方法',
`url` varchar(128) DEFAULT NULL COMMENT '接口',
`run` varchar(32) DEFAULT NULL COMMENT '是否运行 yes/no',
`headers` varchar(128) DEFAULT '{}' COMMENT '请求头',
`pre_case_id` int(11) DEFAULT '-1' COMMENT '是否有前置用例id',
`pre_fields` varchar(128) DEFAULT '[]' COMMENT '前置的字段, 获取请求结果的哪个字段,用于当前case的header还是body,双&name& 替代值',
`request_body` varchar(128) DEFAULT '{}' COMMENT '请求内容,$XX用于替换',
`except_result` varchar(1024) DEFAULT NULL COMMENT '预期结果',
`assert_type` varchar(64) DEFAULT NULL COMMENT '断言类型, 判断状态码、data内容或数组长度',
`pass` varchar(64) DEFAULT NULL COMMENT '是否通过,yes, no',
`msg` varchar(128) DEFAULT NULL COMMENT '测试用例额外描述新',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`response` text COMMENT '实际结果',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `config` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`app` varchar(128) DEFAULT NULL COMMENT '所属app',
`dict_key` varchar(64) DEFAULT NULL COMMENT '字典key',
`dict_value` varchar(256) DEFAULT NULL COMMENT '字典值',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
我相信来看接口自动化测试的小伙伴简单的sql语法肯定都难不倒各位了这里博主也不赘述了。好了两个表已经建好了,再填入将测试数据写进去即可。好了下面封装调用数据库中用例的方法。
在此之前呢,大家先安装一个调用pymsqal库,我们就用它来调用mysql服务器。pip install pymysql。至于这个库中方法使用这里博主也不会多讲,想学习的可以百度学习一下,这里博主就直接上封装好的代码了。
在平时自动化测试的过程中我们一般都只会用到查询、更新、插入这几种方法,
class Db_util():
def __init__(self):
self.mydb = pymysql.connect(host = '192.168.xxx.xx',
user = 'root',
password = 'xxx',
database = 'xxxx',
port = 3306)
self.cursor = self.mydb.cursor(cursor=pymysql.cursors.DictCursor)
def __del__(self):
self.mydb.close()
self.cursor.close()
def selecttest(self,sql):
self.cursor.execute(sql)
data = self.cursor.fetchall()
return data
def update(self,sql):
try:
self.cursor.execute(sql)
self.mydb.commit()
except Exception as e:
self.mydb.rollback()
print('在更新数据库时发生错误了:{0}'.format(e))
def insert(self,sql):
try:
self.cursor.execute(sql)
self.mydb.commit()
except Exception as e :
self.mydb.rollback()
print('在插入数据时发生错误了:{0}'.format(e))
if __name__ == '__main__':
db = Db_util()
print(db.selecttest('SELECT * from `case` where app = "xxxxx"'))