예제 #1
0
def runCases():
    reader = Reader()
    writer = Writer()
    http = HTTP(writer)
    reader.open_excle('../lib/cases/HTTP接口用例.xls')
    writer.copy_open('../lib/cases/HTTP接口用例.xls',
                     '../lib/results/result-HTTP接口用例.xls')
    sheetname = writer.get_sheets()
    sheetname = reader.get_sheets()
    for sheet in sheetname:
        # 设置当前读写都是当前sheet页面
        reader.set_sheet(sheet)
        writer.set_sheet(sheet)
        # 默认都写在第7列
        writer.clo = 7

        # 遍历读取所有的sheet页面的内容
        for i in range(reader.rows):
            line = reader.readine()
            # 如果第一列或者第二列有内容,就是分组信息,不运行
            if len(line[0]) > 0 or len(line[1]) > 0:
                pass
            else:
                print(line)
                writer.row = i
                func = getfunc(line, http)
                lenargs = getargs(func)
                run(func, lenargs, line)
    writer.save_close()
예제 #2
0
    def getparams(self, path):
        # open_excel方法已有容错处理
        r = Reader()
        r.open_excel(path)
        tup = self.__getpassrate(r)
        # logger.debug(tup)
        #获取总用例数
        sum = tup[1]
        #获取通过率
        passrate = tup[0]
        #获取测试结果
        result = self.__getresult(passrate)
        self.sumarry['casecount'] = str(sum)
        self.sumarry['passrate'] = passrate
        self.sumarry['status'] = result

        return self.sumarry
예제 #3
0
    def get_res(self, result_path):
        self.sumarry.clear()
        status = 'Fail'
        # 标志是否有
        flag = True
        # 总用例数
        totalcount = 0
        # 总通过数
        totalpass = 0

        reader = Reader()
        reader.open_excel(result_path)
        for n in reader.get_sheets():
            reader.set_sheet(n)
            row = reader.rows
            reader.r = 1

        for i in range(1, row):
            line = reader.readline()
            logger.info(line)

            if not (line[0] == '' and line[1] == ''):
                pass
            else:
                if len(line) < 7 or line[7] == '':
                    flag = False
                    print('1' + str(flag))
                else:
                    totalcount = totalcount + 1
                    if line[7] == 'PASS':
                        totalpass += 1
                    else:
                        flag = False
                        print('2' + str(flag))

        if flag:
            status = 'PASS'
        try:
            p = int(totalpass * 10000 / totalcount)
            passrate = p / 100
        except Exception as e:
            passrate = 0.0
            logger.exception(e)
        self.sumarry['casecount'] = str(totalcount)
        self.sumarry['passrate'] = str(passrate)
        self.sumarry['status'] = status
        return self.sumarry
예제 #4
0
def runCase():
    global casepath, resultpath
    r = Reader()
    w = Writer()

    r.open_excel(casepath)  #打开表,默认为第一个sheet
    w.copy_open(casepath, resultpath)
    sheetname = r.get_sheets()

    #根据表格的配置,创建不同的对象,例如表中第2行第2个字段为WEB,即创建WEB()对象
    way = r.getparameter('1', '1')
    if way == 'APP':
        obj = APP(None)
    elif way == 'HTTP':
        obj = HTTP(w)
    elif way == 'SOAP':
        obj = SOAP(w)
    elif way == 'WEB':
        obj = WEB()

    w.set_sheet(sheetname[0])
    w.write(2, 3, str(
        datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))  # StartTime

    for sheet in sheetname:
        #设置读写都是当前的sheet页面
        r.set_sheet(sheet)
        w.set_sheet(sheet)
        w.clo = 7  #写入的列数以固定,所以设置列数为第8列,!第一列为0
        for i in range(r.rows):
            line = r.readline()
            w.row = i  #读到第几行就写入第几行
            print(line)
            if len(line[0]) > 0 or len(line[1]) > 0:
                continue
            else:
                # 接口类型设置2
                func = get_func(obj, line)

                L = get_args(func)
                run(func, L, line)

    w.set_sheet(sheetname[0])
    w.write(2, 4, str(
        datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))  #EndTime
    w.save_close()
예제 #5
0
def runCases():
    http = HTTP()
    reader = Reader()
    # writer = Writer()
    reader.open_excel('../lib/cases/HTTP接口用例.xls')
    # writer.copy_open('../lib/cases/HTTP接口用例.xls', '../lib/results/result-HTTP接口用例.xls')
    sheetname = reader.get_sheets()
    for sheet in sheetname:
        reader.set_sheet(sheet)
        for i in range(reader.rows):
            line = reader.readline()
            print(line)
            # 如果第一列或第二列不为空,则不是测试用例
            if len(line[0]) > 0 or len(line[1]) > 0:
                pass
            else:
                print(line)
                func = getfunc(line, http)
                lenargs = getargs(func)
                run(func, lenargs, line)
예제 #6
0
    elif len(params) == 3:
        func(line[4], line[5], line[6])
    else:
        print('暂时不支持超过3个参数的关键字')


# 读配置文件
config.get_config('./conf/conf.properties')
logger.info(config.config)

# 初始化数据库
mysql = Mysql()
mysql.init_mysql('./conf/userinfo.sql')

# 逐行读取excel
reader = Reader()
casename = 'Web'
reader.open_excel('./lib/%s.xls' % casename)
writer = Writer()
writer.copy_open('./lib/%s.xls' % casename, './lib/result-%s.xls' % casename)

sheetname = reader.get_sheets()
writer.set_sheet(sheetname[0])
starttime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
writer.write(1, 3, starttime)
reader.readline()
casetype = reader.readline()[1]
# 执行用例的关键字库对象
obj = None
if casetype == 'HTTP' or casetype == '':
    # 执行http接口自动化
예제 #7
0
# -*- coding: UTF-8 -*-
import inspect, sys, datetime
from common.Excel import Reader, Writer

reader = Reader()
writer = Writer()
alllist = []
runtype = 'WEB'


# 反射获取关键字
def geffunc(line, http):
    func = None
    try:
        func = getattr(http, line[0])
    except Exception as e:
        print(e)

    return func


# 反射获取参数
def getargs(func):
    if func:
        args = inspect.getfullargspec(func).__str__()
        args = args[args.find('args=') + 5:args.find(', varargs')]
        args = eval(args)
        args.remove('self')
        l = len(args)
        return l
    else:
예제 #8
0
    def get_res(self, result_path):
        #用于记录执行结果,逻辑行为,只要分组中出现一个失败,则认为改分组结果失败
        self.sumarry.clear()
        status = 'Fail'
        #标识是否有失败
        flag = True
        #统计测试用例的用例总数
        totalcount = 0
        #统计所有用例中通过用例的条数
        totalpass = 0

        reader = Reader()
        reader.open_excel(result_path)
        #获取所有sheet页面
        sheetname = reader.get_sheets()
        for n in sheetname:
            #从第一个页面开始解析
            reader.set_sheet(n)
            #获取当前sheeet的总行数,用来遍历
            row = reader.rows
            #设置从第二行开始读
            reader.r = 1

            #遍历sheet里面所有用例
            for i in range(1, row):
                line = reader.readline()
                #查找记录了分组信息的行
                #如果第一列(分组信息)和第二列(类名或者用例名)不同时为空,则不是用例,执行非用例操作
                # if not (line[0]  == '' and line[1]  == ''):
                if len(line[0]) > 0 or len(line[1]) > 0:
                    pass
                #非用例行判断借宿
                #第一列信息和第二列信息均为空的行,这时开始进行用例数、通过数、状态的统计
                else:
                    #判断执行结果列,如果为空,将flag置为false,是为改行有误,不纳入用例数量计算
                    if len(line) < 6 or len(line[7]) == '':
                        flag = False
                    #执行结果不为空,则将用例统计数自增
                    else:
                        totalcount += 1
                        #如果通过,则通过数和总通过数均自增
                        if line[7] == 'PASS':
                            totalpass += 1
                        else:
                            #出现了用例执行结果不是pass的情况,则视为当前分组执行失败
                            flag = False
            #for循环结束

        #所有用例执行概况
        #计算执行通过率
        #如果flag = True
        if flag:
            status = 'Pass'

        #计算通过率
        try:
            p = int(totalpass * 10000 / totalcount)
            passrate = p / 100
        except Exception as e:
            passrate = 0.0
            logger.exception(e)

        #设置默认第一个sheet,用来读取runtype,title,StartTime,EndTime
        reader.set_sheet(sheetname[0])

        self.sumarry['runtype'] = str(reader.getparameter('1', '1'))  #请求方式
        self.sumarry['title'] = str(reader.getparameter('1', '2'))  #标题
        self.sumarry['StartTime'] = str(reader.getparameter('2', '3'))  #开始时间
        self.sumarry['EndTime'] = str(reader.getparameter('2', '4'))  # 结束时间
        self.sumarry['casecount'] = str(totalcount)  #用例总数
        self.sumarry['passrate'] = str(passrate) + '%'  #通过率
        self.sumarry['status'] = status  #结果

        return self.sumarry
예제 #9
0
        return

    if line[3] == 'gettext':
        func.gettext(line[4])
        return

    if line[3] == 'assertequals':
        func.assertequals(line[4], line[5])
        return

    if line[3] == 'intoiframe':
        func.intoiframe(line[4])
        return

    if line[3] == 'outiframe':
        func.outiframe()
        return


reader = Reader()
func = Web()
reader.open_excel('./lib/Web.xls')
sheetname = reader.get_sheets()
for sheet in sheetname:
    # 设置当前读取的sheet页面
    reader.set_sheet(sheet)
    for i in range(reader.rows):
        line = reader.readline()
        print(line)
        runcase(line, func)
예제 #10
0
        else:
            logger.warn("waring:框架暂时只支持3个参数!")


if __name__ == "__main__":
    logger.info("整个框架使用该入口执行")
    #运行用例之前,初始化配置,初始化数据库

    casename = 'XLSHTTP接口用例.xls'

    config.get_config('./lib/conf.properties')
    mysql = Mysql()
    mysql.init_mysql('./lib/userinfo.sql')

    #开始读取用例
    reader = Reader()
    # http = HTTP()
    # reader.open_excel('./lib/HTTP接口用例.xls')
    reader.open_excel('./lib/' + casename)
    sheetname = reader.get_sheets()
    logger.info(sheetname)

    writer = Writer()
    # writer.copy_open('./lib/HTTP接口用例.xls', './lib/result-HTTP接口用例.xls')
    writer.copy_open('./lib/' + casename, './lib/result-' + casename)
    # sheetname = writer.get_sheets()

    #获取开始时间
    t = str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    #设置shet页
    writer.set_sheet(sheetname[0])
예제 #11
0
    def get_groups(self, result_path):
        # 用于记录执行结果,逻辑为,只要分组中出现一个失败用例,则认为该分组执行失败,与flag联合使用。
        #统计分组信息用的list
        self.groups.clear()
        # 每一个分组统计信息为列表,记录每一行的分组信息
        groupinfo = []
        status = "Fail"
        # 标识是否有失败
        flag = True

        # 统计每一个分组的用例总条数
        totalcount = 0
        # 统计分组用例中通过用例的条数数
        totalpass = 0

        reader = Reader()
        reader.open_excel(result_path)
        # 获取所有sheet页面
        for n in reader.get_sheets():
            # logger.info(n)
            # 从第一个页面开始解析
            reader.set_sheet(n)
            # 获取sheet的行数,用来遍历
            row = reader.rows
            # 设置从第二行开始读
            reader.r = 1

            # 标识一个分组是否统计完,
            #每一个sheet进来的时候标识为True(整个整个sheet的统计,为0的时候保存分组信息名称)
            gflag = True

            # 遍历sheet里面所有用例
            for i in range(1, row):
                #这里已经读取一行
                line = reader.readline()
                # logger.info(line)
                # 查找记录了分组信息的行
                # 如果第一列(分组信息,不等于空)
                if not line[0] == '':
                    # 先保存上一步信息
                    # 如果不是sheet最开始(第一行),就保存上一个分组统计的全部信息
                    #已经读取一行了,所以为flase,sheet没有内容了为true
                    if not gflag:
                        # 标识是否有失败(flag),如果这一组统计完以后状态是pass,或者就是失败
                        if flag:
                            status = 'pass'
                        else:
                            status = 'fail'
                        # groupinfo 分组下面的每一行
                        groupinfo.append(totalcount)
                        groupinfo.append(totalpass)
                        groupinfo.append(status)
                        self.groups.append(groupinfo)

                        # 重置下一个分组的统计信息
                        # 每一个分组统计信息为列表
                        groupinfo = []
                        status = "Fail"
                        # 标识是否有失败.重新置为true进入循环
                        flag = True

                        # 统计每一个分组的用例总条数
                        totalcount = 0
                        # 统计分组用例中通过用例的条数数
                        totalpass = 0

                    # 保存分组名字
                    groupinfo.append(line[0])

                    # 表示当前分组未统计完
                    gflag = False
                # 第二列(类别或用例名)不同时为空,则不是用例,执行非用例的操作(去掉功能模块一列)
                elif not line[1] == '':
                    # 不做统计
                    pass

                # 非用例行判断结束
                # 第一列信息和第二列信息均为空的行,即用例行,这时开始进行用例数、通过数、状态的统计。
                else:
                    # 判断执行结果列,如果为空,将flag置为false,视为该行有误,不纳入用例数量计算
                    if len(line) < 7 or line[7] == '':
                        flag = False
                    # 执行结果不为空,则将用例统计数自增
                    else:
                        totalcount = totalcount + 1
                        # logger.info(line)
                        # 如果通过,则通过数和总通过数均自增
                        if line[7] == "PASS":
                            totalpass += 1
                        else:
                            # 出现了用例执行结果不是PASS的情况,则视为当前分组执行失败。
                            flag = False

            # 当一个sheet统计完成后,保存上一次统计的结果
            if flag:
                status = 'pass'
            else:
                status = 'fail'
            groupinfo.append(totalcount)
            groupinfo.append(totalpass)
            groupinfo.append(status)
            self.groups.append(groupinfo)

            # 重置下一个分组的统计信息
            # 每一个分组统计信息为列表,第二次的时候全部初始为空
            groupinfo = []

            # 标识是否有失败
            flag = True

            # 统计每一个分组的用例总条数
            totalcount = 0
            # 统计分组用例中通过用例的条数数
            totalpass = 0

        return self.groups
예제 #12
0
# -*- coding: UTF-8 -*-
import inspect, sys, datetime
from common.Excel import Reader, Writer
from common import logger
import threading

reader = Reader()
writer = Writer()
alllist = []
runtype = 'WEB'
title =''
lock = threading.Lock()

# 反射获取关键字
def geffunc(line, http):
    func = None
    try:
        func = getattr(http, line[0])
    except Exception as e:
        print(e)
    return func

# 反射获取参数
def getargs(func):
    if func:
        args = inspect.getfullargspec(func).__str__()
        args = args[args.find('args=') + 5:args.find(', varargs')]
        args = eval(args)
        args.remove('self')
        l = len(args)
예제 #13
0
def runCases():
    global casepath, resultpath
    reader = Reader()
    writer = Writer()
    web = Web(writer)
    reader.open_excel(casepath)
    # 第一行
    reader.readline()
    # 第二行
    line = reader.readline()
    runtype = line[1]
    print(runtype)
    if runtype == 'WEB':
        obj = Web(writer)
    if runtype == 'HTTP':
        obj = HTTP(writer)

    writer.copy_open(casepath, resultpath)
    sheetname = reader.get_sheets()
    writer.set_sheet(sheetname[0])
    writer.write(1, 3,
                 str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
    for sheet in sheetname:
        # 设置当前读写的sheet页面
        reader.set_sheet(sheet)
        writer.set_sheet(sheet)
        # 默认写第7列
        writer.clo = 7

        for i in range(reader.rows):
            line = reader.readline()
            # 如果第一列或者第二列有内容,就是分组信息,不运行
            if len(line[0]) > 0 or len(line[1]) > 0:
                pass
            else:
                # 从excel读取的每行数据
                # logger.info(line)
                writer.row = i
                func = geffunc(line, obj)
                lenargs = getargs(func)
                run(func, lenargs, line)

    writer.set_sheet(sheetname[0])
    writer.write(1, 4,
                 str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
    writer.save_close()
예제 #14
0
    def get_res(self, result_path):
        self.sumarry.clear()
        status = 'Fail'
        # 标记是够有失败
        flag = True
        # 测试用例总条数目
        totalcount = 0
        # 统计通过用例数
        totalpass = 0

        reader = Reader()
        reader.open_excel(result_path)
        reader.readline()
        line = reader.readline()
        self.sumarry['runtype'] = line[1]
        self.sumarry['title'] = line[2]
        self.sumarry['starttime'] = line[3]
        self.sumarry['endtime'] = line[4]
        for n in reader.get_sheets():
            reader.set_sheet(n)
            row = reader.rows
            reader.r = 1

            for i in range(1, row):
                line = reader.readline()
                if not (line[0] == '' and line[1] == ''):
                    pass
                else:
                    if len(line) < 7 or line[7] == '':
                        flag = False
                    else:
                        totalcount = totalcount + 1
                        if line[7] == 'PASS':
                            totalpass += 1
                        else:
                            flag = False

        if flag:
            status = "Pass"
        try:
            p = int(totalpass * 10000 / totalcount)
            passrate = p / 100
        except Exception as e:
            passrate = 0.0
            logger.exception(e)

        self.sumarry["casecount"] = str(totalcount)
        # 通过率
        self.sumarry["passrate"] = str(passrate) + '%'
        self.sumarry['status'] = status
        return self.sumarry
예제 #15
0
    def get_res(self, result_path):
        # 用于记录执行结果,逻辑为,只要分组中出现一个失败用例,则认为该分组执行失败,与flag联合使用。
        self.sumarry.clear()
        status = "Fail"
        # 标识是否有失败
        flag = True
        # 统计测试用例集的用例总条数
        totalcount = 0
        # 统计所有用例中通过用例的条数数
        totalpass = 0

        reader = Reader()
        reader.open_excel(result_path)
        reader.readline()
        line = reader.readline()
        self.sumarry['runtype'] = line[1]
        self.sumarry['title'] = line[2]
        self.sumarry['starttime'] = line[3]
        self.sumarry['endtime'] = line[4]
        # 获取所有sheet页面
        for n in reader.get_sheets():
            # logger.info(n)
            # 从第一个页面开始解析
            reader.set_sheet(n)
            # 获取sheet的行数,用来遍历
            row = reader.rows
            # 设置从第二行开始读
            reader.r = 1

            # 遍历sheet里面所有用例
            for i in range(1, row):
                line = reader.readline()
                # logger.info(line)
                # 查找记录了分组信息的行
                # 如果第一列(分组信息)和第二列(类别或用例名)不同时为空,则不是用例,执行非用例的操作
                if not (line[0] == '' and line[1] == ''):
                    pass

                # 非用例行判断结束
                # 第一列信息和第二列信息均为空的行,即用例行,这时开始进行用例数、通过数、状态的统计。
                else:
                    # 判断执行结果列,如果为空,将flag置为false,视为该行有误,不纳入用例数量计算
                    if len(line) < 7 or line[7] == '':
                        flag = False
                    # 执行结果不为空,则将用例统计数自增
                    else:
                        totalcount = totalcount + 1
                        # logger.info(line)
                        # 如果通过,则通过数和总通过数均自增
                        if line[7] == "PASS":
                            totalpass += 1
                        else:
                            # 出现了用例执行结果不是PASS的情况,则视为当前分组执行失败。
                            flag = False
            # for循环结束

        # 所有用例执行概况
        # logger.info(totalpass)
        # 计算执行通过率
        if flag:
            status = "Pass"

        # 计算通过率
        try:
            p = int(totalpass * 10000 / totalcount)
            passrate = p / 100
        except Exception as e:
            passrate = 0.0
            logger.exception(e)

        # 用例总数
        self.sumarry["casecount"] = str(totalcount)
        # 通过率
        self.sumarry["passrate"] = str(passrate)
        self.sumarry['status'] = status
        # logger.info(self.sumarry)
        return self.sumarry
예제 #16
0
    def get_groups(self, result_path):
        # 用于记录执行结果,逻辑为,只要分组中出现一个失败用例,则认为该分组执行失败,与flag联合使用。
        self.groups.clear()
        # 每一个分组统计信息为列表
        groupinfo = []
        status = "Fail"
        # 标识是否有失败
        flag = True

        # 统计每一个分组的用例总条数
        totalcount = 0
        # 统计分组用例中通过用例的条数数
        totalpass = 0

        reader = Reader()
        reader.open_excel(result_path)
        # 获取所有sheet页面
        for n in reader.get_sheets():
            # logger.info(n)
            # 从第一个页面开始解析
            reader.set_sheet(n)
            # 获取sheet的行数,用来遍历
            row = reader.rows
            # 设置从第二行开始读
            reader.r = 1

            # 标识一个分组是否统计完
            gflag = True

            # 遍历sheet里面所有用例
            for i in range(1, row):
                line = reader.readline()
                # logger.info(line)
                # 查找记录了分组信息的行
                # 如果第一列(分组信息)
                if not line[0] == '':
                    # 先保存上一步信息
                    # 如果不是sheet最开始,就保存上一个分组统计的全部信息
                    if not gflag:
                        if flag:
                            status = 'pass'
                        else:
                            status = 'fail'
                        groupinfo.append(totalcount)
                        groupinfo.append(totalpass)
                        groupinfo.append(status)
                        self.groups.append(groupinfo)

                        # 重置下一个分组的统计信息
                        # 每一个分组统计信息为列表
                        groupinfo = []
                        status = "Fail"
                        # 标识是否有失败
                        flag = True

                        # 统计每一个分组的用例总条数
                        totalcount = 0
                        # 统计分组用例中通过用例的条数数
                        totalpass = 0

                    # 保存分组名字
                    groupinfo.append(line[0])

                    # 表示当前分组未统计完
                    gflag = False
                # 第二列(类别或用例名)不同时为空,则不是用例,执行非用例的操作
                elif not line[1] == '':
                    # 不做统计
                    pass

                # 非用例行判断结束
                # 第一列信息和第二列信息均为空的行,即用例行,这时开始进行用例数、通过数、状态的统计。
                else:
                    # 判断执行结果列,如果为空,将flag置为false,视为该行有误,不纳入用例数量计算
                    if len(line) < 7 or line[7] == '':
                        flag = False
                    # 执行结果不为空,则将用例统计数自增
                    else:
                        totalcount = totalcount + 1
                        # logger.info(line)
                        # 如果通过,则通过数和总通过数均自增
                        if line[7] == "PASS":
                            totalpass += 1
                        else:
                            # 出现了用例执行结果不是PASS的情况,则视为当前分组执行失败。
                            flag = False

            # 当一个sheet统计完成后,保存上一次统计的结果
            if flag:
                status = 'pass'
            else:
                status = 'fail'
            groupinfo.append(totalcount)
            groupinfo.append(totalpass)
            groupinfo.append(status)
            self.groups.append(groupinfo)

            # 重置下一个分组的统计信息
            # 每一个分组统计信息为列表
            groupinfo = []
            status = "Fail"
            # 标识是否有失败
            flag = True

            # 统计每一个分组的用例总条数
            totalcount = 0
            # 统计分组用例中通过用例的条数数
            totalpass = 0

        return self.groups
예제 #17
0
        func()
        return
    if len(args) == 1:
        func(line[4])
        return
    if len(args) == 2:
        func(line[4], line[5])
        return
    if len(args) == 3:
        func(line[4], line[5], line[6])
        return
    print("warning: 目前仅支持三个以内的参数")


casename = "SOAP"
reader = Reader()
reader.open_excel("./lib/cases/" + casename + ".xls")
writer = Writer()
writer.copy_open('./lib/cases/' + casename + '.xls',
                 './lib/results/' + casename + '-result.xls')
sheetnames = writer.get_sheets()

reader.readline()
caseType = reader.readline()[1]
http = None
if caseType == 'HTTP':
    http = HTTP(writer)
elif caseType == 'SOAP':
    http = SOAP(writer)

#开始执行时间