博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
30. 初始化数据库环境
阅读量:5822 次
发布时间:2019-06-18

本文共 4910 字,大约阅读时间需要 16 分钟。

通过上面的测试用例我们发现,如果我们再次运行测试用例,会发现创建blog的那条测试用例无法通过,因为在我们第一次执行的时候,数据库已经存在了这个blog的id,而blod的id的是唯一的,所以如果我们经常回归测试用例,势必会造成某些用例无法通过。那么有没有解决方案呢?答案当然是有的,我们可以对数据库进行初始化操作,传统方式我们直接编写sql语句,但是我们有更简单的做法,我们用 python将sql语句进行封装。我们创建db_fixture文件夹,里面创建mysql_db.py文件,并在项目最外层创建db_config.ini文件,mysql_db.py主要目的是读取数据库信息,并对数据库进行初始化操作,db_config.ini主要是放数据库相关配置,项目结构如下所示:

image.png

修改db_config.ini

[mysqlconf]  host=127.0.0.1port=3306user=rootpassword=db_name=blog

对数据库进行操作

mysql_db.py代码如下所示:

# coding=utf-8import pymysql.cursorsimport osimport configparser as cparser# ======== Reading db_config.ini setting ===========base_dir = str(os.path.dirname(os.path.dirname(__file__)))base_dir = base_dir.replace('\\', '/')file_path = base_dir + "/db_config.ini"cf = cparser.ConfigParser()cf.read(file_path)host = cf.get("mysqlconf", "host")port = cf.get("mysqlconf", "port")db = cf.get("mysqlconf", "db_name")user = cf.get("mysqlconf", "user")password = cf.get("mysqlconf", "password")# ======== MySql base operating ===================class DB:    def __init__(self):        try:            # Connect to the database            self.connection = pymysql.connect(host=host,                                              port=int(port),                                              user=user,                                              password=password,                                              db=db,                                              charset='utf8mb4',                                              cursorclass=pymysql.cursors.DictCursor)        except pymysql.err.OperationalError as e:            print("Mysql Error %d: %s" % (e.args[0], e.args[1]))    # clear table data    def clear(self, table_name):        # real_sql = "truncate table " + table_name + ";"        real_sql = "delete from " + table_name + ";"        with self.connection.cursor() as cursor:            cursor.execute("SET FOREIGN_KEY_CHECKS=0;")            cursor.execute(real_sql)        self.connection.commit()    # insert sql statement    def insert(self, table_name, table_data):        for key in table_data:            table_data[key] = "'" + str(table_data[key]) + "'"        key = ','.join(table_data.keys())        # print(key)        value = ','.join(table_data.values())        # print(value)        real_sql = "INSERT INTO " + table_name + " (" + key + ") VALUES (" + value + ")"        # print(real_sql)        with self.connection.cursor() as cursor:            cursor.execute(real_sql)        self.connection.commit()    # close database    def close(self):        self.connection.close()    # init data    def init_data(self, datas):        for table, data in datas.items():            self.clear(table)            for d in data:                self.insert(table, d)        self.close()if __name__ == '__main__':    db = DB()    table_name = "article_article"    data = {            'id': "1",            'title': "乡愁",            'author': "余光中",            'content': "小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头",            'date_publish': '2019-05-31 08:55:15.056780'}    db.clear(table_name)    db.insert(table_name, data)    db.close()

首先, 读取 db_config.ini 配置文件。创建 DB 类, init()方法初始化, 通过 pymysql.connect()连接数据库。因为这里只用到数据库表的清除和插入, 所以只创建 clear()和 insert()两个方法。 其中, insert()方法对数据的插入做了简单的格式转化, 可将字典转化成 SQL 插入语句, 这样格式转化了方便了数据库表数据的创建。最后, 通过 close()方法用于关闭数据库连接。

新增blog_test_data.py文件

import sysimport timesys.path.append('../db_fixture')try:    from mysql_db import DBexcept ImportError:    from .mysql_db import DB# create datadata = {    # 对应数据库表字段    'article_article': [        {            'id': "1",            'title': "乡愁",            'author': "余光中",            'content': "小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头",            'date_publish': '2019-05-31 08:55:15.056780'}    ]}# insertdef init_data():    DB().init_data(data)if __name__ == '__main__':    init_data()

生成测试报告及批量执行测试用例

生成测试报告也非常简单,我们直接使用HTMLTestRunner即可,添加HTMLTestRunner.py到目录结构。网上已有集成好的框架,我们直接下载即可。

然后我们创建report目录,用于存放生成的报告。因为我们不可能把所有的测试用例都写在一个.py文件里面,所以有时候我们需要批量执行测试用例 。我们创建run_tests.py,项目结构如下所示:
image.png

run_tests.py如下代码所示:

import time, sysfrom HTMLTestRunner import HTMLTestRunnerimport unittestsys.path.append('./testcases')sys.path.append('./db_fixture')# from db_fixture import role_test_data, notice_test_data, blacklist_test_data# 指定测试用例为当前文件夹下的 interface 目录test_dir = './testcases'discover = unittest.defaultTestLoader.discover(test_dir, pattern='*_test.py')if __name__ == "__main__":    now = time.strftime("%Y-%m-%d %H_%M_%S")    filename = './report/' + now + '_result.html'    fp = open(filename, 'wb')    runner = HTMLTestRunner(stream=fp,                            title='blog系统接口测试报告',                            description='Implementation Example with: ')    runner.run(discover)    fp.close()

运行run_tests.py,生成如下测试报告:

image.png

接口自动化框架总览

image.png

所有代码已上传至个人GitHub,如需克隆请至我的GitHub

欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560

转载于:https://www.cnblogs.com/suim1218/p/11023042.html

你可能感兴趣的文章
spring两大核心对象IOC和AOP(新手理解)
查看>>
数据分析相关
查看>>
Python LDAP中的时间戳转换为Linux下时间
查看>>
微信小程序蓝牙连接小票打印机
查看>>
环境错误2
查看>>
C++_了解虚函数的概念
查看>>
全新jmeter视频已经上架
查看>>
Windows 8下如何删除无线配置文件
查看>>
解决Windows 7中文件关联和打开方式
查看>>
oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)
查看>>
hp 服务器通过串口重定向功能的使用
查看>>
国外10大IT网站和博客网站
查看>>
android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果
查看>>
zabbix 批量web url监控
查看>>
MongoDB CookBook读书笔记之导入导出
查看>>
shell如何快速锁定所有账号
查看>>
HTML 5实现的手机摇一摇
查看>>
Linux 文件IO理解
查看>>
Ninject 2.x细说---2.绑定和作用域
查看>>
30个非常时尚的网页联系表单设计优秀示例
查看>>