Example #1
0
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)
Example #2
0
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)
Example #3
0
def delete_test(test_id):
    settings = Settings.load()

    del settings.tests[test_id]
    settings.save()

    return redirect("/tests", 302)
Example #4
0
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
                           )
Example #5
0
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)
Example #6
0
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)
Example #7
0
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)
Example #8
0
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)
Example #9
0
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()
Example #10
0
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)
Example #11
0
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)
Example #12
0
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
                           )
Example #13
0
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)
Example #14
0
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)
Example #15
0
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)
Example #16
0
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)
Example #17
0
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)
Example #18
0
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)
Example #19
0
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)
Example #21
0
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)
Example #22
0
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)
Example #23
0
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)
Example #24
0
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)
Example #25
0
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()
Example #26
0
def add_page(page):
    settings = Settings.load()
    settings.session[page.identifier] = page
    settings.save()
Example #27
0
def list_tests():
    settings = Settings.load()

    tests = settings.tests

    return render_template('test/list.html', tests=tests)