示例#1
0
    def iteration(self, f: Oracle, x: np.ndarray,
                  optimizer: Callable[[Callable], Optimizer], iteration: int,
                  payload: Any) -> Tuple[np.ndarray, Any]:
        grad = f.grad(*x)
        # print(f"x = {x}, grad = {grad}")
        correct_hesse = make_positive_definite(f.hesse(*x), self._stats)
        inv_hes = np.linalg.inv(correct_hesse)
        p = inv_hes.dot(grad)

        # p = p / np.linalg.norm(p)

        # print(f"p = {p}")
        def g(lmbd):
            return f(*(x - p * lmbd))

        opt = optimizer(g)
        opt._stats = self._stats
        coeff = opt.optimize()
        # print(f"coeff = {coeff}")
        # print(f"prev_f = {f(*x)}, cur_f = {f(*(x - p * coeff))}")
        delta = p * coeff
        self._stats.report('*', p.size)
        x1 = x - delta
        self._stats.report('-', x.size)

        return x1, None
示例#2
0
def generate_mix_testcase(mixcase_list):
    if not mixcase_list:
        logger.info("没有需要组合的用例")
        return None
    oracle = Oracle(readconfig.db_url)
    logger.info("<开始生成组合测试用例>")
    for sl in mixcase_list:
        mixid = sl['XF_MIXID']
        caseid_list = sl['XF_CASEID'].split(',')
        caseid_str = ','.join(caseid_list)
        caseids = str(tuple(caseid_list))
        if len(caseid_list) == 1:
            caseids = caseids.replace(',', '')
        # order by caseid,tsid
        sql = "select * from xf_testcase where xf_caseid in %s " \
              "order by instr('%s',rtrim(cast(xf_caseid as nchar))),xf_tsid" % (caseids, caseid_str)
        loop_kwlist = oracle.dict_fetchall(sql)
        if loop_kwlist:
            func = DemoTestCase.group(loop_kwlist)
            method_name = "test_" + mixid
            setattr(DemoTestCase, method_name, func)
            logger.info("已生成组合用例 %s ,包含基础用例id %s" % (method_name, caseid_list))
            Action.set_case_info(method_name, loop_kwlist[0]["XF_CASEDESC"],
                                 DemoTestCase)
        else:
            logger.info("基础用例id %s 错误,无法生成组合用例 test_%s " %
                        (caseid_list, mixid))

    logger.info("<组合测试用例生成结束>")
    oracle.close()
示例#3
0
 def get_location(self, location_id):
     oracle = Oracle(readconfig.db_url)
     sql = "select xf_location from xf_pagelocation where xf_locationid = '%s'" % location_id
     location_list = oracle.dict_fetchall(sql)
     if not location_list:
         raise Exception("错误location_id :%s,无法找到对应的location" % location_id)
     location = location_list[0]['XF_LOCATION']
     # clear string blank
     location = location.strip()
     # complement the location
     # solve problem: prevent location id from maintain many time
     # for example: add row case: location id change by rule
     if "%s" in location:
         location_ = location
         location_ = location.replace("%s", "")
         match_value = (re.findall("\[(.+?)\]",
                                   location_))[0]  # match a value in []
         match_value = match_value.replace("=", ",")
         # change location format to "[contains(@id,XXX)]"  from [@id="XXX"]
         rep_value = "[contains(" + match_value + ")]"
         location_ = re.sub("\[(.+?)\]", rep_value, location_, count=1)
         count = len(self.driver.find_elements_by_xpath(location_)) - 1
         # count = self._use_keyword("count_elements", location_) - 1
         location = location.replace("%s", str(count))
     return location
示例#4
0
def generate_testcases(testcaseid_list):
    if testcaseid_list == []:
        logger.info("找不到基础用例信息")
        return None
    oracle = Oracle(readconfig.db_url)
    logger.info("<开始生成基础测试用例>")
    for tl in testcaseid_list:
        caseid = tl['XF_CASEID']
        #  notice  the order of step execution
        sql = "select * from xf_testcase where xf_caseid='%s' order by xf_tsid" % caseid
        loop_kwlist = oracle.dict_fetchall(sql)
        if loop_kwlist:
            ifmix = loop_kwlist[0][
                'XF_IFMIX']  # it will not execute the case if ifmix larger than 0
            if ifmix:
                logger.info("测试用例 %s 不能单独执行" % caseid)
            else:
                func = DemoTestCase.group(loop_kwlist)
                method_name = "test_" + caseid
                setattr(DemoTestCase, method_name, func)
                logger.info("已生成用例 %s" % method_name)
                Action.set_case_info(method_name,
                                     loop_kwlist[0]["XF_CASEDESC"],
                                     DemoTestCase)
        else:
            logger.info("找不到该用例id %s,无法生成用例 test_%s" % (caseid, caseid))
    logger.info("<基础测试用例生成结束>")

    oracle.close()
示例#5
0
 def get_location(self, location_id):
     oracle = Oracle(readconfig.db_url)
     sql = "select xf_location from xf_pagelocation where xf_locationid = '%s'" % location_id
     location_list = oracle.dict_fetchall(sql)
     location = location_list[0]['XF_LOCATION']
     if location is None:
         raise Exception("location_id 错误,无法找到对应的location")
     return location
示例#6
0
 def locate_menu_by_id(self,*location_ids):
     oracle = Oracle(readconfig.db_url)
     sql = ""
     for location_id in location_ids:
         sql = "select xf_location from xf_pagelocation where xf_locationid = '%s'" % location_id
         location_list = oracle.dict_fetchall(sql)
         location = location_list[0]['XF_LOCATION']
         if location == None:
             raise Exception("location_id 错误,无法找到对应的location")
         self.click(location)
    def run(self,
            f: Oracle,
            x0: np.ndarray,
            step_optimizer: Callable[[Callable], Optimizer],
            iterations: Optional[int] = None,
            dx: Optional[float] = None,
            df: Optional[float] = None) -> OptimizationResult:
        x = x0
        iteration_count = 0
        trajectory = [x]
        cause = None
        payload = self.init()
        self._stats.clear()
        f.reset_stat()

        while (iterations is None) or (iteration_count < iterations):
            self._stats.start()
            x1, payload = self.iteration(f, x, step_optimizer, iteration_count,
                                         payload)
            self._stats.stop()

            trajectory.append(x1)
            delta = np.linalg.norm(x1 - x)
            self._stats.report('*', x.size)
            self._stats.report('+', x.size - 1)
            # self._stats.report('sqrt', 1)

            if dx is not None and np.linalg.norm(delta) < dx:
                cause = "Exceed limit of accuracy for argument"
                break
            if df is not None and abs(f(*x1) - f(*x)) < df:
                cause = "Exceed limit of accuracy for function"
                break
            if x.dot(x) > 1e10:
                cause = "Divergence"
                break
            if np.linalg.norm(f.grad(*x)) < 1e-10:
                cause = "Plateau"
                break
            iteration_count += 1
            x = x1

        self._stats.assimilate(f)
        if cause is None:
            cause = "Exceed limit of iterations"

        arithm_stats = self._stats.arithm
        if len(self._stats.extra) > 0:
            arithm_stats = f'{arithm_stats} (+{",".join(list(map(lambda x: str(x[1] * 15), self._stats.extra.items())))})'
        calls = [self._stats.fcalls, self._stats.gcalls, self._stats.hcalls]

        return OptimizationResult(x0, x, iteration_count, trajectory, cause, f,
                                  self.name(), self._stats.memory,
                                  self._stats.elapsed_time, arithm_stats,
                                  calls)
    def iteration(self, f: Oracle, x: np.ndarray,
                  optimizer: Callable[[Callable], Optimizer], iteration: int,
                  payload: Any) -> Tuple[np.ndarray, Any]:
        grad = f.grad(*x)

        def g(lmbd):
            return f(*(x - grad * lmbd))

        opt = optimizer(g)
        opt._stats = self._stats
        coeff = optimizer(g).optimize()

        delta = grad * coeff
        self._stats.report('*', grad.size)
        x1 = x - delta
        self._stats.report('-', x.size)

        return x1, None
示例#9
0
    def iteration(self, f: Oracle, x: np.ndarray,
                  optimizer: Callable[[Callable], Optimizer], iteration: int,
                  payload: Any) -> Tuple[np.ndarray, Any]:
        ws, ps = payload

        def __square(w: np.ndarray) -> float:
            self._stats.report('*', w.size)
            self._stats.report('+', w.size - 1)
            return w.dot(w)

        ws.append(-f.grad(*x))  # w_k
        gamma = 0.0
        if iteration % len(x) != 0:
            gamma = __square(ws[-1]) / __square(ws[-2])
            self._stats.report('/', 1)

        p = ws[-1]
        # p = p  # / np.linalg.norm(p)
        if gamma != 0.0:
            p += gamma * ps[-1]
            self._stats.report('*', p.size)
            self._stats.report('+', p.size)
        ps.append(p)

        def g(lmbd):
            return f(*(x + p * lmbd))

        opt = optimizer(g)
        opt._stats = self._stats
        lr = opt.optimize()
        # print(lr)
        #
        # print((ws[-1][0] * p[0] + ws[-1][1] * p[1]) /
        #       ((202.0 * p[0] - 200 * p[1]) * p[0] +
        #        (-200 * p[0] + 200 * p[1]) * p[1]))
        # print(ws, p)
        delta = p * lr
        self._stats.report('*', p.size)
        # print(f"latest gradient(w): {ws[-1]}, p = {p}, delta = {delta}, x = {x}, gamma = {gamma}, lr = {lr}")
        x1 = x + delta
        self._stats.report('+', x.size)

        return x1, [ws, ps]
示例#10
0
        tmid = sl['TMID']
        tcid_list = tcid.split(',')
        for func_name in tcid_list:
            demotestcase.use_keyword(DemoTestCase, func_name)
        setattr(DemoTestCase, 'test_' + tmid, '')


def _generate_testsuite(tcid):
    """new a testsuite"""
    tcid_list = tcid.split(',')
    tests = []
    for tl in tcid_list:
        tl = "test_" + tl
        tests.append(tl)
    suite = unittest.TestSuite(map(DemoTestCase, tests))
    return suite


oracle = Oracle(readconfig.db_url)
keyword_list = oracle.dict_fetchall(
    "select * from xf_tcdata order by tcid,tsid")
_generate_testmethod(keyword_list)

suite_list = oracle.dict_fetchall("select * from xf_tsuite order by tmid")

oracle.close()

if __name__ == "__main__":
    unittest.TextTestRunner().run()
#     result = unittest.main(verbosity=2)
示例#11
0
        np.array([-1.0, 1.0]),
        np.array([3.0, 2.0]),
        np.array([0.1, -0.5]),
    ]

    it = 100

    for i in range(3):
        print(f'Function {reprs[i]}:')

        descent_results = []
        conjugate_results = []
        newton_results = []

        for x0 in initial_points:
            f = Oracle(2, functions[i], gradients[i], hesse[i], reprs[i])
            descent_result = GradientDescent().run(
                f,
                x0,
                lambda g: FibonacciOptimizer(g, (0.0, 1.01), 1e-5),
                df=1e-6,
                iterations=it)
            descent_results.append(descent_result)
            conj_result = ConjugateGradients().run(
                f,
                x0,
                lambda g: FibonacciOptimizer(g, (0.0, 1.01), 1e-5),
                df=1e-6,
                iterations=it)
            conjugate_results.append(conj_result)
            # print("----")
示例#12
0
from common.oracle import Oracle
from config import readconfig
from common.logger import logger

oracle = Oracle(readconfig.db_url)
Flag = readconfig.debug_mode

# deciding execute all testcases or debug some testcases controling by the config mode in ini,if mode == 1,
# debug case,else execute all testcases
# the config executeuser deciding whose testcase to execute
if Flag:
    logger.info("***调试模式***")
    execute_user = readconfig.execute_user
    if execute_user == '':
        sql = "select xf_caseid from xf_casedebug where xf_executeuser is null " \
              "and xf_caseid is not null order by xf_caseid"
        testcaseid_list = oracle.dict_fetchall(sql)
        sql = "select xf_mixid from xf_casedebug where xf_executeuser is null " \
              "and xf_mixid is not null order by xf_mixid"
        mixid_list = oracle.dict_fetchall(sql)
    else:
        sql = "select xf_caseid from xf_casedebug where xf_executeuser = '******' " \
              "and xf_caseid is not null order by xf_caseid" % execute_user
        testcaseid_list = oracle.dict_fetchall(sql)
        sql = "select xf_mixid from xf_casedebug where xf_executeuser = '******' " \
              "and xf_mixid is not null order by xf_mixid" % execute_user
        mixid_list = oracle.dict_fetchall(sql)
    mixcase_list = []
    for i in mixid_list:
        mixid = i["XF_MIXID"]
        sql = "select * from xf_mixcase where xf_mixid = '%s'" % mixid