def run_test(test_id): settings = Settings.load() settings.session = dict() settings.save() if len(settings.tests[test_id]) == 0: return redirect("/tests", 302) add_pages(settings.tests[test_id]) form = RunController(request.form) form.index.choices = RunController.create_pages_drop_down( settings.tests[test_id]) if request.method == "POST" and form.validate(): settings = Settings.load() form = RunController(request.form) settings.tool = form.tool.data settings.index_page = form.index.data settings.save() return redirect( "http://localhost:" + str(PORT) + "/" + form.index.data, 302) return render_template("creator/run.html", form=form, test_id=test_id)
def delete_page(test_id, page_id): settings = Settings.load() del settings.tests[test_id][page_id] settings.save() return redirect("/" + test_id + "/pages", 302)
def delete_test(test_id): settings = Settings.load() del settings.tests[test_id] settings.save() return redirect("/tests", 302)
def new_choice(test_id, page_id, field_id): settings = Settings.load() field = settings.tests[test_id][page_id].form.elements[field_id] form_creator = settings.tests[test_id][page_id].form if field.element_type != "SelectField": return redirect("/" + test_id + "/" + page_id + "/form", 302) form = ChoiceController(request.form) if request.method == "POST" and form.validate(): form = ChoiceController(request.form) field.choices.append((form.name.data, form.value.data)) form_creator.add_select_field(field_id, required=False, options=field.choices) settings.tests[test_id][page_id].form = form_creator settings.save() return redirect("/" + test_id + "/" + page_id + "/form/fields/" + field_id + "/choices", 302) return render_template('field/choices/new.html', field_id=field_id, test_id=test_id, page_id=page_id, form=form )
def edit_link(test_id, page_id, link_id): settings = Settings.load() link = settings.tests[test_id][page_id].links[int(link_id)] form = LinkController(request.form) form.page.choices = LinkController.create_pages_drop_down( settings.tests[test_id]) form.page.data = link.page.identifier if request.method == "POST" and form.validate(): form.process(request.form) link = Link(settings.tests[test_id][form.page.data]) settings.tests[test_id][page_id].links[int(link_id)] = link settings.save() return redirect("/" + test_id + "/" + page_id + "/links", 302) return render_template('link/edit.html', form=form, test_id=test_id, page_id=page_id, link_id=link_id)
def delete_link(test_id, page_id, link_id): settings = Settings.load() settings.tests[test_id][page_id].links.pop(int(link_id)) settings.save() return redirect("/" + test_id + "/" + page_id + "/links", 302)
def delete_form(test_id, page_id, form_id): settings = Settings.load() del settings.tests[test_id][page_id].forms[form_id] settings.save() return redirect("/" + test_id + "/" + page_id + "/forms", 302)
def delete_field(test_id, page_id, field_id): settings = Settings.load() del settings.tests[test_id][page_id].form.elements[field_id] settings.save() return redirect("/" + test_id + "/" + page_id + "/form", 302)
def add_pages(new_pages): settings = Settings.load() for (identifier, page) in new_pages.items(): if page.form: page.form.build_form() settings.session[page.identifier] = page settings.save()
def delete_choice(test_id, page_id, field_id, choice_id): settings = Settings.load() field = settings.tests[test_id][page_id].form.elements[field_id] if field.element_type != "SelectField": return redirect("/" + test_id + "/" + page_id + "/form", 302) del settings.tests[test_id][page_id].form.elements[field_id].choices[choice_id] settings.save() return redirect("/" + test_id + "/" + page_id + "/form/fields/" + field_id + "/choices", 302)
def view_form(test_id, page_id): settings = Settings.load() form_creator = settings.tests[test_id][page_id].form if not form_creator: return redirect("/" + test_id + "/" + page_id + "/form/new", 302) return render_template('form/form.html', form_creator=form_creator, test_id=test_id, page_id=page_id)
def list_choices(test_id, page_id, field_id): settings = Settings.load() field = settings.tests[test_id][page_id].form.elements[field_id] if field.element_type != "SelectField": return redirect("/" + test_id + "/" + page_id + "/form", 302) return render_template('field/choices/list.html', field_id=field_id, choices=field.choices, test_id=test_id, page_id=page_id )
def new_test(): settings = Settings.load() form = TestController(request.form) if request.method == "POST" and form.validate(): test_id = form.identifier.data settings.tests[test_id] = dict() settings.save() return redirect("/tests", 302) return render_template('test/new.html', form=form)
def new_field(test_id, page_id): settings = Settings.load() form_creator = settings.tests[test_id][page_id].form form = FieldController(request.form) if request.method == "POST" and form.validate(): form_creator = select(form.type.data, form, form_creator) settings.tests[test_id][page_id].form = form_creator settings.save() return redirect("/" + test_id + "/" + page_id + "/form", 302) return render_template('field/new.html', form=form, test_id=test_id, page_id=page_id)
def new_page(test_id): settings = Settings.load() form = PageController(request.form) if request.method == "POST" and form.validate(): page = Page(form.identifier.data, form.status.data, headers=PageController.prepare_headers(form.headers.data)) settings.tests[test_id][page.identifier] = page settings.save() return redirect("/" + test_id + "/pages", 302) return render_template('page/new.html', form=form, test_id=test_id)
def new_param(test_id, page_id): settings = Settings.load() form = ParamController(request.form) if request.method == "POST" and form.validate(): param = Param(form.name.data, form.value.data) settings.tests[test_id][page_id].params[param.name] = param settings.save() return redirect("/" + test_id + "/" + page_id + "/params", 302) return render_template('param/new.html', form=form, test_id=test_id, page_id=page_id)
def list_links(test_id, page_id, page): settings = Settings.load() links = settings.tests[test_id][page_id].links count = len(links) links = links[(page - 1) * PER_PAGE:page * PER_PAGE] if not links and page != 1: abort(404) pagination = Pagination(page, PER_PAGE, count) return render_template('link/list.html', links=enumerate(links), test_id=test_id, page_id=page_id, pagination=pagination)
def list_pages(test_id, page): settings = Settings.load() pages = settings.tests[test_id] pages = OrderedDict(pages) count = len(pages) pages = OrderedDict( list(pages.items())[(page - 1) * PER_PAGE:page * PER_PAGE]) if not pages and page != 1: abort(404) pagination = Pagination(page, PER_PAGE, count) return render_template('page/list.html', pages=pages, test_id=test_id, pagination=pagination)
def new_form(test_id, page_id): settings = Settings.load() form = FormController(request.form) form.page.choices = FormController.create_pages_drop_down( settings.tests[test_id]) if request.method == "POST" and form.validate(): settings.tests[test_id][page_id].form = FormCreator( form.method.data, form.page.data) settings.save() return redirect("/" + test_id + "/" + page_id + "/form", 302) return render_template('form/new.html', form=form, test_id=test_id, page_id=page_id)
def generator(test_id, page_id): settings = Settings.load() page = settings.tests[test_id][page_id] form = GeneratorController(request.form) form.params_num.data = 0 form.links_num.data = 0 form.status.data = 200 if request.method == "POST" and form.validate(): form = GeneratorController(request.form) if form.params_num.data > 0: param_creator = ParamCreator() param_creator.generate_n_params(form.params_num.data) page.params = {**page.params, **param_creator.params} if form.links_num.data > 0: link_creator = LinkCreator() page_creator = PageCreator() page_creator.generate_n_pages( form.links_num.data, status=form.status.data, headers=GeneratorController.prepare_headers(form.headers.data)) settings.tests[test_id] = { **settings.tests[test_id], **page_creator.pages } link_creator.generate_links_for_page(page_creator.pages) page.links += link_creator.links settings.save() return redirect("/" + test_id + "/pages", 302) return render_template('generator/generator.html', page_id=page_id, form=form, test_id=test_id)
def demo(): form = RunController(request.form) form.index.choices = [("demo", "demo")] demo_form = FormCreator("POST", "demo-action") demo_form.add_text_field("text-field1") demo_form.add_number_field("number-field1", True) demo_form.add_text_field("text-field2", True) demo_form.add_checkbox_field("checkbox-field1") demo_form.add_select_field("select-field1", options=[('cpp', 'C++'), ('py', 'Python'), ('text', 'Plain Text')]) # form.add_radio_field("radio-field1") needs further testing pages1 = PageCreator().generate_n_pages(5, 0) pages1["demo-redirect"] = RedirectPage("demo-redirect", "/demo") add_pages(pages1) links1 = LinkCreator().generate_links_for_page(pages1) pages2 = PageCreator().generate_n_pages(5) pages2["demo-headers"] = Page( "demo-headers", headers={Header("Content-Type", "application/json")}) add_pages(pages2) links2 = LinkCreator().generate_links_for_page(pages2) action_page = Page("demo-action", links=links1) page = Page("demo", form=demo_form, links=links2) add_pages({page.identifier: page, action_page.identifier: action_page}) if request.method == "POST" and form.validate(): settings = Settings.load() form = RunController(request.form) settings.tool = form.tool.data settings.index_page = "demo" settings.save() return redirect( "http://localhost:" + str(PORT) + "/" + form.index.data, 302) return render_template('creator/demo.html', index="demo", form=form)
def new_link(test_id, page_id): settings = Settings.load() form = LinkController(request.form) form.page.choices = LinkController.create_pages_drop_down( settings.tests[test_id]) if request.method == "POST" and form.validate(): link = Link(settings.tests[test_id][form.page.data]) settings.tests[test_id][page_id].links.append(link) settings.save() return redirect("/" + test_id + "/" + page_id + "/links", 302) return render_template('link/new.html', form=form, test_id=test_id, page_id=page_id)
def edit_test(test_id): settings = Settings.load() test = settings.tests[test_id] form = TestController(request.form) form.identifier.data = test_id if request.method == "POST" and form.validate(): form = TestController(request.form) del settings.tests[test_id] test_id = form.identifier.data settings.tests[test_id] = test settings.save() return redirect("/tests", 302) return render_template('test/edit.html', form=form, test_id=test_id)
def edit_page(test_id, page_id): settings = Settings.load() page = settings.tests[test_id][page_id] form = PageController(request.form) form.identifier.data = page.identifier form.status.data = page.status form.headers.data = PageController.raw_headers(page.headers) if request.method == "POST" and form.validate(): form = PageController(request.form) del settings.tests[test_id][page_id] page.headers = PageController.prepare_headers(form.headers.data) page.status = form.status.data page.identifier = form.identifier.data settings.tests[test_id][page.identifier] = page settings.save() return redirect("/" + test_id + "/pages", 302) return render_template('page/edit.html', form=form, test_id=test_id)
def test_case_comparison(): settings = Settings.load() identifiers = ['params', 'page-10-params', 'page-50-params', 'page-100-params', 'page-500-params', 'page-1000-params', 'page-5000-params', 'page-10000-params', 'form-get', 'form-post', 'randoms'] for identif in identifiers: data = {} for k in range(1, len(tools)): data[tools[k][0]] = 0 page = settings.tests["misc"][identif] # print(page.identifier) data[tools[k][0]] += Request.query.filter(and_(Request.tool == tools[k][0]), (Request.path.like('/{0}%'.format(page.identifier)))).count() data = OrderedDict(sorted(data.items(), key=lambda t: t[1], reverse=True)[:15]) data = dict(data) plt.figure(1) series = pd.Series(data={k: int(v) for k, v in data.items()}, index=data.keys(), name=None) series.plot.pie(subplots=True, labels=None, labeldistance=.5, # autopct="%.2f", pctdistance=.7, fontsize=8, figsize=(6, 6), legend=True) L = plt.legend(bbox_to_anchor=(1, 0.5), loc="center left", labels=series.index) for j in range(0, len(data.items())): L.get_texts()[j].set_text("{0} ({1}%)[{2}]" .format(list(data.keys())[j][:15], round(100 * float(list(data.values())[j]) / sum(data.values()), 2), list(data.values())[j])) plt.subplots_adjust(right=0.8) plt.title("Test Case Comparison ({0})".format(page.identifier)) plt.savefig("images/testcases_{0}.png".format(page.identifier), bbox_inches='tight') plt.clf() plt.figure(2) df = pd.Series(data={k: int(v) for k, v in data.items()}, index=data.keys()) ax = df.plot(kind='bar', title="Sum of executed requests comparison", figsize=(15, 10), fontsize=12) for p in ax.patches: ax.annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()), fontsize=15) ax.set_xlabel("Tool name", fontsize=15) ax.set_ylabel("Test case ({0}) sum comparison".format(page.identifier), fontsize=15) plt.savefig("images/testcasesBar_{0}.png".format(page.identifier), bbox_inches='tight') plt.clf() #random links data = {} for link in settings.tests["misc"]["randoms"].links: for k in range(1, len(tools)): data[tools[k][0]] = 0 page = link.page data[tools[k][0]] += Request.query.filter(and_(Request.tool == tools[k][0]), (Request.path.like('/{0}%'.format(page.identifier)))).count() data = OrderedDict(sorted(data.items(), key=lambda t: t[1], reverse=True)[:15]) data = dict(data) plt.figure(3) series = pd.Series(data={k: int(v) for k, v in data.items()}, index=data.keys(), name=None) series.plot.pie(subplots=True, labels=None, labeldistance=.5, # autopct="%.2f", pctdistance=.7, fontsize=8, figsize=(6, 6), legend=True) L = plt.legend(bbox_to_anchor=(1, 0.5), loc="center left", labels=series.index) for j in range(0, len(data.items())): L.get_texts()[j].set_text("{0} ({1}%)[{2}]" .format(list(data.keys())[j][:15], round(100 * float(list(data.values())[j]) / sum(data.values()), 2), list(data.values())[j])) plt.subplots_adjust(right=0.8) plt.title("Test Case Comparison ({0})".format(page.identifier)) plt.savefig("images/testcasesPieSumRandom.png", bbox_inches='tight') plt.clf() plt.figure(4) df = pd.Series(data={k: int(v) for k, v in data.items()}, index=data.keys()) ax = df.plot(kind='bar', title="Sum of executed requests comparison", figsize=(15, 10), fontsize=12) for p in ax.patches: ax.annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()), fontsize=15) ax.set_xlabel("Tool name", fontsize=15) ax.set_ylabel("Test case (miscellaneous) sum comparison", fontsize=15) plt.savefig("images/testcasesBarSumRandom.png", bbox_inches='tight') plt.clf()
def add_page(page): settings = Settings.load() settings.session[page.identifier] = page settings.save()
def list_tests(): settings = Settings.load() tests = settings.tests return render_template('test/list.html', tests=tests)