持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
接口自动化测试框架实现
修改项目的数据库指向
首先,需要修改被测系统将数据库指向测试库。以MySQL数据库为例,修改.../settings.py文件,让其指 向测试库。
修改完项目的数据库指向之后需要重新执行“python3 manage.py migrate”生成数据库表
,或者读者也可以借助数据库管理工具的导出和导入功能,将一个库的所有表结构导入到另一个库。
架结构介绍
以投票系统为例,自动化测试框架结构如下:
pyrequests 框架:
interface/: 用于编写接口自动化测试用例。
db_fixture/: 初始化接口测试数据。
report/:生成接口自动化测试报告。
db_config.ini: 数据库配置文件。
HTMLTestRunner.py unittest单元测试框架扩展,生成HTML格式的测试报告。
run_tests.py:执行所有接口测试用例。
GitHub 项目地址:https://github.com/defnngj/pyrequest
代码实现
首先,创建数据库配置文件.../db_config.ini db_config.ini
接下来创建数据库操作,.../db_fixture/mysql_db.py
首先,读取db_config.ini 配置文件。
创建DB类,_init_0方法初始化,通过 pymysql.connect()连接数据库。 因为这里只用到数据库表的清理和插入,所以只创建 cle
lear()
和insert(两个方法。insert()做了一些处理, 可将字典转化成 insert into 数据库插入语句,这样方便创建数据库表数据。
最后,close()方法用于关闭数据库连接。 接下来创建测试数据
# coding=utf8 import sys
sys.path.append('../db_fixture')
from mysql_db import DB
# create data
datas={'sign_event' :['id':1, 'name': '红米 Pro 发布会','`limit'':2000, 'status':1, 'address':'北京会展中心','start_time':'2017-08-20 14:00:00'}, {'id':2, 'name':'可参加人数为0',''limit`':0,'status':1,'address': '北京会展中心','start_time':'2017-08-20 14:00:00'}, {'id':3, 'name':'当前状态为0关闭','`limit`':2000,'status':0, 'address':'北京会展中心','start_time':'2017-08-20 14:00:00'}, {'id':4, 'name': '发布会已结束',''limit`':2000, 'status':1, 'address': '北京会展中心','start_time':'2001-08-20 14:00:00'}, {'id':5, 'name':'小米5发布会','`limit`':2000, 'status':1,'address':'北京国家会议中心','start_time':'2017-08-20 14:00:00'}, ],'sign_guest':[{'id':1, 'realname' : 'alen', 'phone' :13511001100,'email':'alen@mail.com', 'sign':0, 'event_id':1},{'id':2, 'realname' : 'has ign', 'phone':13511001101, 'email':'sign@mail.com','sign':1, 'event_id':1},{'id':3, 'realname' : 'tom' , 'phone' :13511001102, 'email': 'tom@mail.com', 'sign':0,'event_id':5},}
#Inster table datas
def init_data():
db=DB()
for table, data in datas.items():
db.clear(table)
for d in data:
db.insert(table, d) db.close()
if __name__ == '__main__':
init_data()
init_data()函数用于读取datas字段中的数据,调用DB类中的clear(方法清除数据库,然后,调用insert() 方法插入表数据。
编写接口测试用例。创建添加发布会接口测试文件
在测试接口之前,调用test_data.py文件中的init_dataO方法初始化数据库中的测试数据。
创建 AddEventTest 测试类继承 unittest.TestCase类,通过创建测试用例,调用相关接口,并验证接口返回 的数据。
当我们开发的接口很多时就需要批量的执行接口测试用例并生成HTML测试报告。创建run_tests.py文 件。
首先,使用unittest框架所提供的discover()方法,查找interface/目录下,所有匹配*_test.py的测试文件 (*星号匹配任意字符)。
HTMLTestRunner为unittest单元测试框架的扩展,利用它所提供的HTMLTestRunner()类来替换 unittest 单元测试框架的 TextTestRunner()类,从而生成HTML格式的测试报告。
遗憾的是HTMLTestRunner并不支持Python3.x,我对其做了少量的修改,其它可以在Python3下执行。 HTMLTestRunner for Python3:
并且,我已经将其放到了pyrequest项目中,当仍然克隆 pyrequest项目后,不需要再单独安装 HTMLTestRunner了。
最后,通过time的strftime()方法获取当前时间,并且转化成一定格式。作为测试报告的名称。这样的目 的是是为了避免因为生成的报告的名称重名而造成报告的覆盖。最终,将测试报告存放于report/目录下面。如 图10.3,一张完整的测试报告。