如何在Flask中的一个非常简单的网页上进行集成测试

时间:2018-04-19 21:17:12

标签: flask integration-testing jinja2

我的项目有一个Web界面,提供MyPackage Python模块的一些功能。基本上它是所有路线相同的一页。我甚至不在这里使用数据库。有没有可以测试的东西?

class MyTextForm(FlaskForm):
    text_content = StringField('mytextfield', validators=[DataRequired(), Length(20, 30)], widget=TextArea())


@app.route('/', methods=['POST', 'GET'], defaults={'sub': 'sub1'})
@app.route('/subpage/<sub>', methods=['POST', 'GET'])
def index(subpage):
    form = TweetTextForm()
    prediction_results = dict()
    try:
        model = app.models[subpage]

        if form.validate_on_submit():
            result = model.process(request.form["text_content "])

        return render_template('template.html',
                               value1=value1,
                               value2=value2,
                               form=form,
                               data=model.get_data())
    except Exception:
        abort(404)

我还应该测试jinja模板吗? 我不确定应该在那里测试什么?

1 个答案:

答案 0 :(得分:0)

是的,您可以测试您的网页是否加载并按照您期望的方式使用Selenium之类的内容。例如,你可以让Selenium打开一个浏览器,转到你的每个url路由,并确认它正在正确加载元素。

这不会测试您的视觉效果,但它可以让您确认后端和模板正在执行它们应该执行的操作。

你可能有类似的东西:

integration_tests.py

import unittest
from selenium import webdriver

class PageLoadTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()

    def tearDown(self):
        self.driver.quit()

    def test_main_page(self):
        self.driver.get('/subpage/sub')
        element_to_check = self.driver.find_element_by_tag_name('name_of_element_tag_you_want_to_check')
        self.assertEqual(element_to_check.text, 'text that should be there')

if __name__ == '__main__':
    unittest.main()

然后你可以启动测试服务器并从shell调用它来运行测试(使用单独的终端):

服务器终端:

$ flask run

命令终端:

$ python integration_tests.py

我还建议使用html_sanitizerBeautifulSoup添加和测试(单位和集成/功能)表单元素和<sub>变量的一些输入验证/清理不需要的HTML等。