def setUp(self):
        self.dict = global_config._global_dict                              # 全局变量字典
        self.moduleName = "报销单审批流"                                     # 当前流程名称
        global_config.set_value("MODULENAME",self.moduleName)

        self.url = Environment_Select[self.dict.get("ENVIRONMENT")]         # 环境基础地址
        self.caseName = None                                                # 被测案例的案例名

        self.myRow = global_config.get_value('TESTROW')                     # 调用数据行
        self.result = None                                                  # 当前案例响应报文
        self.testResult = None                                              # 当前案例执行状态(在最后一个案例中还作为流程执行状态)
        self.terminateProcess = makeProcessData("#流程开关")                 # 案例执行开关

        if self.terminateProcess == "":
            for (k,v) in self.dict.items():
                if k != "TESTROW" and k != "TESTLOOPTIME":
                    print("🔼 全局变量 %s 的值为: %s" %(k,v))
Beispiel #2
0
    def getDataSheet(self):
        dataFileDirPath = os.path.dirname(
            os.path.abspath(__file__)) + u"\\interface"
        files = os.listdir(dataFileDirPath)
        for fileName in files:
            if fileName.find("销售合同新增") > 0:
                self.dataSheetName = "数据表-销售合同新增"
                break
            elif fileName.find("采购合同新增") > 0:
                self.dataSheetName = "数据表-采购合同新增"
                break
            elif fileName.find("上架") > 0 or fileName.find("下架") > 0:
                if fileName.find("并发上架") > 0:
                    self.dataSheetName = "数据表-并发上架"
                    break
                else:
                    self.dataSheetName = "数据表-上下架"
                    break
            elif fileName.find("库存调整") > 0:
                self.dataSheetName = "数据表-库存调整"
                break
            elif fileName.find("报销单") > 0:
                if fileName.find("报销单新增") > 0:
                    self.dataSheetName = "数据表-报销单新增"
                    break
                elif fileName.find("报销单标记") > 0:
                    self.dataSheetName = "数据表-报销单标记"
                    break
            elif fileName.find("审批流处理") > 0:
                self.dataSheetName = "数据表-审批流处理"
                break

        if self.dataSheetName:
            self.setGlobalVar("DATASHEETNAME", self.dataSheetName)
            if global_config.get_value("TESTLOOPTIME") == 1:
                print("◾ 遍历数据表:%s" % self.dataSheetName)
        else:
            print("⚡ 请检查 案例文件/excel文件数据表sheet/框架run_tests.py 同步情况!")
            os._exit(0)
    def test01_box_uptray(self):
        ''' 登陆500环境PDA后,扫码进行箱子上托盘 '''
        # **************************** 案例公共信息初始化 ****************************
        self.caseName = (lambda: sys._getframe(1).f_code.co_name)()
        global_config.set_value("CASENAME", self.caseName)
        login_url = self.url + getInterfaceData("登陆接口")
        base_url = self.url + getInterfaceData("调用接口")

        # 与库表中数据主键重复情况均需考虑是否用初始化
        if getInterfaceData("是否数据库初始化") == "是":
            DB().delete(tableName, deleteData)

        try:
            # 确定并发流程数
            multiAccount = eval(makeJsonData("并发流程数"))
            token = get_token(login_url, makeJsonData("经办登录名"),
                              makeJsonData("登陆密码"))
            errAccount = 0
            start = time.time()
            one_work_num = 1
            # pool = multiprocessing.Pool(4)
            pool = threadpool.ThreadPool(10)

            for i in range(multiAccount):
                multiRow = global_config.get_value("TESTROW") + i
                # myProcess = threading.Thread(target=box_uptray,args=(login_url,base_url,multiRow,token))

                requests = threadpool.makeRequests(
                    box_uptray(login_url, base_url, multiRow, token),
                    (login_url, base_url, multiRow, token))
                [pool.putRequest(req) for req in requests]
                pool.wait()

            #     pool.apply_async(box_uptray(login_url,base_url,multiRow,token))
            # pool.close()
            # pool.join()

            # coroutine = run_more(login_url,base_url,token)
            # tasks = [
            #     asyncio.ensure_future(coroutine),
            # ]
            # loop2 = asyncio.get_event_loop()
            # loop2.run_until_complete(asyncio.wait(tasks))

            # 主线程中等待所有子线程退出
            end = time.time()

            for i in range(multiAccount):
                multiRow = global_config.get_value("TESTROW") + i
                if makeProcessData("#流程开关",
                                   multiRow=multiRow).find("报错") != -1:
                    errAccount += 1
                print("第 %d 次进程中累计报错数为: %d" % (i + 1, errAccount))

            print(
                "========================================================================"
            )
            print("接口性能测试开始时间:", time.asctime(time.localtime(start)))
            print("接口性能测试结束时间:", time.asctime(time.localtime(end)))
            print("接口地址:", base_url)
            print("接口类型:", "post")
            print("线程数:", multiAccount)
            print("每个线程循环次数:", 1)
            print("每次请求时间间隔:", 0)
            print("总请求数:", multiAccount * one_work_num)
            # print("错误请求数:", len(error))
            print("总耗时(秒):", end - start)
            print("每次请求耗时(秒):", (end - start) / (multiAccount * one_work_num))
            print("每秒承载请求数(TPS):",
                  (multiAccount * one_work_num) / (end - start))
            print("平均响应时间(毫秒):", CT.thread_response_avg())
            print(
                "========================================================================"
            )

            # **************************** 常规部分 ****************************
            assert errAccount == 0, \
                "😭 箱子入托盘中,\n共需处理 '%s' 个流程, 有 '%d' 个失败!" \
                %(multiAccount,errAccount)
            print("😭 箱子入托盘中,\n共需处理 '%s' 个流程, 有 '%d' 个失败!" \
                %(multiAccount,errAccount))
        except AssertionError as e:
            self.testResult = "失败"
            raise AssertionError(e)
        except Exception as e:
            self.testResult = "失败"
            raise e
        finally:
            if errAccount == 0:
                self.testResult = "成功"

            # 在excel中写值脚本不可写入try/except,否则html报告中无法区别体现“失败”和“异常”
            global_config.set_value("TESTRESULT", self.testResult)
            self.terminateProcess = True
            writeTextResult(myRow=self.myRow)
def box_uptray(login_url, base_url, multiRow, token):
    '''箱子上托盘主流程
    :param loopTime: 并发数量
    :param login_url: 登陆接口地址
    :param base_url: 上架接口地址
    :return:
    '''
    # **************************** 登陆部分 ****************************
    # username = makeProcessData("经办登录名",multiRow=multiRow)
    # password = makeProcessData("登陆密码",multiRow=multiRow)
    #
    # token = get_token(login_url,username,password)

    # **************************** 交易部分 ****************************
    header = \
        {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/json"
    }

    params = \
        {
            "box_codes": [],
            "tray": makeProcessData("托盘",multiRow=multiRow)
        }

    # 用于迭代添加多个箱号数据
    for i in range(1, 100):
        if i < 10:
            varNum = "0%s" % i
        else:
            varNum = str(i)

        varName = "箱号-%s" % varNum
        varValue = makeProcessData(varName, multiRow=multiRow)

        if varValue != "" and varValue is not None \
                and varValue != "":
            params["box_codes"].append(varValue)
        else:
            break

    params = json.dumps(params).replace("'", "\"")
    result = myRequest(base_url, headers=header, data=params)

    # **************************** 校验部分 ****************************
    initRow = global_config.get_value("TESTROW")
    global_config.set_value("TESTROW", multiRow)

    # if result.get("code") == 200 and result.get("msg") == "OK":
    #     loadProcessValue("#流程开关",realValue="上架成功")
    # else:
    #     # 交易失败,在该数据行“#流程开关”中写入报错信息
    #     if result:
    #         loadProcessValue("#流程开关",realValue="报错:"+result.get("msg"))
    #     else:
    #         loadProcessValue("#流程开关",realValue="报错:系统未响应!")
    # initRow = global_config.get_value("TESTROW")
    # global_config.set_value("TESTROW",multiRow)

    if result.get("code") != 200 or result.get("msg") != "OK":
        # 交易失败,在该数据行“#流程开关”中写入报错信息
        if result:
            loadProcessValue("#流程开关", realValue="报错:" + result.get("msg"))
        else:
            loadProcessValue("#流程开关", realValue="报错:系统未响应!")
    else:
        loadProcessValue("#流程开关", realValue="上架成功")

    global_config.set_value("TESTROW", initRow)
    time.sleep(1)
Beispiel #5
0
    def test01_box_uptray(self):
        ''' 登陆500环境PDA后,扫码进行箱子上托盘 '''
        # **************************** 案例公共信息初始化 ****************************
        self.caseName = (lambda: sys._getframe(1).f_code.co_name)()
        global_config.set_value("CASENAME", self.caseName)
        login_url = self.url + getInterfaceData("登陆接口")
        base_url = self.url + getInterfaceData("调用接口")

        # 与库表中数据主键重复情况均需考虑是否用初始化
        if getInterfaceData("是否数据库初始化") == "是":
            DB().delete(tableName, deleteData)

        try:
            # 确定并发流程数
            multiAccount = eval(makeJsonData("并发流程数"))
            token = get_token(login_url, makeJsonData("经办登录名"),
                              makeJsonData("登陆密码"))
            errAccount = 0
            start = time.time()
            maxNum = 10
            # multis = []

            p = multiprocessing.Pool(processes=maxNum)

            for i in range(multiAccount):
                multiRow = global_config.get_value("TESTROW") + i
                myProcess = p.apply_async(func=box_uptray,
                                          args=(
                                              login_url,
                                              base_url,
                                              multiRow,
                                              token,
                                          ))
                myProcess.daemon = True
                # multis.append(myProcess)

            p.close()
            p.join()

            end = time.time()

            for i in range(multiAccount):
                multiRow = global_config.get_value("TESTROW") + i
                if makeProcessData("#流程开关",
                                   multiRow=multiRow).find("报错") != -1:
                    errAccount += 1
                print("第 %d 次进程中累计报错数为: %d" % (i + 1, errAccount))

            print(
                "========================================================================"
            )
            print("接口性能测试开始时间:", time.asctime(time.localtime(start)))
            print("接口性能测试结束时间:", time.asctime(time.localtime(end)))
            print("接口地址:", base_url)
            print("接口类型:", "post")
            print("最大进程数:", maxNum)
            print("每个进程循环次数:", 1)
            print("每次请求时间间隔:", 0)
            print("总请求数:", multiAccount * 1)
            # print("错误请求数:", len(error))
            print("总耗时(秒):", end - start)
            print("每次请求耗时(秒):", (end - start) / (multiAccount * 1))
            print("每秒承载请求数(TPS):", (multiAccount * 1) / (end - start))
            print("平均响应时间(毫秒):", CM.multi_response_avg())
            print(
                "========================================================================"
            )

            # **************************** 常规部分 ****************************
            assert errAccount == 0, \
                "😭 箱子入托盘中,\n共需处理 '%s' 个流程, 有 '%d' 个失败!" \
                %(multiAccount,errAccount)
            print("😭 箱子入托盘中,\n共需处理 '%s' 个流程, 有 '%d' 个失败!" \
                %(multiAccount,errAccount))
        except AssertionError as e:
            self.testResult = "失败"
            raise AssertionError(e)
        except Exception as e:
            self.testResult = "失败"
            raise e
        finally:
            if errAccount == 0:
                self.testResult = "成功"

            # 在excel中写值脚本不可写入try/except,否则html报告中无法区别体现“失败”和“异常”
            global_config.set_value("TESTRESULT", self.testResult)
            self.terminateProcess = True
            writeTextResult(myRow=self.myRow)