欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自动化测试初始化数据库环境

程序员文章站 2022-06-30 21:11:02
通过上面的测试用例我们发现,如果我们再次运行测试用例,会发现创建blog的那条测试用例无法通过,因为在我们第一次执行的时候,数据库已经存在了这个blog的id,而blod的id的是唯一的,所以如果我们经常回归测试用例,势必会造成某些用例无法通过。那么有没有解决方案呢?答案当然是有的,我们可以对数据库进行初始化操作,传统方式我们直接编写sql语句,但是我们有更简单的做法,我们用 python将sql语句进行封装。我们创建db_fixture文件夹,里面创建mysql_db.py文件,并在项目最外层创建db_c...

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

自动化测试初始化数据库环境
修改db_config.ini

[mysqlconf] host=127.0.0.1 port=3306 user=root
password= db_name=blog 

对数据库进行操作

mysql_db.py代码如下所示:

# coding=utf-8 import pymysql.cursors import os import 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 sys
import time

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

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

生成测试报告也非常简单,我们直接使用HTMLTestRunner即可,添加HTMLTestRunner.py到目录结构。网上已有集成好的框架,我们直接下载即可。GitHub下载地址
然后我们创建report目录,用于存放生成的报告。因为我们不可能把所有的测试用例都写在一个.py文件里面,所以有时候我们需要批量执行测试用例 。我们创建

run_tests.py,项目结构如下所示:

自动化测试初始化数据库环境
run_tests.py如下代码所示:

import time, sys
from HTMLTestRunner import HTMLTestRunner
import unittest

sys.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,生成如下测试报告:

自动化测试初始化数据库环境
接口自动化框架总览

自动化测试初始化数据库环境
所有代码已上传至个人GitHub,如需克隆请至我的GitHub下载

自动化测试初始化数据库环境

上面是我收集的一些视频资源,在这个过程中帮到了我很多。如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们扣扣群【313782132 】,里面有各种软件测试资源和技术讨论。

自动化测试初始化数据库环境

更多好文章分享:

原来功能测试转成自动化测试这么简单?

见识了解python自动化测试(3)

测试大神的工作经验总结

Python究竟有多简单?

本文地址:https://blog.csdn.net/weixin_50271247/article/details/108867765