pymysql 和 #phone#与替换

文件路径配置

– 框架结构当中,不同的目录路径配置。可移植

import os

# 1、basedir
basedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 拼到配置文件路径
conf_dir = os.path.join(basedir, "Conf")

# 拼接  测试数据路径
testdata_dir = os.path.join(basedir, "testdatas")

# 日志路径
log_dir = os.path.join(basedir, "outputs", "logs")

# 报告路径
report_dir = os.path.join(basedir, "outputs", "reports")

==================

pymysql 的 使用

一、python与各大数据库的连接:
http://testingpai.com/article/1596527686073

二、pymysql 安装
pip install pymysql

三、pymysql 包引入
import pymysql

1、连接数据库
数据库ip地址/域名
数据库名
用户名和密码
端口:mysql 3306

import pymysql

# 1、连接mysql数据库 - 占用数据库资源
db = pymysql.connect(
    host="api.lemonban.com",
    user="future",
    password="123456",
    port=3306,
    database="futureloan",
    charset="utf8",
    cursorclass=pymysql.cursors.DictCursor
)

cur = db.cursor()  	# 2、创建游标

# 3、执行sql语句
sql = "select id from member where mobile_phone='13350171234'"
affected_rows = cur.execute(sql)	# 返回的是affected_rows表示执行后的结果 条数

# 4、获取查询的结果
# data = cur.fetchone()		# 获取第一个结果。返回是一个字典。
# cur.fetchmany(size=2) 	# 获取前2行

# 获取所有的结果。返回的是一个列表。
data = cur.fetchall()
print(data)

# 5、关闭游标、关闭数据库连接
cur.close()			#	关闭游标
db.close()			#	关闭数据库连接
 

================================

封装 pymysql

– 封装数据库连接,数据库操作,关闭。 数据库连接参数配置在Conf目录下

import pymysql
import os

from common.myConf import MyConf
from common.my_path import conf_dir

class MyMysql:

    def __init__(self):
    
        # 实例化配置类对象
        conf = MyConf(os.path.join(conf_dir, "mysql.ini"))
        
        # 连接数据库/生成游标
        self.db = pymysql.connect(
            host=conf.get("mysql", "host"),
            user=conf.get("mysql", "user"),
            password=conf.get("mysql", "passwd"),
            port=conf.getint("mysql", "port"),
            database=conf.get("mysql", "database"),
            charset="utf8",
            cursorclass=pymysql.cursors.DictCursor
        )

        # 2、创建游标
        self.cur = self.db.cursor()

    def get_count(self,sql):
    """ 获取 sql 的条数, 表示执行后的结果:条数 """
        count = self.cur.execute(sql)
        return count

    def get_one_data(self,sql):
    """ 获取第一个结果。返回是一个字典。 """
        self.cur.execute(sql)
        return self.cur.fetchone()

    def get_many_data(self,sql, size=None):
    
        self.cur.execute(sql)
        if size:
         """ 获取多少行,可以指定获取多少行。 """
            return self.cur.fetchmany(size)
        else:
         """ 获取所有的结果 """
            return self.cur.fetchall()

    def close_conn(self):
    """ 关闭游标、关闭数据库连接 """
        self.cur.close()
        self.db.close()

""" 调式代码:执行当前的模块。"""
if __name__ == '__main__':
    conn = My_mysql()
    sql = "select * from member where mobile_phone='13560745669';"
    count = conn.get_count(sql)
    print(count)
    conn.close_conn()

=================================================

获取手机号码处理

– 手机号码生成。faker生成,用mysql去确认是否已注册。

from faker import Faker
from common.mysql_handler import MysqlHandler


def get_new_phone():
    """
    # 得到没有注册过的手机号码。
    # 1、使用faker生成手机号码
    # 2、调用mysql数据库操作,去判断是否在数据中存在。如果不在,表示没有注册
    :return:
    """
    while True:
        phone = Faker("zh_CN").phone_number()
        sql = "select id from member where mobile_phone='{}';".format(phone)
        res = MysqlHandler().get_count(sql)
        if res == 0:
            return phone
            

===========================================================

#phone# 占位符替换

如 {“mobile_phone”: “#phone#”,“pwd”: “wtg444444”, “reg_name”: “白糖”,“tepy”:0}

import os
import json
import pytest
from common.py_log import LoggerHandler
from common.my_assert import MyAssert
from common.My_excel import MyExcel
from common.my_requests import MyRequests
from common.handele_phone import get_new_phone
from common.my_path import testdata_dir

log_info = LoggerHandler()
# 第一步:读取注册接口的测试数据 - 是个列表,列表中的每个成员,都是一个接口用例的数据。
excel_path = os.path.join(testdata_dir,"注册接口用例.xlsx")
me = MyExcel(excel_path, "注册")
cases = me.read_data()

# 第二步:遍历测试数据,每一组数据,发起一个http的接口请求
# 实例化请求对象
mq = MyRequests()
massert = MyAssert()

class TestRegister:

    @pytest.mark.parametrize("case", cases)
    def test_regiser(self,case):
        logger.info("=========== 注册接口测试  ===============")
       new_phone = get_new_phone()		# 设置属性,自动生成手机号码。
       
        if case["req_data"] and case["req_data"].find('#phone#') != -1:		# 如果 case["req_data"] 和 case["req_data"] .里面的(#手机号码#) != -1:  (-1)在这里是没有。
            # 替换掉 req_data 里面的占位符 - 请求数据和断言里面替换掉#phone#,替换成未注册手机号码
            logger.info("新生成的手机号码是:{}".format(new_phone))
            case["req_data"] = case["req_data"].replace('#phone#', new_phone)		# case["req_data"] = case["req_data"].替换掉(#手机号码#,new_phone:新生成的手机号码)
			
        # 替换掉占位符 - 请求数据和断言里面替换掉#phone#,替换成未注册手机号码
        if case["assert_list"] and case["assert_list"].find('#phone#') != -1:		# 如果 case["assert_list"] 和 case["assert_list"].里面的(#手机号码#) != -1:  (-1)在这里是没有。
            case["assert_list"] = case["assert_list"].replace('#phone#', new_phone)		# case["assert_list"] = case["assert_list"].替换成(#手机号码#, new_phone:新生成的手机号码)

        # 把json格式的字符串,转换成一个字典
        req_dict = json.loads(case["req_data"])
        
        resp = mq.send_requests(case["url"], case["method"], req_dict)
        # print(resp.json())
        # 要断言
        if case["assert_list"]:
            massert.assert_response_value(case["assert_list"], resp.json())



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值