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
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()
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
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()
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
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
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]
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)
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("----")
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