예제 #1
0
    def do_pymysql(self, query, flag):
        """
        query:sql查询语句
        flag:1表示获取第一条数据,2表示获取多条数据"""
        db_config = ReadConfig(project_path.conf_path).get_data('DB', 'db_config')
        cnn = pymysql.connect(**db_config)  # 建立连接
        cursor = cnn.cursor()
        cursor.execute(query)

        if flag == 1:
            res = cursor.fetchone()
        else:
            res = cursor.fetchall()
        return res
예제 #2
0
    def read_case(self, section):
        """此函数用于读取Excel里面的测试用例,有返回值
        section: 配置文件里面的片段名,根据设定来具体执行哪些测试用例"""

        # 配置文件控制读取哪些用例
        case_id = ReadConfig(project_path.conf_path).get_data(
            section,
            'case_id')  # get_data()是自己写的read_config模块中用于读取配置文件中元组、字典、列表的函数
        wb = load_workbook(self.file_name)  # 打开工作簿,文件名出现了t开头,要多加/
        sheet = wb[self.sheet_name]  # 定位表单

        # tel = self.get_tel()  # 放这里不妥,要是多条用例需要新的手机号,却还没更新
        test_data = []
        for i in range(2, sheet.max_row + 1):
            # tel = self.get_tel()  #放这里也不妥,不需要新手机号也会每次都更新,浪费!
            row_data = {}
            row_data['CaseId'] = sheet.cell(i, 1).value
            row_data['Module'] = sheet.cell(i, 2).value
            row_data['Title'] = sheet.cell(i, 3).value
            row_data['Method'] = sheet.cell(i, 4).value
            row_data['Url'] = sheet.cell(i, 5).value
            # 自动更新手机号
            if sheet.cell(i, 6).value.find(
                    'tel'
            ) != -1:  # find()是内置函数,如果找到'tel'则返回最小索引值,找不到则返回-1.也可以用成员运算in
                tel = self.get_tel()  # 对象调用get_tel()方法获取存在excel里面的电话号码
                row_data['Params'] = sheet.cell(i, 6).value.replace(
                    'tel',
                    str(tel))  # replace是字符串之间的替换,tel是int,所以用str(tel)转str
                self.update_tel(
                    int(tel) + 1)  # 将手机号+1再写回excel中的备用手机号 要是同时有两条用例需要没注册过的手机号?
            else:
                row_data['Params'] = sheet.cell(i, 6).value
            row_data['sql'] = sheet.cell(i, 7).value
            row_data['ExpectedResult'] = sheet.cell(i, 8).value
            test_data.append(row_data)
        wb.close()  # 记得关闭

        # 根据配置文件读取测试用例
        final_data = []  # 定义一个空列表,用于存储根据配置文件需要读取的测试用例
        if case_id == "all":  # 把1换成all时报错:不可迭代,配置文件把all变成"all"即可,本来是str,都出来也是str,相当于双重str
            final_data = test_data
        else:
            for i in case_id:  # case_id是配置文件[CASE]里面的section,具体值可自行配置
                final_data.append(test_data[
                    i -
                    1])  # i是case,从1开始,但是列表索引是从0开始遍历的,所以要减1,但是如果配置文件中的i是"all",
        return final_data
예제 #3
0
    def read_data(self):  #section 配置文件里面的片段名 可以根据你的指定来执行具体的用例
        '''从Excel读取数据,有返回值'''
        #从配置文件里面控制读取哪些用例
        case_id = ReadConfig(project_path.conf_path_new).get_data(
            'CASEID', 'case_id')
        #case_id={'recharge':'all','register':[1,2]}
        wb = load_workbook(self.file_name)
        #唯一的要求是什么?每一行数据要在一起 {} []
        #如何把每一行的数据存到一个空间里面去? []
        #开始读取数据
        #获取存在excel里面的电话号码
        tel = self.get_tel()

        final_data = []  #空列表 存储最终的测试用例数据
        #case_id={'recharge':'all','register':[1,2]} 这个是配置文件读取到的字典数据
        for key in case_id:  #遍历字典
            test_data = []  #存储每个表单的数据
            sheet_name = key  #字典的key就是表单名
            sheet = wb[sheet_name]  #获取一个表单对象
            for i in range(2, sheet.max_row + 1):
                row_data = {}
                row_data['CaseId'] = sheet.cell(i, 1).value
                row_data['Module'] = sheet.cell(i, 2).value
                row_data['Title'] = sheet.cell(i, 3).value
                row_data['Url'] = sheet.cell(i, 4).value
                row_data['Method'] = sheet.cell(i, 5).value
                if sheet.cell(
                        i,
                        6).value.find('tel') != -1:  #注意这个方法的使用以及返回值 也可以用成员运算符
                    row_data['Params'] = sheet.cell(i, 6).value.replace(
                        'tel', str(tel))  #替换值 tel  为啥要用str()
                    self.update_tel(int(tel) + 1)
                else:  #如果没有tel这个子字符串  就不需要去替换了
                    row_data['Params'] = sheet.cell(i, 6).value
                row_data['ExpectedResult'] = sheet.cell(i, 7).value
                row_data[
                    'sheet_name'] = key  #这里做个表单存储~~方便后面确定到底是执行哪个模块的用例写到哪些结果里面去
                test_data.append(row_data)

            if case_id[key] == 'all':  #如果case_id==all 那就获取所有的用例数据
                final_data.extend(test_data)  #把测试用例赋值给final_data这个变量
            else:  #否则 如果是列表 那就获取列表里面指定id的用例的数据
                for i in case_id[key]:  #遍历case_id 里面的值
                    final_data.append(test_data[i - 1])  #?对应关系??
            wb.close()
        return final_data
예제 #4
0
    def do_mysql(self, query, flag=1):
        '''
        :query sql查询语句
        :flag 标志 1 获取一条数据 2获取多条数据'''
        db_config = ReadConfig(project_path.conf_path).get_data(
            'DB', 'db_config')

        cnn = connector.connect(**db_config)  #建立一个链接
        cursor = cnn.cursor()

        cursor.execute(query)

        if flag == 1:
            res = cursor.fetchone()  #返回的元组
        else:
            res = cursor.fetchall()  #返回的是列表嵌套元组

        return res
예제 #5
0
    def read_data(self, section):  # section 配置文件里面的片段名 可以根据你的指定来执行具体的用例
        '''从Excel读取数据,有返回值'''
        # 从配置文件里面控制读取哪些用例
        case_id = ReadConfig(project_path.conf_path).get_data(
            section, 'case_id')
        wb = load_workbook(self.file_name)
        sheet = wb[self.sheet_name]

        # 唯一的要求是什么?每一行数据要在一起 {} []
        # 如何把每一行的数据存到一个空间里面去? []
        # 开始读取数据
        # 获取存在excel里面的电话号码
        tel = self.get_tel()

        test_data = []
        for i in range(2, sheet.max_row + 1):
            row_data = {}
            row_data['CaseId'] = sheet.cell(i, 1).value
            row_data['Module'] = sheet.cell(i, 2).value
            row_data['Title'] = sheet.cell(i, 3).value
            row_data['Url'] = sheet.cell(i, 4).value
            row_data['Method'] = sheet.cell(i, 5).value
            if sheet.cell(
                    i, 6).value.find('tel') != -1:  # 注意这个方法的使用以及返回值 也可以用成员运算符
                row_data['Params'] = sheet.cell(i, 6).value.replace(
                    'tel', str(tel))  # 替换值 tel  为啥要用str()
                self.update_tel(int(tel) + 1)
            else:  # 如果没有tel这个子字符串  就不需要去替换了
                row_data['Params'] = sheet.cell(i, 6).value
            row_data['sql'] = sheet.cell(i, 7).value  # 加上去的sql语句
            row_data['ExpectedResult'] = sheet.cell(i, 8).value
            test_data.append(row_data)
        wb.close()
        final_data = []  # 空列表 存储最终的测试用例数据
        if case_id == 'all':  # 如果case_id==all 那就获取所有的用例数据
            final_data = test_data  # 把测试用例赋值给final_data这个变量
        else:  # 否则 如果是列表 那就获取列表里面指定id的用例的数据
            for i in case_id:  # 遍历case_id 里面的值
                final_data.append(test_data[i - 1])  # ?对应关系??
        return final_data
예제 #6
0
# -*- coding: utf-8 -*-
# @Time    : 2019/3/18 21:07
# @Author  : lemon_huahua
# @Email   : [email protected]
# @File    : get_data.py
from API_7.common.read_config import ReadConfig
from API_7.common import project_path
import re

config = ReadConfig(project_path.conf_path)


class GetData:
    '''可以用来动态的更改 删除 获取数据'''
    COOKIE = None
    LOAN_ID = None  # 新添加的标id初始值

    normal_user = config.get_str('data', 'normal_user')
    normal_pwd = config.get_str('data', 'normal_pwd')
    normal_member_id = config.get_str('data', 'normal_member_id')


# 类属性
# print(GetData.COOKIE)
# print(GetData().COOKIE)
# 类的反射可以动态的查看,增加,删除,更改类里面的属性
# 利用反射的方法来拿值
# print(getattr(GetData,'COOKIE'))#第一个参数是类名  第二个参数是属性的参数名
# print(hasattr(GetData,'COOKIE'))#第一个参数是类名  第二个参数是属性的参数名 返回值是布尔值
# print(setattr(GetData,'COOKIE','123456'))
# #第一个参数是类名  第二个参数是属性的参数名 第三个你要设置的新值